-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Set the BPM explicitly from LFE #46
Comments
Looks like the BPM voltage is this:
So ... for
This checks out:
|
Using 4 MIDI CC inputs to generate BPM voltages (the more, the smoother it is between higher BPMs) ...
Screenshot of used modules: In the above, the offset modules are set to the following:
and then for the umix module:
|
Looks like I found a better solution: the exponent module configured with:
offset module:
This setup gives the following spread:
The differences between those:
That's as close as I could get to linear 😉 This experiment was accomplished with the following setup: |
The one downside of that last approach was that, as the 300 BPM mark is approached, resolution is lost and things get pretty jumpy. In fact, long before the 300 BPM mark. Good new/bad news:
It requires a couple of right-click changes to the MIDI CC - CV module: (uncheck "Smooth" and check "14-bit ...") With that change, the following was able to generate a perfectly smooth, continuous BPM ramp, from 30 to 300, no BPMs left behind: lfe> (list-comp ((<- x (lists:seq 0 127)) (<- y (lists:seq 0 127 5)))
(um:bank-select x y 0) (timer:sleep 250)) I suspect what I'll end up doing is generating a list of BPM/bank select tuples ... |
That's basically an LFO ramp: raw input (once the bank select calls are received by VCV Rack) is from 0 to 10V. VCV Rack crashes if I don't put a sleep between calls, but I was able to bring it down to a 100 millisecond wait instead of 250. With the 5-step jumps in |
Not quite there, but close: lfe> (set msbs-lsbs (list-comp ((<- msb (lists:seq 0 127)) (<- lsb (lists:seq 0 127 5))) (list msb lsb)))
lfe> (set select-voltages (list-comp ((<- y (lists:seq 30 300))) (* 3.010299956639812 (math:log2 (/ y 30)))))
lfe> (set ordered (lists:foldl (lambda (x acc)
(lists:append acc `(#(,(+ 0.003 (element 1 (lists:last acc))) ,x))))
'(#(0 (0 0)))
msbs-lsbs))
lfe> (set indexed (maps:from_list ordered))
lfe> (set keys (maps:keys indexed))
lfe> (defun closest (x) (lutil-math:get-closest (lists:nth x select-voltages) keys))
lfe> (set select-msbs-lsbs (list-comp ((<- i (lists:seq 1 (length select-voltages))))
(mref indexed (closest i))))
lfe> (list-comp ((<- msb-lsb select-msbs-lsbs)) (um:bank-select msb-lsb 0) (timer:sleep 500))
(defun bpm (bpm)
(um:bank-select (lists:nth (- bpm 29) select-msbs-lsbs) 0)) |
Tasks:
Part of #42
The text was updated successfully, but these errors were encountered: