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.

[Logic Pro] How to use a MIDI Controller to control your plug-ins (+lots more) with MIDI Scripter.

edited June 2023 in Logic Pro

I’ve made a MIDI Scripter script (adapted from one of the example scripts) that can map any incoming MIDI to any other Cc, plug-in parameter, pitch bend or aftertouch.

It can learn the target parameter by twiddling the controller in the plugin panel. You can assign parameters from any plug-in in the track -- Instruments and effects. After selecting Learn Plug-in parameter, Just tap the plug-in widget under the scripter UI to switch to the plug-in you want and touch the parameter you want to learn.

You can scale the Min and Max values and swap them over to invert the controller.

The attached script auto assigns controllers 12-19 to the inputs (you can change this if you edit the code on the Mac -- No code editing possible on iPad). You can also change the number of input/target pairs by changing the line:

Line 24: var TOTAL_TARGETS = 8; Change that value to the number of pairs you want.

To use the Controller Mapper script, open the attached project, tap the scripter tile and then tap the "..." menu button and save the script as a preset for use in any track.

You can now load MIDI Scripter in any track and load the preset from the browser.

You can also save the Patch (Tap the track name in the tracks view to save it as a patch) to save the full channel strip with all the assignments for the instrument + Audio fx.

It's a useful script on Mac too. You can setup different assignments for each track which can be easier than messing with controller assignments. Plus it can just plain convert CCs.

NB: You can record the MIDI normally. Just press record and twiddle the controller. The data will be saved as its original value. For example, if you map CC12 to ES-2 Filter Cut-off and record your playing and tweaking, Logic will record CC12 data. The scripter needs to be on to convert the data during playback.

It's easy to edit the controller data in the piano roll.

Apart from obvious things like mapping the knob on you MIDI controller to a plug-in parameter, you can do things like convert Pitch Bend to Delay feedback. Convert Velocity to filter cut-off. Use your mod wheel to pitch bend.

You can also use it to make things like @brambos Rozeta LFO etc. work with Logic's built in plugins. Put the Midi Script after Rozeta LFO and you can map the CCs that Rozeta LFO spits out to any plug-in parameter even when the plug-in might not have MIDI learn. Or even convert rozeta's LFO values to Notes, Pitchbend or aftertouch...

Much of the code comes from scripts that ship with Logic for Mac.

Feel free to suggest improvements. Please share your code if you improve or adapt the script...

***NB: It's just a MIDI mapper. It's not a replacement for proper controller assignments. You can't control the mixer channel/pan etc. It maps MIDI to PLug-in Parameters. ***

The attached Demo project has versions of the script with 4, 8 and 16 target pairs. The 16 target version excludes the scaling as that makes the UI way too unwieldy.

You can stack the script by adding another midi scripter plugin after the first to get more inputs.

You can have the same input controlling multiple parameters all with different scaling. For example in the demo below the distortion plugins output is reduced when drive is increased via the same controller.

*****EDIT 10/06/23*****
Updated script to fix it duplicating of values

*****EDIT 23/06/23*****
Updated project to include an instance of Alchemy with the performance pad X and Y parameters pre-mapped (it's not possible to select Y as a parameter to control on iPad).

Save the alchemy track as a patch to use it pre-mapped in any other project.

Ps it’s obviously totally free. If you make any improvements, please share :-)

«13

