i've been working on a clock division / multiplication implementation for white whale, it's almost done and testing is looking good so far. i'm implementing it as a generic solution, and my plan is to put it in libavr32 so that it can be easily added to other firmwares as well, orca is next, and then at some later point meadowphysics/kria/ansible, perhaps even a TT operator.
at this point i'd like to get a community input on how it should be integrated into the ww UI. the original idea (sorry, don't remember who suggested it) was to use the clock knob to set div/mult when an external clock is connected. however the new implementation supports more than a simple div/mult, and i'd like to take advantage of it.
clock div/mult factor - you can use both division and multiplication at the same time. so you could divide by 3 and multiply by 4, for instance. i think being able to do this outweighs the convenience of using the clock knob, but it does mean that div/mult must be set with the grid. i'm thinking perhaps the button left to
meta could be used to open the clock preference page in the lower part of the grid, and on that page one row can be used to set division and one row to set multiplication, which will give you a range of 1..16 for each. this will also allow you to play with div/mult live - it reacts well to live changes.
the clock knob - perhaps it could be used for a quick select of one of the "popular" options - /2, /3, /4, *2, *3, *4, 3/2, 3/4 etc etc. if you need something else you can still set it on the clock preference page. but maybe it should be used for a different purpose altogether - what about using both knobs for live input, one for A channel and one for B, for instance?
tap tempo vs following the clock - the new clock implementation is able to follow the master clock even when the master is stopped, giving you the tap tempo ability. the downside to this is that you might actually want it to stop when the master clock stops. i think this should be a selectable option, which could be changed on the clock preference page as well (or perhaps this deserves a dedicated button in the top row). also, when "follow the clock" option is selected and div/mult is set to 1/1 it will follow the clock directly - this is so that ww can be used with swing or irregular clock.
internal clock - i think div/mult should also apply to the internal clock as well, so you can play with div/mult regardless of how ww is clocked. what about tap tempo - should it be possible to use it to set the internal clock rate?
clock output - should it still mirror the external/internal clock? i think it's more useful to output the divided/multiplied clock here.
some information about the implementation: it's called
synced_clock and it has its own internal clock that keeps running at all time. when an external clock is received it calculates the average and adjusts itself accordingly. the average is calculated based on the last 3 taps - this can be adjusted (could also be a configurable option) - more taps means it will be more stable when used with an unstable external clock, but it will react to changes slower. it does detect if a sudden change occurred, in which case it will recalculate the average immediately after receiving a 2nd tap. i didn't add double trigger rejection - this could be easily added in the future if needed. clock state and options will be stored in presets.
i'll post a beta version here hopefully in the next couple of days - if anybody is willing to help me test it it would be greatly appreciated!