anthonyalfimov / Stable-Delay

AU, VST3. A WIP delay/chorus/flanger plugin
GNU General Public License v3.0
5 stars 1 forks source link

Free-form Subdivision Tempo Sync Specification #52

Open anthonyalfimov opened 3 years ago

anthonyalfimov commented 3 years ago

The top post will be updated with options and decisions for the tempo sync implementation.


General requirements

When tempo sync is enabled, two parameters become available: divisor and factor. The sync unit is calculated by dividing 1 bar by the divisor, and multiplying by the factor.


Control values

I believe that the values available for the divisor and the factor through controls should be fairly limited.

The divisor should span values from 2 or 3 to 64. The resolution for the divisor should be finer at smaller values and more coarse at higher values. If you want to set the divisor to 32, you don't want to "hunt" for the value between less meaningful 31 and 33.

I also don't think that factor values above 10-12 would be musically meaningful.

Of course, value selection should be thoroughly tested.


Control label

I think that both divisor and factor should share the same parameter label. This way the value will be displayed in a logical form and in one place, e.g. 3/4, 7/9.

When #31 is implemented, single label will allow typing in the subdivision directly. This is faster and more intuitive. The field should accept multiple input formats, e.g.: 3 4, 3/4, 0.75.

Any subdivision within the parameter range should be accepted, not just the ones possible using control values. This way, controls will give faster access to more "reasonable" subdivisions, while typing in will grant full flexibility.


Synced parameter range

The actual parameter range will depend on the host tempo. This is important if this parameter needs to allocate memory based on its range (e.g. delay time). Tempo can vary throughout playback, so we can't allocate based on a specific tempo.

Currently, I see two possible solutions:

  1. Limit the acceptable tempo range. A limit on the minimum tempo should be enough. Allocate memory based on the largest subdivision and the smallest tempo. This will result in a bigger buffer.
  2. Fix the parameter range and limit available factor-divisor combinations based on tempo. This could mess up plugin settings if tempo changes during playback and makes the selected option unavailable.

Hence, (1) is the better solution.

Study DAWs to find their minimum and maximum tempo values. Confirm that the fastest subdivision at the fastest tempo is possible.


UI

"Sync" could not just toggle tempo sync on and off, but step through subdivision values and "Free" option. Such a setup, however, does not allow to quickly disable sync. It also separates the displaying of factor and divisor.

So, I think a better solution would be to keep the "Sync" control as a toggle button.

Input for the factor and the divisor could be realised as two concentric knobs with a single label. "Sync" toggle can be positioned under the label.

Mockup

Tempo Sync