StudioSixPlusOne / rack-modules

VCV Rack modules
GNU General Public License v3.0
27 stars 8 forks source link

Zazel #69

Closed curlymorphic closed 4 years ago

curlymorphic commented 4 years ago

image Initial UI as discussed on discord

zencoderme commented 4 years ago

I like it. Everything looks good and it's clean and clear what everything should do. I think it's good to merge

curlymorphic commented 4 years ago

Zazel

This pull request has now been updated to include a working version of the module Zazel for testing and discussion.

As well as fulfilling it's the primary purpose of a live control device, the module can also function as an LFO and envelope generator.

Having used the module connected to an APC mini, I would like to make the following proposals

@mattcollier I feel this could be tested now to get feedback, I shall post download links on discord

Downloads can be found : https://github.com/StudioSixPlusOne/rack-modules/releases/tag/RC1.00.00.02

mattcollier commented 4 years ago

Build warnings: https://gist.github.com/mattcollier/5fd897de11a66690fa401dc0c5a7b66f

One just looks like a typo in the word default

mattcollier commented 4 years ago

Looks like something bad happens when the duration knob is turned to zero.

zazel-test-harness.vcv.zip

mattcollier commented 4 years ago

CV Input on start or end value appears to disregard the min/max set by the main start/end knobs.

zazel-test-harness-2.vcv.zip

curlymorphic commented 4 years ago

Build warnings: https://gist.github.com/mattcollier/5fd897de11a66690fa401dc0c5a7b66f

One just looks like a typo in the word default

Fixed

Looks like something bad happens when the duration knob is turned to zero.

zazel-test-harness.vcv.zip

The minimum duration was set at 0.000001 * the clock signal, this was far too low, I have adjusted to 0.001.

CV Input on start or end value appears to disregard the min/max set by the main start/end knobs.

zazel-test-harness-2.vcv.zip

I don't think these are min/max just start and end levels. I would expect these to be adjusted both positive and negative from the parameter setting via CV, this is a design decision, so let's wait for ZenCoderMe to return before we make any changes.

from Discord Mattcollier

Curlymorphic could this be a good pairing for a latching button implementation? https://library.vcvrack.com/AS/TriggersMKI there are a number of button modules that feature latching

I am aware of a few modules that can be used for latching, but by using this we require 2 additional modules alongside Zazel to fulfill the original design requirements, A midi to cv gate, a latch, and Zazel. An alternative to reinstating the trigger buttons could be to handle the midi in Zazel, reducing this to just a single module. Again I feel this is more of a design decision and we should wait for ZenCoderMe.

mattcollier commented 4 years ago

Comments based on 958ec9c10bcf0fbfeeb52923918f07373ddf3530

Build warnings and zero delay issues are fixed, TY!

Trying out one-shot with a button. First, I was surprise that the start input is behaving like a gate and not a trigger. Don't know if this is intended or not. I believe this is just an AD envelope, so trigger seems more appropriate.

More importantly however, the shape of the envelope is nothing like what I would expect. I expect that the delay setting would affect the attack curve, but it only seems to be affecting the decay.

Am I correct that this is doing an AD envelope where the A and D duration are the same producing a mirror image? That's how it appears in the 'cycle' mode.

zazel-button.vcv.zip

mattcollier commented 4 years ago

Issues related to mapping a module parameter/learning mode.

If I click the module parameter UI in Zazel and then choose X SCL knob on the scope, Rack locks up 100% of the time. The window won't close and most of the UI is non-responsive. Seems like probably a Rack issue since the whole platform is locking up, not qualified to debug myself.

Similar problems occur if I click the module parameter UI and click on any of Zazel's own buttons. I imagine the disallowing modulation of Zazel's own parameters if possible would be a good idea.

rack-lock.vcv.zip

curlymorphic commented 4 years ago

Comments based on 958ec9c

I will include a youtube video looking into these points, as it may be clearer, I am also not sure we are talking about the same things, so it may add some clarity. I have copied my terminal output from git to a note in the patch, as a confirmation of the SHA used.

I have noted an additional bug that I shall fix, where the one-shot, cycle switch appears not to load it's state correctly, as your patch UI shows oneshot mode, but Zazel is clearly working in cycle mode upon initial loading

Trying out one-shot with a button. First, I was surprised that the start input is behaving like a gate and not a trigger. Don't know if this is intended or not. I believe this is just an AD envelope, so trigger seems more appropriate.

Zazel is an AHD envelope, allowing for the parameter to be held at one of the states, thus requiring a gate. With an external controller, it is normal to want some buttons to latch, and some to toggle, this is why gates are used. All software I have used with external controllers has worked in this manner. In VCV Rack I would select this option using the momentary or toggle options from the context menu of the midi routing module, such as MIDI-CAT. This would soon become a complex arrangement of modules when setting up multiple external triggers, I currently have 72 external triggers setup for a drum sequencer, and filter fades, This would be a lot of additional modules and processing power if this were only to work on triggers. I am still having to put additional button modules between MIDI-CAT and Zazel, due to the removal of the trigger buttons, I feel it is very important these are reinstated.

