Loopy Pro: Create music, your way.

What is Loopy Pro?Loopy Pro is a powerful, flexible, and intuitive live looper, sampler, clip launcher and DAW for iPhone and iPad. At its core, it allows you to record and layer sounds in real-time to create complex musical arrangements. But it doesn’t stop there—Loopy Pro offers advanced tools to customize your workflow, build dynamic performance setups, and create a seamless connection between instruments, effects, and external gear.

Use it for live looping, sequencing, arranging, mixing, and much more. Whether you're a live performer, a producer, or just experimenting with sound, Loopy Pro helps you take control of your creative process.

Download on the App Store

Loopy Pro is your all-in-one musical toolkit. Try it for free today.

SOLVED: Developers: Ableton Link 2 to 3 migration?

edited June 2019 in Other

Sorry if this is too off-topic, but I decided to try anyway :)

The last thing that's holding back Xequence 2's release is Ableton Link 3 (with Start/Stop) integration, and I wanted to check if any other developer who went through this ordeal might be kind enough to share some basic **pointers ;)

  • Link 3 seems to be incompatible with Link 2, i.e. I get unresolved symbols (ABLLinkTimelineRef, etc.).
  • There seems to be no official migration guide from Ableton
  • The official API documentation (https://ableton.github.io/linkkit/api-reference/) is dead (404)
  • Ableton is completely unresponsive to email inquiries on all email addresses (including developer support) that I've tried (on last Sunday).

As I'm starting to get a bit frustrated with this, can anyone who went through this maybe share some very basic steps how to migrate, before I re-invent the wheel and manually browse through the header files or example code and try to get an idea?

You'll be of great service to the broader iOS music app good! ;)

Thanks

Comments

  • I believe @j_liljedahl had to deal with this for AUM. Hopefully, they don't make future updates to 3+ any more complicated for development.

  • Here's some basic changes:

    Info.plist:

    +       <key>ABLLinkStartStopSyncSupported</key>
    +       <true/>
    

    code diffs:

    -    _linkRef = ABLLinkNew(_tempo, 4);
    +    _linkRef = ABLLinkNew(_tempo); // quantum is now set elsewhere
    
    +    const ABLLinkSessionStateRef sessionState = ABLLinkCaptureAudioSessionState(clock->_linkRef);
    
    -        clock->_lastBeat = ABLLinkResetBeatTime(clock->_linkRef, clock->_currentBeat, clock->_hostTime);
    -        clock->_currentBeat = clock->_lastBeat;
    +        
    +        ABLLinkSetIsPlayingAndRequestBeatAtTime(sessionState, playing, clock->_hostTime, clock->_currentBeat, quantum);
    +        clock->_lastBeat = clock->_currentBeat = ABLLinkBeatAtTime(sessionState, clock->_hostTime, quantum);
    
    -        ABLLinkProposeTempo(clock->_linkRef, newTempo, clock->_hostTime);
    +        ABLLinkSetTempo(sessionState, newTempo, clock->_hostTime);
    
    -    clock->_beatTimeAtEndOfBuffer = MAX(clock->_lastBeat+0.0001,ABLLinkBeatTimeAtHostTime(clock->_linkRef, bufferEndTime));
    +    clock->_beatTimeAtEndOfBuffer = MAX(clock->_lastBeat+0.0001,ABLLinkBeatAtTime(sessionState, bufferEndTime, quantum));
    
    +    ABLLinkCommitAudioSessionState(clock->_linkRef, sessionState);
    

    start/stop support:

    +static void LinkSessionStartStopChanged(bool playing, void* context) {
    +    TransportClock* clock = (__bridge TransportClock *)context;
    +    
    +    if(clock.playing != playing) { // State change was initiated by another peer
    +        clock.playing = playing;
    +    }
    +}
    
    +    ABLLinkSetStartStopCallback(_linkRef, LinkSessionStartStopChanged, (__bridge void *)self);
    
  • @j_liljedahl that is absolutely lovely, thanks a ton. Incidentally, I've also heard back from Ableton just now (after 4 days...) and yeah, they also advised that ABLLinkTimelineRef is now called ABLLinkSessionStateRef.

    Maybe you should send that diff to them for a little $499 fee so they can include that as an official migration guide ;)

    (seriously, if a new version of an API breaks existing apps, that is really common sense to do...)

Sign In or Register to comment.