Audiobus: Use your music apps together.

What is Audiobus?Audiobus is an award-winning music app for iPhone and iPad which lets you use your other music apps together. Chain effects on your favourite synth, run the output of apps or Audio Units into an app like GarageBand or Loopy, or select a different audio interface output for each app. Route MIDI between apps — drive a synth from a MIDI sequencer, or add an arpeggiator to your MIDI keyboard — or sync with your external MIDI gear. And control your entire setup from a MIDI controller.

Download on the App Store

Audiobus is the app that makes the rest of your setup better.

My Group The Loop Wizard Mozaic script - A new way of performing live!

Hey guys :smiley:

After weeks of digging around in this forum (and other resources) for information about how to control Group The Loop using my iRig BlueBoard, I finally came up with a pretty nice script. First of all: thank you so much guys for all your help, @_ki, @wim, @espiegel123, @Janosax, @xor, and everyone else who tried to help. I wouldn't have made it so far without you, that's sure. :heart:

My "Group The Loop Wizard" script definitely establishes a kind of a new paradigm on how to do live performances that are highly time sensitive (at least in the context of iOS, as far as I know). The idea: simply do all the needed configurations (group number, loop number, instrument FX, etc.) in advance, then add each configuration to a virtual stack. Then start to perform and activate each configuration simply by the click of a single button, one after the other (from the stack). This allows to do the brain work in advance, so afterwards you can concentrate fully on the performance.

I simply love this idea, and my script is quite powerful already. I'd love to hear your thoughts about it. To make it easier for you guys to get the idea, I created 3 videos demonstrating the script. :smile:

General introduction: what's the idea behind the "Wizard" script, and what features are planned?

"Dry" demo of the script in action (just explaining what happens, no real performance yet)

Real demo of a pop song (Rivers of Babylon) - very fun!!

I'm sorry that the videos are lengthy. The first one might be the one you can skip, if you're short in time; the other two videos will give a good overall impression.

I'm very much looking forward to reading your comments.

Here's my brainstorming document: https://docs.google.com/document/d/1OtPnCPZqHNCdndD-STC5bEZw_CEiafH1zztmPeyL9ZA/edit?usp=sharing
And here's the script: https://github.com/jmuheim/mozaic-blueboard/blob/master/wizard

Lots of love
Joshua :blush:

Comments

  • Brilliant. B)
    That's a really unique approach I would never have thought of. I don't think I think far enough ahead to set everything up ahead of time like that, but could definitely make use of this kind of approach in more discrete chunks.

    Food for thought: You have 16 pads at your disposal, and it's not too hard to save and recall sets of variables by, say, long-pressing a pad. You could consider saving "sets" to pads, then recalling them as needed. This gives 16 sets per saved preset. I've done this in some of my scripts (example: hypnopad).

  • That's great, I also use GTL and have a different methodology for how to make things happen live, but I haven't actually used it live yet... I don't have Mosaic and couldn't code my way out of a paper bag so this looks quite impressive.

    So is each stack 1 song? And with one button you advance through the steps you need to perform that song? Does that mean each song is a pre-saved stack in Mosaic, so loading up a new preset there is all you need to do between songs?

  • _ki_ki
    edited August 2020

    Hi @josh83, i just watched through all three videos. Very well done and it showed what your goal is.

    When using the Log output to do drive the communication to the user, you carefully have to read what‘s on your phone and then tap the blueboard.
    I would suggest to use the 16 or 4 pad layout and use the top center title label (and maybe pad labels) to ‚ask the questions‘. And to make live even easier, all the steps could use a different pad colorization (applied to all the pads) - so that you not even have to read the title question, but know from the color at which step you are. There are 8 pad colors, and in your setup video you were asked 7 questions, so it could work without having to add color patterns using two of the colors.

    Maybe using the 16 pad layout is the best. There could be one pad for each of the questions (loop, group, clock etc) , its label shows the current setting - so one Label plus value per pad like „Loop 1“, „Group 1“. And in addition to the colorization of all the other pads, the pad for the current question could be highlighted in white so that your a visual hint which value will change after you tapped your answer on the blueboard.
    Tapping on one of the 7 question pads (in the Mozaic plugin i mean) could ‚redo‘ a specific question, another pad could (re-) start the question-round. And to build upon the idea of @wim, other pads could be used to maybe save the whole settings to one of several internal ‚song presets‘ that also can be recalled.

    Or use the upper 8 pads for the question related things and the bottom 8 pads as direct setup stores. Tapping them recalls a preset and SHIFT tap them to store the current setting to a pad. In that case i would only apply the colorization to the upper pad row.

    .

    My workflow for such usage-related stuff is to script a separate mockup GUI, it only sets up all pads, labels, knob positions etc and reacts to knob and pad presses, changing the colors and labels. But no logic to do the midi things or any other computing - simply focused on how to interacts with the idea the main script wants to achieve.

    Doing so allows to try out how it ‚feels‘ to work with the script and one can detect flaws or nitpicks in the way users interact with it, and tweak the interactions without worrying to break the main script.

  • Thanks for your suggestions, guys.

    One relevant fact in my performance is that I do not have AUM/Mozaic displayed on my iPhone. Instead, I always show Group The Loop. So I will only be able to interact with the controls of Mozaic when setting up a song, not when performing it.

    I don't think I think far enough ahead to set everything up ahead of time like that, but could definitely make use of this kind of approach in more discrete chunks.

    @wim: Yeah, setting up whole song structures in advance might not be the default use case. And it limits creativity. Too much setup in the beginning kind of takes the magic (and art) away from looping. On the other side: the script still needs to be known pretty well, it's highly flexible and can prepare everything as needed in a "sort of manual way", so I would not call it "cheating" (creating pre-defined presets would rather be sort of cheating, I guess). :wink: And after some time, I will know the song structures of my most played songs very well and be able to set up all of them by heart.

    You have 16 pads at your disposal, and it's not too hard to save and recall sets of variables by, say, long-pressing a pad. You could consider saving "sets" to pads, then recalling them as needed.

    That's a very good idea. For setting up a song structure in advance (while I'm not yet "restricted" to the Groop The Loop GUI), this would be very fast.

    That's great, I also use GTL and have a different methodology for how to make things happen live

    @SimonSomeone: Can you explain a little bit further? Maybe we can join forces. :smiley:

    So is each stack 1 song?

    Yeah, kind of. I think usually I fill the stack only with as much as I need to get going: in the beginning of a song there is very few time between singing and playing and recording loops. But as soon as the basic loops and groups are available, I will have more time to do on-the-fly manual configuration (e.g. switching between groups, muting/unmuting loops, changing filter values, etc.).

    And with one button you advance through the steps you need to perform that song?

    Exactly. I had the idea to let the script advance on its own, but this is too much stress, as sometimes I need to re-record a loop (because the first take was not good). So I will always arm the next configuration manually. For that I simply reserved the "D" button, and with short/long presses, the A, B, and C buttons still offer enough options, as you can see here:

    Does that mean each song is a pre-saved stack in Mosaic, so loading up a new preset there is all you need to do between songs?

    While this is not yet implemented, it would be pretty easy to create presets. I think the easiest way would be to add another AUv3 Mozaic instance which sends MIDI to the main instance (running the Wizard script), simply emulating some user input. So these presets could even be loaded through the standard AUM presets interface. As described before, I feel that this might take away some of the "magic" of live looping, but it would definitely be an option (especially for practising performances).

    When using the Log output to do drive the communication to the user, you carefully have to read what‘s on your phone and then tap the blueboard.

    @_ki: I'm only using the Log for development/debugging purposes.

    I would suggest to use the 16 or 4 pad layout and use the top center title label (and maybe pad labels) to ‚ask the questions‘. And to make live even easier, all the steps could use a different pad colorization (applied to all the pads)...

    As I described above, I will have Group The Loop running as foremost application while performing, so giving feedback through Mozaic's layout is not of much use for me. But I have created a way of giving auditive feedback to the user by simply creating a custom preset in a sampler which reacts to the MIDI notes sent from Mozaic to Group The Loop, and plays some audio. For example, to select Group 1, MIDI note 123 is sent to GTL. Through routing in AUM, this note is also received by the sampler, and plays the audio placed at note 123, which would be "Group 1 active" (or something like that). I will either deactivate this for live situations, or pan it to only one side (which I will listen to using headphones), and only send the other side to the PA system. I'm not yet sure whether this would provide enough "juice" to the PA system, but we will see.

    Thanks a lot for your reactions, guys. Very helpful and inspiring. The next step will be to create the switching of signals sent to GTL (guitar/keyboard/microphone only, or combinations of those) and the respective instrument FX. This will be rather tricky because it needs to be highly time sensitive and precisely executed at the end of the "previous" loop and right before the start of the "next" loop. We will see how I will manage this, I got some good advice already from you guys regarding this topic.

  • Hi @josh83

    as the blueboard script to send out different notes on short/medium and log blueboard button taps seems quite stable now, could you upload it to patchstorage ?

    On the ‚upload a patch’ page, you can use the ‚source code url‘ to add a button to the scrits page, that links to the github. Maybe also refer this url in the ‚description‘ for the scripts documentation.

    The ‚logger‘, ‚modifier‘ and ‚spacer‘ files of the github seem to be older version, or parts of older versions - the current source code seems to be in the file wizard. If thats the case, then maybe better remove these outdated-files as they then only confuse.

    .

    My question is based on a request for a blueboard script on the PatchStorage Dischord channel.

    So I had to search for your script and this thread since it already disappeared in the depths of the forum :)

  • Dear @_ki

    I'm flattered to be asked for this. I'm currently re-writing my whole script. I will see how I can make the stuff available on patchstorage.

    Cheers :smile:

  • I tried uploading the script. The form submits, but nothing happens... :frowning:

  • _ki_ki
    edited September 2020

    @josh83 Yes, sometimes there‘s a bug on upload. I tend to open up a second patchstorage tab with the Mozaic scripts overview and since the first upload on the ‚add a patch’ page usally works as the new script shows up in the overview, i simply close the upload tab.

    Your script was posted three times now, btw. Open two of them and press the red delete button right of the edit button to get rid of the duplicates. I would suggest to keep the one that already has a download :)

    And you should mention that the blue source code button in the description links to the source and documentation on github, since only very few Mozaic scripts make use of extra documentation.

  • Ah I see. I deleted the redundant posts. Thanks, @_ki! I'm happy that my scripts are available to and helpful for likeminded people.

  • Thanks for setting up a patchstorage page. I just checked that you uploaded an ascii version of the script, better upload a binary version as people can directly share that to Moazic. I suspect 9t% of the Mozaic entries are binary.

    .

    To create such a file, open Mozaic, load your script and first press upload again on the ‚code‘ editor to initialize all variables to their default. Now press the ‚export‘ icon right to the ‚save‘ button. Choose a name like iRig Blueboard Spacer and store the file maybe in ‚Downloads‘ on my iPad or AudioShare (where you can find it again).
    On the PatchStorage page, goto ‚edit‘ of your script, and just update the script with the binary .mozaic file.

    I probably need to add a chapter about all these patchstorage-upload-hazzles to the wiki, to have something as guideline for the future :)

  • Hi Josh, had a look at your script and I think you can fix the problem you have with your illuminate routine by adding a slight delay between the four notes you send.

    @IlluminateAllButtons
    // It would have been nice to be able to illuminate specific buttons depending on the interaction with the BB.
    // But this seems to be buggy, see https://forum.audiob.us/discussion/comment/832104/#Comment_832104.
    // So we just keep all of them illuminated (for visibility purposes when using the BB in the dark).

    for i = 0 to 3
    SendMidiNoteOn bbChannel, bbNotes[i], 100, i*2
    endfor
    @End

  • @Alfred said:
    for i = 0 to 3
    SendMidiNoteOn bbChannel, bbNotes[i], 100, i*2
    endfor
    @End

    Thanks for bringing up the point. Meanwhile, I encounter the mentioned "bug" (or whatever it is) less often. Maybe because my programming skills are getting better...? I have the feeling that the BlueBoard gets confused when it's receiving an "un-balanced" amount of on/off signals. I've not really checked it out yet, but maybe when sending 2x on, it would need 2x off again...?

    Anyway, I will take a look at your solution.

  • Double note ons can cause problems for synths, causing hanging notes, yes.
    But in this case i think the blueboard has problems with recieving four messages within the same millisecond.
    If you remember wich light was on you only have to send one note off and one note on.
    Even then I would seperate the two messages with a 2 millisecond delay.

  • Hey guys

    I finally made it! What I envisioned 2 years ago when stumbling over Group the Loop came true now - after hundreds of hours of work! :smiley:

    Take a look at my performance of Pink Floyd's epic track "Wish you were here":

    If anyone is interested in the nitty gritty details of how I accomplished this (in quite a complex setup of various apps, glued together using an also quite complex bunch of Mozaic scripts), please tell me. I'm happy to produce some more videos with explanations. :blush:

    Have a great end of the year time, guys! And thanks so much for your support so far. I have the feeling that is is only just the beginning... :wink:

  • I've come even further meanwhile.

    I created kind of a "meta script language" which makes it very easy to write song structures. It's using Markdown and Emojis. It looks something like this (original file):

    # Pink Floyd - Wish you were here
    
    Place some more description here if you like...
    
    | Setting | Value |
    | --- | --- |
    | BPM | 121 |
    | 🎸 1 | Wish you were here |
    | 🎸 3 | Oasis |
    | 🎹 1 | Piano |
    | 🎹 2 | Marimba |
    
    ## Intro
    
    - 1st guitar (epic riff)
        - 🎤 ❌
        - 🎸 3 ✔️
        - ⏲️ 10
        - ⏺️ 1
    - 2nd guitar
        - ⏺️ 1
        - 🎸 1
    
    ## Verse 1
    
    - So, so you think you can tell
        - ⏲️ 8
        - ⏺️ 2
        - 🎸 1
    

    Compiled (e.g. in GitHub) it looks very beautiful: https://github.com/jmuheim/mozaic-blueboard/blob/master/songs/wish-you-were-here.md

    Using a little Ruby script, the code above is compiled into the following Mozaic code (original file):

    ...etc...
    
    @ProceedWithSong
      // Intro
      if step = 1 // 1st guitar (epic riff)
        Call @ToggleSendMicrophone // 🎤 ❌
        Call @PrepareGuitarPreset3 // 🎸 3
        Call @ToggleSendGuitar // 🎸 ✔️
    
        Call @IncreaseClockLength // ⏲️ 9
        Call @IncreaseClockLength // ⏲️ 10
        Call @RecordNextLoopInGroup1 // ⏺️ 1
      elseif step = 2 // 2nd guitar
        Call @RecordNextLoopInGroup1 // ⏺️ 1
        Call @PrepareGuitarPreset1 // 🎸 1
      elseif step = 3
        Call @ToggleSendGuitar // 🎸 ✔️
    
      // Verse 1
      elseif step = 4 // So, so you think you can tell
        Call @DecreaseClockLength // ⏲️ 9
        Call @DecreaseClockLength // ⏲️ 8
    
        Call @RecordNextLoopInGroup2 // ⏺️ 2
        Call @PrepareGuitarPreset1 // 🎸 1
      elseif step = 5
        Call @ToggleSendGuitar // 🎸 ✔️
      elseif step = 6 // Did they get you to trade
        Call @PrepareGuitarPreset3 // 🎸 3
        Call @RecordNextLoopInGroup2 // ⏺️ 2
      elseif step = 7
        Call @ToggleSendGuitar // 🎸 ✔️
    @End
    
    ...etc...
    

    This code can then be run with my GTL-Performer script, as seen in my YouTube video:

    I think this is a huge achievement and proves that creating song structures is something pretty simple. Having something like this available in GTL would be awesome!

    What do you guys think? If anybody is interested in joining the project (or just trying it out themselves), see https://github.com/jmuheim/mozaic-blueboard. It's pretty well documented already. If you're having problems with something, please tell me.

  • Nice idea to preprocess your simple meta language using Ruby into Mozaic script code. I assume that the events doing the real work are added as an inline include at the end of the script.

    Cool that you got it working 👍🏼

    Are you using Ruby on IOS (phone i assume from the videos?) for an ‚all-on-IOS‘ approach ?

    .

    I tried around with Mozaic code generators / preprocessors in Pythonista where i implemented an IOS app-extension. So i could share my meta input from a IOS text-editor to the app extension using the standard share sheet, getting processed into a Mozaic text file uploaded into the IOS clipboard, which i then can paste into Mozaic... So still several clicks needed from meta language to running midi script code.
    But i suspected that idea was to esoteric and special to be presented here :)

Sign In or Register to comment.