image

More importantly, however, the shape of the envelope is nothing like what I would expect. I expect that the delay setting would affect the attack curve, but it only seems to be affecting the decay. Am I correct that this is doing an AD envelope where the A and D duration are the same producing a mirror image? That's how it appears in the 'cycle' mode.

All the curves are using Robert Penners easing functions, http://robertpenner.com/easing/ .When in one shot mode the attacks are using the easein, the decay the easeout functions, when in cycle mode the easeinout functions are used. This corresponds with zengamers request on discord. The duration control affects both the attack and decay times. this can be seen in the video.

zazel-button.vcv.zip

Issues related to mapping a module parameter/learning mode.

If I click the module parameter UI in Zazel and then choose X SCL knob on the scope, Rack locks up 100% of the time. The window won't close and most of the UI is non-responsive. Seems like probably a Rack issue since the whole platform is locking up, not qualified to debug myself.

Similar problems occur if I click the module parameter UI and click on any of Zazel's own buttons. I imagine the disallowing modulation of Zazel's own parameters if possible would be a good idea.

rack-lock.vcv.zip

This is a concern, as I can not replicate this behavior on my desktop under Linux or widows, nor on my old laptop. Maybe there is a chain of events that would need identifying so I can investigate. Again I will demonstrate in the video

https://youtu.be/Ckv7Fdl63Bw going for the lowest quality youtube video has made me sound like a 1960's robot

curlymorphic commented 4 years ago

Copied from discord 6 June 2020

ZengamerToday at 6:55 PM Sorry for the delayed response, it's been a long, rough week here. I'm really loving what I've seen so far after about 20 minutes using it. I second the proposed changes and would like to propose a few others. These aren't necessarily new functions, just additions to what's there.

  1. Add a choice for a random easing function. I love random and that's a great candidate for consistent randomization
  2. Just like a module can be "learned", add a function to "learn" the start and end values of the parameter being modulated. That way someone could use a CV to set it, or manually set it and forget by hand, or allow for a bit more interactivity with the musical environment between the patch and the player by entering everything in one fluid action. A use case: Alice wants to change the resonance of a filter while jamming on a patch. She clicks the learn button on Zazel, then clicks the filter frequency knob. Zazel then records the knob that was clicked and the value it's at right now. The Start knob on Zazel moves to the appropriate location to match that value. She then moves the filter frequency knob and, when she stops, Zazel records the value and the End knob snaps to the appropriate location corresponding to the end value.

Use case 2: Bob wants to change the resonance of a filter while making a patch. He clicks the learn button on Zazel, then clicks the filter frequency knob. Zazel records the know that was clicked and the value it's at right now. The Start knob on Zazel moves to a location like the case above. Bob wants to have really fine control over the change of the parameter so that it tracks to his patch, he moves the start knob on Zazel and the frequency cutoff of his filter moves along with the value Bob dials in with Zazel. The same behavior would work for the end value too. Use case 3: Wendy wants a sequencer to change the resonance on a filter. She likes the easing functions of Zazel so she connects the output of a couple of sequencers to the Start and End CV inputs. She clicks learn on Zazel, then the frequency cutoff on the filter. The Start and End knobs on Zazel will change as the CV values change. The filter frequency cutoff modulates according to the easing function and values the module has every time it receives a trigger. The duration knob is great The CV out is great because it allows a CV modulation that tracks along with the modulated control. Run Zazel through an inverter and get movement in the opposite direction. It makes for some nice effects That does make me wonder if a multi-parameter Zazel would be a useful tool. Maybe a version that's got three or four sets of controls stacked vertically on top of each other. I don't know, that's a stream of conscious idea I'm having in real time

CurlymorphicToday at 10:54 PM @Zengamer cool, I will have a look over the coming days, to see what can be done, as always with ideas comes questions.

  1. when / how would the random occur?
  2. seams straight forward enough CurlymorphicToday at 11:08 PM
  3. multiparameter. I think this would be a brilliant idea, going to have to think about how to present this. My initial thoughts are upto 16 parameters per Zazel, then we can use polyphonic cv inputs, with some form of selector on the uI to select the current editable parameter. I will post some images of any ideas I get, but it would be good to hear ideas on how this should be presented,
mattcollier commented 4 years ago
1. Add a choice for a random easing function. I love random and that's a great candidate for consistent randomization

I think this is best handled by noise/sample hold on the easing shape input. Then we don't have a proliferation of controls related to when the shape gets randomized, the user works with sample/hold module for that. Maybe a nice pairing with Tyrant!

curlymorphic commented 4 years ago
1. Add a choice for a random easing function. I love random and that's a great candidate for consistent randomization

I think this is best handled by noise/sample hold on the easing shape input. Then we don't have a proliferation of controls related to when the shape gets randomized, the user works with sample/hold module for that. Maybe a nice pairing with Tyrant!

I agree with @mattcollier, as this control does not form a core function, and can easily be produced with the addition of a single module only where required.

curlymorphic commented 4 years ago

image

curlymorphic commented 4 years ago

image