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.

One Finger Orchestra Mozaic Script

McDMcD
edited November 2019 in Creations

I'm working on a Mozaic Script building on the work @_Ki and I did with the "One Finger
Orchestra" concepts.

By default it outputs Arpeggio's on Channel 1 and Voiced Chords on Channel 2. There are knobs for a lot of tweaking.

I made a quick demo in AUM using:

Ravenscroft 275 for Arpeggios
Noise Strings for chords
AudioKit D1 Digital Synth chords

FX from:
Visual Mixer
Eventide Black Hole
TB Reverb

https://patchstorage.com/mcorchestrator/

Just use "One Finger" at a time to play it (single notes are best). It can generate a lot of notes quickly. The Arps are "Sample and Hold" and the Chords will follow the Note Off's of the input.
Chords also have a Delay option (strum to note per second or so) so they can complete with the Arp output in good and really bad ways.

I'm going to load the script to PatchStorage in this beta form (without everything labeled) and
without the MIDI Panic when you change a Chord Map and some notes don't get Note Offs.

You don't have to write code to enjoy these scripts and request enhancements.

«1345

Comments

  • Fantastic! Working well here so far...

  • This is my kinda thing

  • McDMcD
    edited November 2019

    I have made 2 revision uploads so far... adding labeling for the Knobs after studying
    @wim's wonderfully detailed The-Chordulator.

    I think I want to add a a knob to implement configurable probabilities of dropping of some arp'ed notes and maybe some of he chord tones. It will help for ambient sound designs.

    I should run the script output through some of the Mozaic Randomizers.

    YES. There's a great Mozaic Randomizer script to drive out the pulsing.

  • McDMcD
    edited November 2019

    @lukesleepwalker said:
    Fantastic! Working well here so far...

    It just hangs some notes when you change "Chord Maps" and it can kill Ravenscroft at higher
    BPM"s with a lot of notes per Metronome. But it's easy to make something with, I think.

    @reasOne said:
    This is my kinda thing

    Good. I'm often afraid what's good for me has a small audience. I haven't even tried to run it from the usual generators. How are you driving it? I've been using the AUM keyboard so I can have the scripts knobs handy.

    @BlueMangoo's new Visual Mixer is also great to move the sound sources into the mix and around the landscape. Very cool tool and and UI.

  • Looks great ! but for me it hangs notes on arp channel immediately. even on default settings if i do absolutely nothing

  • Hey @McD - bravo on this.
    Had a play with it and liked it. Needed a MIDI Monitor to understand it correctly but could get it under control.
    Had some ideas to modify it. Maybe i will do that later on. Great work and lots of knowledge inside.
    Thanks for sharing

  • I like this @McD but prefer it when the transport is stopped and can control the rhythms by my tapping on the keys.

    You didn’t put a licence on the code. What are your thoughts on people forking this and posting up their own versions?

  • @McD Nice start 👍🏻

    As you probably know for yourself, the two main issues are hanging notes and the UI.

    How i would tackle these ? For the UI, i normally start developing it first in a second script realizing a mockup. There is no midi functionality in that mockup, just everything with the UI.
    For all knobs and pads i use constants. These should be written in fully caps to visually distinguish them from normal variables, all starting with KNOB_xxx and pad constants with PAD_xxx. These constans are set first in the @OnLoad, i also set a SetShortName and description.

    I setup all knobs, pads, XY, and title labels using the constants. This allows me to freely rearrange the knobs only by changing the constants.

    If there are several visible GUI pages, i define MODE_xxx constants for each and script an @EnterModeXXX function that sets up the labels, all knobs/pads used in that mode and a viewMode variable containing the current mode.

    And then i define and script how to switch between these modes. Sometimes i use the shift button, sometimes knobs, sometimes shift+pad -it depends on how i imagined a perfect usage for that script and on how many pages there are.

    Such a visual mockup is played with, imagining the possible uses cases and everything is rearranged using the constants. I play around until i am happy with the GUI usage.

    Next thing is to then implement the @OnKnobChanges and the label changes coming with that. The @OnKnobChange may also depend on viewMode. To implement the knobs and pads, most of the script state variables are needed and i define and set them up in the @OnLoad.
    Adding the @OnKnobChange, @OnPadDown, @OnPadUp, @OnShiftDown ... functions makes this mockup fully usable and helps in testing out the layout and page switches.

    The 'add knobs/pad labels' phase may also be started earlier, when still working on the general GUI layout.

    There is still no midi functionality implemented. I'll normally start this, when the GUI is ready. Developing a good GUI takes most of the time and lots of play-testing. Thats why one shouldn't do it before working out the midi stuff.
    Working the other way around is cumbersome, because one is happy that the functionality is there and oneself doesn't care that much about the looks and how it feels to play the script. It's clear to oneself what the knob do and so oneself doesn't need labels etc - but to be easy to use for others, the GUI is main thing they interact with.

    Sometimes (when i get bored by just doing a mockup) i already start building the midi functionality - just using the same variables for the internal states as in the mockup. This allows to later-on just copy the midi code into the mockup and voila - you get a cool looking, nicely usable GUI for the midi code 😀

    .

    < just brainstorming >

    Since writing this down takes so much time , why don't i just start a 'How to script with Mozaic' video series, where i screencast myself programming and thinking out loud. Just cut / speedup to the relevant information and changes. Probably takes the same amount of time just doing it while explaining WHY i do it that way.
    I knows there are such YT channels for Blender 3D modeling, Unity scripting and coding, and lots of other other scripting topics. Like these 'how to videos' for Photoshop, Premiere etc but coding related. But mostly these are big software packages with 10000 of users .
    So i don't know how many people would be interested to watch me talk about Mozaic scripting - and how much time these kind of videos take to produce.

    One thing ruling against this screencast idea is that i sometimes script while commuting in the subway or bus. It would limit scripting to times, when everything is quiet and i can talk freely on the mic.

  • @McD said:
    You didn’t put a licence on the code. What are your thoughts on people forking this and posting up their own versions?

    Which one is the least restrictive license. I have no issues with forking and don't expect credit. I thought MIT was the least restrictive but I needed to research it. I'd love to see a
    well crafted implementation of the basic architecture:

    Note in are used as an index 0-11 to a chord map.
    The integers in the chord map point to an offset in the chord-arp array.
    Chords are encoded a series of numbers that are offsets to the "base" input note

    Example: Play a C4 and the chord map could show [0,4,7] for a 3 note C4-E4-G4 voicing.
    For something like a Bill Evans chord you might use:

    [-12, -1, 2, 4, 9] C3-B-D-E-A (Cmaj713).

    Arps can be more scale like sequences [0,2,4,5,2,4,5,7,4,5,7,9,5,7, 9,11]
    As such they probably belong in 2 different maps at some point.

    For me this is moving closer to what I would like from a generator because I can add
    chords and sequences easily and test drive for how it sounds.

  • @_ki said:
    @McD Nice start 👍🏻

    As you probably know for yourself, the two main issues are hanging notes and the UI.

    Yes. I considered not putting this out there until I had those under control. I was expecting
    just such a response and it almost made me hold back but this is my take on getting "beta" feedback. It's a bit of a puzzle but it makes some very cool sounds for my workflow.

  • @chalice said:
    Looks great ! but for me it hangs notes on arp channel immediately. even on default settings if i do absolutely nothing

    That's currently a feature. What are you targeting for MIDI playback on Channel 0 (or Channel 1 as some would think)? I've used Ravenscroft 275, Mood, Pure Platinum Synth,
    Noise Instruments, and AudioLayer in my tests. It breaks Ravenscroft the most.

    Slow the DAW's BPM way down before starting the transport. It does play chords in response to MIDI in on Channel 1 (Channel 2 as you may prefer) without any clocking.
    Do those chords hang notes?

  • New version just uploaded on Patchstorage 10 mins ago that fixes hung notes.

    https://patchstorage.com/mcorchestrator/

  • @Poppadocrock said:
    New version just uploaded on Patchstorage 10 mins ago that fixes hung notes.

    https://patchstorage.com/mcorchestrator/

    True. Now break something else please so @Alfred can tell me how to fix it fast
    with one line of code in the right spot.

    @Alfred has a great set of MIDI Utilities built to add more control to EWI MIDI Wind Controllers. Don't you want one of those for your controller? But in many cases his utilities are great for any controller type like a sustain pedal that applies to any synth target. If you
    play piano that just got your attention you Mozaic hold outs. You're missing out on all the free stuff. You don't have to write scripts to use them... Duh.

  • And another test drive after fixing the hanging notes problem.

  • How do you set this one up in AUM? I had a go, but got stuck on the different channel bit.

  • @MonzoPro said:
    How do you set this one up in AUM? I had a go, but got stuck on the different channel bit.

    By default it's going to output the arp'ed notes on channel 0 that only output when the DAW's transport is active (using the OnMetroPulse triggers).

    The chords output from the OnMIDIInput events and always occur even when the DAW is not running (of course AUM only records when the transport is active).

    I programmed knobs 6 (Chords) and 7 (Arp) to allow you to change these channels at anytime.

    So, you change zero out knob 6 and all notes will be on channel 0. I suspect most users will
    want the arp but if you drive it from another MIDI Generator then Channel 1 will have some good stuff. If you like to "Play" your music from a keyboard the Chords are great. It's really one finger playing to get something pretty complicated and you don't need to play a lot of runs. Just change the patterns every few beats or bars. Then tweak the knobs... the transpose knob makes some very logical patterns and you can swing the knob around fast or slow for surprises

  • @McD said:

    @MonzoPro said:
    How do you set this one up in AUM? I had a go, but got stuck on the different channel bit.

    By default it's going to output the arp'ed notes on channel 0 that only output when the DAW's transport is active (using the OnMetroPulse triggers).

    The chords output from the OnMIDIInput events and always occur even when the DAW is not running (of course AUM only records when the transport is active).

    I programmed knobs 6 (Chords) and 7 (Arp) to allow you to change these channels at anytime.

    So, you change zero out knob 6 and all notes will be on channel 0. I suspect most users will
    want the arp but if you drive it from another MIDI Generator then Channel 1 will have some good stuff. If you like to "Play" your music from a keyboard the Chords are great. It's really one finger playing to get something pretty complicated and you don't need to play a lot of runs. Just change the patterns every few beats or bars. Then tweak the knobs... the transpose knob makes some very logical patterns and you can swing the knob around fast or slow for surprises

    Thanks for the reply. I tried assigning channel knobs to correspond to channels selected in AUM, but it didn’t seem to work. Maybe I was doing it wrong, I’ll have another go.

  • @MonzoPro said:
    Thanks for the reply. I tried assigning channel knobs to correspond to channels selected in AUM, but it didn’t seem to work. Maybe I was doing it wrong, I’ll have another go.

    An AUM instrument is configured to listen to all MIDI Channels by default. So, the fastest
    approach here is to turn off channel 0 to not get Arp's and turn off 1 to not get chords.
    Or hit the NONE channel button and touch the channel number you desire for each instrument.

  • edited November 2019

    @McD Any chance of a video explaining how to set it up? I understood nothing

  • @Prog1967 said:
    @McD Any chance of a video explaining how to set it up? I understood nothing.

    Probably not. It's version 0.9. I want to keep working on making it easier to use and
    sound better. I gotten a lot of great advice on how to improve it from the Mozaic Masters.

    For now. You should hear Arps a synth if you do these steps:

    Load 1 Mozaic MIDI Effect
    Load McOrchestrator inside Mozaic
    Route Mozaic as the MIDI IN on a synth
    Hit "Go" on the DAW transport

    After that tweak knob #1 and it will cycle through more Layouts in Mozaic.
    Play around with the knobs and the arp will change speed, note patterns, notes per
    metronome, number of notes in each pattern, transposition of pitches.

  • edited November 2019

    Thank you @McD for your effort, much appreciated!

  • @McD said:

    @Prog1967 said:
    @McD Any chance of a video explaining how to set it up? I understood nothing.

    Probably not. It's version 0.9. I want to keep working on making it easier to use and
    sound better. I gotten a lot of great advice on how to improve it from the Mozaic Masters.

    For now. You should hear Arps a synth if you do these steps:

    Load 1 Mozaic MIDI Effect
    Load McOrchestrator inside Mozaic
    Route Mozaic as the MIDI IN on a synth
    Hit "Go" on the DAW transport

    After that tweak knob #1 and it will cycle through more Layouts in Mozaic.
    Play around with the knobs and the arp will change speed, note patterns, notes per
    metronome, number of notes in each pattern, transposition of pitches.

    It worked like a charm. Thank you

  • McOrchestrator v0.91

    More work on the knobs and labeling.
    Arp = 0 turns it off completely

    I tried it out with some Future Drummer. The bass line is the arp and I tweaked the notes per pulse near the end.

  • _ki_ki
    edited November 2019

    Nice update, you are on the right way :)

    .

    Some more programming tips:

    In the @OnKnobChange you could change from using

      if LastKnob = 7
        ....
      endif
    
      if LastKnob = 8
        ...
      endif
    
      if LastKnob = 9
        ...
      endif
    

    to chained if x ... elseif y ... endif because that's not only one line shorter but also faster to evaluate.

      if LastKnob = 7
        ....
    
      elseif LastKnob = 8
        ...
    
      elseif LastKnob = 9
        ...
      endif
    

    I personally tend to add a blank line before the next elseif to clarify the relationship.

    Why is that construct faster ? Imagine that LastKnob is seven. With the upper code, all the other if conditions get tested, with the lower code example there are no more tests when one of them succeeded.

    Don't every put a space in between the else and if as in else if. The Mozaic language only allows for single statements per line, so Mozaic only reads the else and skips the whole rest of the line (including condition testing) - and there is no syntax error-message showing that error, which will possibly result in the wrong code part being executed without notice.

    .

    Another thing - you map the knobs to values by doing the needed math yourself. Mozaic offers a simple function to map between value ranges. TranslateScale maps the first parameters value from a range specified with param 2+3 to a new range specified by param 4+5.

       if LastKnob = 7
          val = GetKnobValue 7
          ArpChannel = Round (TranslateScale val, 0,127, 0,15)
          Log{ArpChannel: }, ArpChannel
       endif   
    

    You will need val in all the knob related ìf statements, thats why i suggest moving it to the top of the @OnKnobChange as val = GetKnobValue LastKnob which is correct for all knobs.

    .

    And lastly, don't forget to update the version number in the @Description and maybe also add a title label including the version number LabelKnobs {McOrchestrator v0.91} this then clearly shows the end-user which version they just loaded.

    You could also add the version number to title of the patchstorage page, just change the plugins name. When updating an exisiting page, this will only change the title and not the url. All fields on the edit page can be updated independently, so one doesn't need to upload a new version when fixing a typo in the description.

    .

    BTW: I know i tend to talk too much and my comments could be perceived as beeing pedantic. In the old days, i teached computer science at the university and giving out these hints allowed the students to progress faster in learning and understanding programming concepts.
    A small hint is enough if you are annoyed by these kind of tips - i don't take it personally.

  • @_ki said:
    Nice update, you are on the right way :)

    You won me over with "nice update". I was telling @LinearLineman "Always start with something nice.. even better, 5 nice comments. Then tell them something you want
    them to change." Not sure he thinks it's a great idea. Why waste their time blowing smoke?
    Help them out.

    A small hint is enough if you are annoyed by these kind of tips - i don't take it personally.

    I appreciate the fact that you checked out the code and offered changes that would make it
    function better. I'll keep iterating on versions to clean it up and add comments for anyone that wants to fork the code and add their own ideas.

  • Like how this is progressing @McD

    I only had a quick play this morning before work but got a nice little piano piece going with StepBud in chord mode and BeatHawk Grand Piano. Threw in some random probabilities using Caility and modulated some velocities and echo sends with Rozeta LFO and had a fairly listenable little number going.

    The Arp and Chord channel had me foxed until I looked in the code and saw that you were dividing them be 10. WOuld be nice to have their divided value update in the label so that the user can see what channel they are really selecting.

    Otherwise, great stuff!

  • @Jocphone said:
    Like how this is progressing @McD

    I only had a quick play this morning before work but got a nice little piano piece going with StepBud in chord mode and BeatHawk Grand Piano. Threw in some random probabilities using Caility and modulated some velocities and echo sends with Rozeta LFO and had a fairly listenable little number going.

    The Arp and Chord channel had me foxed until I looked in the code and saw that you were dividing them be 10. WOuld be nice to have their divided value update in the label so that the user can see what channel they are really selecting.

    Otherwise, great stuff!

    Thanks for the feedback. I did fix those Labels and added some more knobs:

    Length of the Arp
    Arp Volume
    Chord Volume

  • @Jocphone said:
    Like how this is progressing @McD

    I only had a quick play this morning before work but got a nice little piano piece going with StepBud in chord mode and BeatHawk Grand Piano. Threw in some random probabilities using Caility and modulated some velocities and echo sends with Rozeta LFO and had a fairly listenable little number going.

    The Arp and Chord channel had me foxed until I looked in the code and saw that you were dividing them be 10. WOuld be nice to have their divided value update in the label so that the user can see what channel they are really selecting.

    Otherwise, great stuff!

    What channel settings are you using in Mozaic, and inAUM?

  • @MonzoPro said:

    @Jocphone said:
    Like how this is progressing @McD

    I only had a quick play this morning before work but got a nice little piano piece going with StepBud in chord mode and BeatHawk Grand Piano. Threw in some random probabilities using Caility and modulated some velocities and echo sends with Rozeta LFO and had a fairly listenable little number going.

    The Arp and Chord channel had me foxed until I looked in the code and saw that you were dividing them be 10. WOuld be nice to have their divided value update in the label so that the user can see what channel they are really selecting.

    Otherwise, great stuff!

    What channel settings are you using in Mozaic, and inAUM?

    I am not near my iPad today but essentially I have some MIDI notes feeding into Mozaic from StepBud. MIDI Channel doesn't matter for that connection.

    Then, from Mozaic running the latest McD Orchestrator 0.9?, connect two audio channels in AUM. Each audio channel gets a synth and in its connection popup set the first to channel 1 only and the second to channel 2 only. This should get you going with the defaults for Orchestrator. If you want to tweak the ARP Channel and MIDI Channel just mute the audio channel in AUM that you don't want to hear (Arp or Chords) until the other synth is getting triggered. I don't remember what number I have set them to but @McD says he has fixed the labelling so maybe there is a new version of Orchestrator which shows the correct MIDI channel when you change the knobs in Mozaic now?

  • Does this script correctly save state? I had a nice thing going last night (saved in AUM) and came back this morning and it's totally different.

Sign In or Register to comment.