You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lang - introduce language support for Ableton Link
`use_bpm :link`
When using the :link BPM, Sonic Pi switches all timing algorithms for that specific thread to use the shared Ableton Link metronome. Ableton Link is GPL software that implements a metronome that is automatically shared and synchronised with other pieces of link-enabled software running on the same local network. This means that with `use_bpm :link` the BPM effectively becomes dynamic and can be modified from any piece of link-enabled software on the local network.
With use_bpm *all* timing functions for that thread now use Link as their ground truth with respect to time. However, whilst this does mean that the BPM becomes dynamic, functions such as `at`, `time_warp`, `density` and `use_bpm_mul` *should* continue to work as expected as we now also internally capture a notion of time density which works as a multiplier on the dynamic BPM value.
Note that this commit and other related ones introduce a lot of changes to the core timing functionality. However, by default when not using the `:link` option for the BPM, it is expected that functionality should be identical. Any differences should be considered a bug.
There are also likely to be quite a few kinks remaining - this has only been tested on Windows and I'm yet to do any co-located jamming with multiple link-powered audio apps so there's also a good chance that the schedule ahead functionality needs to be tweaked and possibly new latency compensation routines to be added to get everything in actual audio sync.
Also, the Link functionality has to be extended before a release can be contemplated (resetting, changing BPM, etc). There also needs to be some representation in the GUI (likely using the Ableton Live metrome widget as inspiration to improve knowledge transfer and familiarity).
Finally, the Link beat quantum needs to be explored and added to the API. Perhaps something like `use_bpm :link, quantum: 4`
0 commit comments