Ableton Link Node Features - Feedback Need
  • Below is the beginning of thinking about how to implement Ableton Link in Audulus. Do not consider any of these features as guaranteed - this is just my reaction to reading the documentation available on Link and extrapolating what a Link node *might* look like in Audulus.

    The node itself might be very complex, and it is possible we could build a simpler version of it either first or concurrently, but this would expose all of the features of Link to Audulus users to do with them what they wish - really wild things that you wouldn't be able to do with other apps that are simply just trying to stay in time.

    Your feedback here would be appreciated! If I've made any mistakes in my understanding of how Link works, pointing that out would also be very helpful. I read over the documentation a few times and I'm pretty sure I have a handle on how it works, but I might be wrong on some things.

    THANK YOU!



    Link features overview: http://ableton.github.io/linkkit/

    Ableton's guidelines on how Link must be integrated into the UI: http://ableton.github.io/linkkit/downloads/Ableton Link UI Guidelines.pdf

    UI Link Enabled/Disabled Implementation:

    Seems like the best place to put the Link slider would be under the Wrench icon/settings panel. By the way, is that gone now?

    The Link connected/not connected icon could appear at the top of a patch when Link is turned on in the settings.

    It could also appear at the bottom or top of the module/node browser.

    Link feature integration

    Overview of Link features: http://ableton.github.io/link/

    Audulus has an opportunity to do some interesting things with Link that I haven't seen in other apps. Here are ideas for how to implement them:

    Ableton Link Node:
    Inputs
    Tempo: 0-1 knob selects tempo between minimum and maximum values.

    Min: minimum tempo - if no value present, default to Live minimum of 20bpm

    Max: maximum tempo - if no value present, default to Live maximum value of 999bpm

    Beat Alignment: x==0 = off; x>0 = on

    Phase Alignment: x==0 = off; x>0 = on

    Phase Alignment Quantum: number of beats in a quantum. If Phase Alignment is not turned on, then ignore this value. If Phase Alignment is turned on, then minimum value will probably need to default to 1.

    PPQ: Pulse per quarter note. Attach a value to the input, get that many pulses per quarter note out. Attaching a number like 2/3 would yield quarter note triplets at the clock pulse output.

    Outputs
    Clock pulse: 50% duty cycle clock derived from master tempo.

    Phase Alignment Reset: 50% duty cycle clock that goes high at the beginning of each Phase Alignment quantum. Phase Alignment would be determined by the incoming beat, independent of the PPQ value.

    BPM: BPM value to display on a value node.

    Measure: Output the current measure defined by Live's timeline

    Beat: Output the current beat number defined by Live's timeline

    Time: Output current transport time defined by Live's timeline

    Description
    Link tempo changes work in a non-centralized way, meaning a computer running Ableton Live isn't the only place where you can change master tempo for all devices that are running Link. According to the overview, any device can affect a master tempo change, and other devices will automatically sync with it. It seems like this tempo change can be programmed to ramp up over time instead of snapping instantly too. This ramping effect might be something that can be accomplished with a user-built Audulus module rather than needing to be programmed into the node.

    Beat alignment ensures that the quarter note pulses arriving in Audulus are arriving in time with other players. Imagine starting two metronomes together that are both playing at 120bpm at different times. Unless the second metronome is started at precisely the same moment as one of the beats of the first metronome, they will remain at the same tempo, but won't be playing "in sync" as we would usually define that. Beat alignment ensures that the beats align with one another across devices.

    Phase alignment makes sure that phrases align with one another. Imagine you have a 4 bar loop playing in Audulus and an 8 bar loop playing in Ableton. A quantum value of 4 would ensure that the loop in Audulus is reset every 4 beats, making it repeat twice over the 8 bar loop. A quantum value of 8 would make the loop in Audulus play once at the beginning of the 8 bar loop, then nothing for 4 beats, then repeat. That's the basic concept, but it could work differently in Audulus since presumably the master output clock of the node would not stop for this period. Instead, we'd use the Phase Alignment Reset output to reset sequencers every quantum period.

    A vast array of complex tools could be created based on this node with other nodes already available in Audulus. Combining conditionals like "trigger only when BPM exceeds 120" or "advance sequencer on beat 1 in measure 1, beat 2 in measure 2, beat 3 in measure 3, etc." can be constructed and used not just with Audulus, but with other synth apps once we enable MIDI out. The possibilities are really awesome, and anyone with an interest in getting the most out of Link would see Audulus as a must-have app.

    Possible challenge would be conflicts between the knob state and another person changing the tempo. How does the connected knob (or static value) respond?

    Another challenge is that the above node described is admittedly very feature heavy and complex, especially for a beginner. An alternate "simple" node (similar to the mic/ADC node relationship) could be created that outputs just the master clock pulse.

    Min-Spec Node
    This is a stripped down version of what is outlined above. What would essentially be the most lightweight version of Link in Audulus that would make it useful.

    Inputs
    BPM: Tempo input as a number. Decimals after hundredths place are truncated. 20-999 is maximum range.

    NO INPUT Beat Alignment: (Always on)

    NO INPUT Phase Alignment: (Always on)

    Phase Alignment Quantum: Truncate incoming value to a whole number. Minimum value 1.

    Outputs
    Clock pulse: 50% duty cycle clock derived from master tempo.

    Phase Alignment Reset: 50% duty cycle clock that goes high at the beginning of each Phase Alignment quantum.

    BPM: BPM value to display on a value node (necessarily will change if another app or person changes the BPM value from the one present at the BPM input).
  • Sounds good, look forward to Link support in Audulus.
  • I think you would do better to avoid using knobs. I think these fundamental nodes are better with straight I/O. I think it allows more design flexibility. Hopefully we'll have a choice of knobs or sliders or maybe something we haven't even thought of yet. Uncoupling the UI from the functional nodes leads to cleaner design IMHO.