Comments

  • Wow! Very impressive!

    If my controller weren’t based on Mackie protocol, I’d be trying your code out. You could really be on the way to solving a problem.

  • Definitely interested in this!

  • edited June 2023

    I've implemented scaling for each parameter (based on the example script in Logic for Mac):

    You can map any CC, Note, Velocity, Pitchbend or aftertouch...

    to any MIDI (select via menu or learn) or plug-in parameter. ANY parameter for ANY plugin selected on the track can be assigned. So you can control, say, cut-off and resonance in ES-2 AND Drive in Distortion from the one script as shown in the above iPad screenshot.

    I've not got my iPad with me at the office (quickly updated during lunch break!) so the above are obviously from Logic for Mac.

    The output from the script is just MIDI so doesn't work with automation. Say I have input 1 as CC 12 and convert that to ES-2 filter cutoff. I can record the MIDI and it will be saved as CC12. The script then takes that MIDI and converts to ES-2 cutoff when you play it back. It won't be recorded via automation modes.

    Not sure if that's possible or not.

    This is for using your MIDI controller to control plug-in parameters, it's not a replacement for mix automation.

    I made it to map the knobs on my AKAI MPK mini keyboard thingy (piece of crap that it is :lol:) to synth and plug-in parameters and it works pretty well for that task.

    I like it on the Mac too as I can save different assignments for different synths and works better for me than controller assignments as I want to record the MIDI in a region, not the automation when I'm tweaking a synth. Also, I can save a config for a plug-in and don't have to MIDI learn each time (or use it for synths that don't have MIDI learn). I find it works better for the way I like to do things than mapping smart controls which often causes issues as I don't always want the controls assigned...

  • edited June 2023

    (Edit: moved info from this post to OP)

  • @Gdub said:
    @klownshed
    Great work

    Cheers. I take it it's working OK for you then?

  • @klownshed
    No at work
    Might get a chance to try tomorrow
    But reading the thread, sounds like you’ve done a good job
    Will report back once tested
    Surprised no one else has jumped on this

  • @Gdub said:
    @klownshed
    No at work
    Might get a chance to try tomorrow
    But reading the thread, sounds like you’ve done a good job
    Will report back once tested
    Surprised no one else has jumped on this

    Haha yeah.

    I was gone for a year. Nobody noticed :lol:

  • I noticed

  • @Gdub said:
    I noticed

    :-)

  • Amazing! Thanks for sharing! Will try later this week.

  • @klownshed said:
    Sample project with the script that maps controllers to plug-in parameters. You can map any incoming MIDI to any plugin in the channel strip. You can scale the data for each target (if min>max it will invert the data). There are 8 controller pairs.

    If you open this on Logic on the Mac you can change a single variable to have as many as you like. Within reason ;-)

    Line 24: var TOTAL_TARGETS = 8; Change that value to the number of pairs you want.

    Can also do things like converting velocity to cc, convert one cc to another etc.

    Might be useful for things like Rozeta to map the output to plug-in parameters on plugins that don’t have midi learn. You can also save your settings for different patches, control strips, etc so have default mappings for specific plugins.

    How do you open that project file direct into Logic for iPad?

  • You literally just open it.

  • @klownshed said:
    You literally just open it.

    Hmmm…
    When I unzip it, it became and folder with extension .logicx

    I had to try it again… Thanks!

  • @klownshed said:
    You literally just open it.

    I’ve switched to Safari then the zip-files was OK…

    Have default to use iCabMobile as webbrowser, and that is awesome and superior in many ways in comparison with Safari…

  • @ErrkaPetti said:

    @klownshed said:
    You literally just open it.

    I’ve switched to Safari then the zip-files was OK…

    Have default to use iCabMobile as webbrowser, and that is awesome and superior in many ways in comparison with Safari…

    But not in that way :lol:

  • @klownshed said:

    @ErrkaPetti said:

    @klownshed said:
    You literally just open it.

    I’ve switched to Safari then the zip-files was OK…

    Have default to use iCabMobile as webbrowser, and that is awesome and superior in many ways in comparison with Safari…

    But not in that way :lol:

    Actually first time ever that it fail - have been using iCabMobile for many year, and it’s a joy to use…

  • edited June 2023

    Just had a moment to try this. Works perfectly. This basically solves the main automation gripe I had with Logic. Thanks @klownshed!

    And this improves using midi cc in desktop Logic too. Imagine sending automation from Drambo and recording that.

    @Samu @Gavinski @jwmmakerofmusic and anyone else check this out.

  • Wow. This is cool! Gracias amigo!

  • @klownshed as I said earlier, thank you for your incredible piece of creative work here!

    This illustrates the difference between Logic Pro and other tools on the iPad. Logic Pro is a “platform” for which it is possible to develop significant and useful extensions. Nothing else in the IOS music toolset fits this description so far.

  • edited June 2023

    @auxmux said:
    Just had a moment to try this. Works perfectly. This basically solves the main automation gripe I had with Logic. Thanks @klownshed!

    And this improves using midi cc in desktop Logic too. Imagine sending automation from Drambo and recording that.

    @Samu @Gavinski @jwmmakerofmusic and anyone else check this out.

    I sure will when I have time. :)

    EDIT: Truth be told, I have lost interest in Logic Pro as a creative platform and have returned to Gadget for the most part. Instrumental tracks will be mixed down in Gadget. Vocal tracks will have stems rendered into Logic and mixed down in Logic. All to be mastered in Logic.

  • On thing I've found though is that not all AUv3's (even though they have AUParameters that can be manually automated using curves) respond to touch when trying to assign the parameters, auGEN X is one such plug-in.

    This is caused by either the Plug-In or Logic's way of registering touch automation parameters.

    Personally I'm in no emergency need of Midi CC automation as I prefer to draw my automation and most AUv3's respond well to touch-automation.

  • edited June 2023

    One other thing you can do,

    You can set multiple inputs to the same MIDI cc and have it control different targets all scaled differently,

    So you could make the modhweel control filter cutoff between 24 and 70 and resonance between 80 and 20 inverted.

    Or say every time you turn the resonance up you can add a tiny bit more drive in the distortion plugin from the same controller.

    And then save it all as a patch with your plug-in chain to re-use in other projects...

    I've attached a demo with 3 instances of Scripter.

    The first has 4 controller pairs, the second track has 8 pairs and the last track has 16 controller pairs but without the scalers as that's overkill for the UI.

    The scripter in track 1 has a Modulator with an LFO sending to CC1 (modulation). That modulates Retro Synth Filter cut-off and resonance, increases the drive in the distortion plugin and reduces the distortion output as the drive goes up all from cc1.

    You could also use Rozeta LFO and have three LFOs target multiple parameters. Add additional MIDI scripters if you need more than 16 targets!

    Screenshot from the DEMO running in Logic on a Mac.

    EDIT : Download is in the OP

  • Yeah multiple targets is like having your own mod matrix. You could also dedicate certain midi cc for external controllers while others use LFOs or Envelopes.

  • edited June 2023

    ...

  • Seems like it’s outputting the midi input x8
    Play a single E2 note, you’ll see it sends 8 off them and 8 noteoffs when released
    With ob-xd for instance it’s playing mono only and with built in logic instruments, it doubles the velocity> @klownshed said:

    I’ve made a MIDI Scripter script (adapted from one of the example scripts) that can map any incoming MIDI to any other Cc, plug-in parameter, pitch bend or aftertouch.

    It can learn the target parameter by twiddling the controller in the plugin panel. You can assign parameters from any plug-in in the track -- Instruments and effects. After selecting Learn Plug-in parameter, Just tap the plug-in widget under the scripter UI to switch to the plug-in you want and touch the parameter you want to learn.

    You can scale the Min and Max values and swap them over to invert the controller.

    The attached script auto assigns controllers 12-19 to the inputs (you can change this if you edit the code on the Mac -- No code editing possible on iPad). You can also change the number of input/target pairs by changing the line:

    Line 24: var TOTAL_TARGETS = 8; Change that value to the number of pairs you want.

    To use the Controller Mapper script, open the attached project, tap the scripter tile and then tap the "..." menu button and save the script as a preset for use in any track.

    You can now load MIDI Scripter in any track and load the preset from the browser.

    You can also save the Patch (Tap the track name in the tracks view to save it as a patch) to save the full channel strip with all the assignments for the instrument + Audio fx.

    It's a useful script on Mac too. You can setup different assignments for each track which can be easier than messing with controller assignments. Plus it can just plain convert CCs.

    NB: You can record the MIDI normally. Just press record and twiddle the controller. The data will be saved as its original value. For example, if you map CC12 to ES-2 Filter Cut-off and record your playing and tweaking, Logic will record CC12 data. The scripter needs to be on to convert the data during playback.

    It's easy to edit the controller data in the piano roll.

    Apart from obvious things like mapping the knob on you MIDI controller to a plug-in parameter, you can do things like convert Pitch Bend to Delay feedback. Convert Velocity to filter cut-off. Use your mod wheel to pitch bend.

    You can also use it to make things like @brambos Rozeta LFO etc. work with Logic's built in plugins. Put the Midi Script after Rozeta LFO and you can map the CCs that Rozeta LFO spits out to any plug-in parameter even when the plug-in might not have MIDI learn. Or even convert rozeta's LFO values to Notes, Pitchbend or aftertouch...

    Much of the code comes from scripts that ship with Logic for Mac.

    Feel free to suggest improvements. Please share your code if you improve or adapt the script...

    ***NB: It's just a MIDI mapper. It's not a replacement for proper controller assignments. You can't control the mixer channel/pan etc. It maps MIDI to PLug-in Parameters. ***

    (Edited OP)

    Edit: scroll down to one of my later posts for a demo project with versions of the script with 4, 8 and 16 target pairs. The 16 target version excludes the scaling as that makes the UI way too unwieldy.

    You can stack the script by adding another midi scripter plugin after the first to get more inputs.

    You can have the same input controlling multiple parameters all with different scaling. For example in the demo below the distortion plugins output is reduced when drive is increased via the same controller.

    Seems like it’s outputting the midi input x8
    Play a single E2 note, you’ll see it sends 8 off them and 8 noteoffs when released
    With ob-xd for instance it’s playing mono only and with built in logic instruments, it doubles the velocity

    I used the mfx midi monitor to troubleshoot

  • @klownshed said:
    One other thing you can do,

    You can set multiple inputs to the same MIDI cc and have it control different targets all scaled differently,

    So you could make the modhweel control filter cutoff between 24 and 70 and resonance between 80 and 20 inverted.

    Or say every time you turn the resonance up you can add a tiny bit more drive in the distortion plugin from the same controller.

    And then save it all as a patch with your plug-in chain to re-use in other projects...

    I've attached a demo with 3 instances of Scripter.

    The first has 4 controller pairs, the second track has 8 pairs and the last track has 16 controller pairs but without the scalers as that's overkill for the UI.

    The scripter in track 1 has a Modulator with an LFO sending to CC1 (modulation). That modulates Retro Synth Filter cut-off and resonance, increases the drive in the distortion plugin and reduces the distortion output as the drive goes up all from cc1.

    You could also use Rozeta LFO and have three LFOs target multiple parameters. Add additional MIDI scripters if you need more than 16 targets!

    Screenshot from the DEMO running in Logic on a Mac.

    Thank you @klownshed, you did brilliant work. 👏👍

    Whatever I do to escape from JavaScript coding, somehow always find the way and bite me. ;)

  • edited June 2023

    @bargale said:
    Seems like it’s outputting the midi input x8
    Play a single E2 note, you’ll see it sends 8 off them and 8 noteoffs when released
    With ob-xd for instance it’s playing mono only and with built in logic instruments, it doubles the velocity> @klownshed said:

    I’ve made a MIDI Scripter script (adapted from one of the example scripts) that can map any incoming MIDI to any other Cc, plug-in parameter, pitch bend or aftertouch.

    It can learn the target parameter by twiddling the controller in the plugin panel. You can assign parameters from any plug-in in the track -- Instruments and effects. After selecting Learn Plug-in parameter, Just tap the plug-in widget under the scripter UI to switch to the plug-in you want and touch the parameter you want to learn.

    You can scale the Min and Max values and swap them over to invert the controller.

    The attached script auto assigns controllers 12-19 to the inputs (you can change this if you edit the code on the Mac -- No code editing possible on iPad). You can also change the number of input/target pairs by changing the line:

    Line 24: var TOTAL_TARGETS = 8; Change that value to the number of pairs you want.

    To use the Controller Mapper script, open the attached project, tap the scripter tile and then tap the "..." menu button and save the script as a preset for use in any track.

    You can now load MIDI Scripter in any track and load the preset from the browser.

    You can also save the Patch (Tap the track name in the tracks view to save it as a patch) to save the full channel strip with all the assignments for the instrument + Audio fx.

    It's a useful script on Mac too. You can setup different assignments for each track which can be easier than messing with controller assignments. Plus it can just plain convert CCs.

    NB: You can record the MIDI normally. Just press record and twiddle the controller. The data will be saved as its original value. For example, if you map CC12 to ES-2 Filter Cut-off and record your playing and tweaking, Logic will record CC12 data. The scripter needs to be on to convert the data during playback.

    It's easy to edit the controller data in the piano roll.

    Apart from obvious things like mapping the knob on you MIDI controller to a plug-in parameter, you can do things like convert Pitch Bend to Delay feedback. Convert Velocity to filter cut-off. Use your mod wheel to pitch bend.

    You can also use it to make things like @brambos Rozeta LFO etc. work with Logic's built in plugins. Put the Midi Script after Rozeta LFO and you can map the CCs that Rozeta LFO spits out to any plug-in parameter even when the plug-in might not have MIDI learn. Or even convert rozeta's LFO values to Notes, Pitchbend or aftertouch...

    Much of the code comes from scripts that ship with Logic for Mac.

    Feel free to suggest improvements. Please share your code if you improve or adapt the script...

    ***NB: It's just a MIDI mapper. It's not a replacement for proper controller assignments. You can't control the mixer channel/pan etc. It maps MIDI to PLug-in Parameters. ***

    (Edited OP)

    Edit: scroll down to one of my later posts for a demo project with versions of the script with 4, 8 and 16 target pairs. The 16 target version excludes the scaling as that makes the UI way too unwieldy.

    You can stack the script by adding another midi scripter plugin after the first to get more inputs.

    You can have the same input controlling multiple parameters all with different scaling. For example in the demo below the distortion plugins output is reduced when drive is increased via the same controller.

    Seems like it’s outputting the midi input x8
    Play a single E2 note, you’ll see it sends 8 off them and 8 noteoffs when released
    With ob-xd for instance it’s playing mono only and with built in logic instruments, it doubles the velocity

    I used the mfx midi monitor to troubleshoot

    Should be fixed. Updated project file in the OP (first) post. Let me know if this works for you :-)

  • @Luxthor said:

    @klownshed said:
    One other thing you can do,

    You can set multiple inputs to the same MIDI cc and have it control different targets all scaled differently,

    So you could make the modhweel control filter cutoff between 24 and 70 and resonance between 80 and 20 inverted.

    Or say every time you turn the resonance up you can add a tiny bit more drive in the distortion plugin from the same controller.

    And then save it all as a patch with your plug-in chain to re-use in other projects...

    I've attached a demo with 3 instances of Scripter.

    The first has 4 controller pairs, the second track has 8 pairs and the last track has 16 controller pairs but without the scalers as that's overkill for the UI.

    The scripter in track 1 has a Modulator with an LFO sending to CC1 (modulation). That modulates Retro Synth Filter cut-off and resonance, increases the drive in the distortion plugin and reduces the distortion output as the drive goes up all from cc1.

    You could also use Rozeta LFO and have three LFOs target multiple parameters. Add additional MIDI scripters if you need more than 16 targets!

    Screenshot from the DEMO running in Logic on a Mac.

    Thank you @klownshed, you did brilliant work. 👏👍

    Whatever I do to escape from JavaScript coding, somehow always find the way and bite me. ;)

    👍🏻

  • Amazing. Thanks

Sign In or Register to comment.