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 StoreAudiobus is the app that makes the rest of your setup better.
Converting CCs to MMC commands with Mozaic?
Hey all,
Have thrown together a @brambos Mozaic script tonight to get my Keylab Essential MK3 controller to play nicely with the the old Roland jv1010 module on my desk (accessing all the patches and performance banks using buttons and relative midi jog wheel on the controller). That's working great, but I have some buttons left to work with.
Would be handy to control the transport on my MPC using the transport controls here, however I'd need to convert some CC buttons into MMC to do that, and I can't find any reference to whether that is possible or how. Can anyone help me with this?
AS an aside for the curious, here's the script I've been working on. It is pretty specific to my routing, instruments and use case:
@init
FillArray currentProgram, 0, 16
FillArray ccStates, 0, 128 // Array to keep track of CC states
@end
@OnMidiInput
// if (MIDIChannel <> (10-1)) and (MIDIByte2 <> 114)
if (MIDIByte1 < 0xB0) or (MIDIByte1 > 0xBF)
SendMIDIThru
endif
@end
@OnMidiCC
// Update the state of the CCs
if (MIDIByte2 >= 0) and (MIDIByte2 < 128)
ccStates[MIDIByte2] = MIDIByte3
endif
// Handle CC 114
if (MIDIByte2 = 114) and (MIDIChannel <> (10-1))
if (MIDIByte3 = 63)
currentProgram[MIDIChannel] = currentProgram[MIDIChannel] - 1
elseif (MIDIByte3 = 62)
currentProgram[MIDIChannel] = currentProgram[MIDIChannel] - 2
elseif (MIDIByte3 = 65)
currentProgram[MIDIChannel] = currentProgram[MIDIChannel] + 1
elseif (MIDIByte3= 66)
currentProgram[MIDIChannel] = currentProgram[MIDIChannel] + 2
endif
if currentProgram[MIDIChannel] < 0
currentProgram[MIDIChannel] = 0
elseif currentProgram[MIDIChannel] > 127
currentProgram[MIDIChannel] = 127
endif
// Send and log bank change messages based on other CCs
if (ccStates[30] = 127)
SendMIDIBankSelect MIDIChannel, 84, 0
Log {CH: }, MIDIChannel+1, {, PROG: }, currentProgram[MIDIChannel]+1, {, BANK MSB: 84, LSB: 0 (session patch 1-128)}
elseif (ccStates[31] = 127)
SendMIDIBankSelect MIDIChannel, 84, 1
Log {CH: }, MIDIChannel+1, {, PROG: }, currentProgram[MIDIChannel]+1, {, BANK MSB: 84, LSB: 1 (session patch 129-255)}
elseif (ccStates[86] = 127)
SendMIDIBankSelect MIDIChannel, 84, 2
Log {CH: }, MIDIChannel+1, {, PROG: }, currentProgram[MIDIChannel]+1, {, BANK MSB: 84, LSB: 2 (orchestral patch 1-128)}
elseif (ccStates[87] = 127)
SendMIDIBankSelect MIDIChannel, 84, 3
Log {CH: }, MIDIChannel+1, {, PROG: }, currentProgram[MIDIChannel]+1, {, BANK MSB: 84, LSB: 3 (orchestral patch 129-256)}
else
Log {CH: }, MIDIChannel+1, {, PROG: }, currentProgram[MIDIChannel] +1
endif
SendMIDIProgramChange MIDIChannel, currentProgram[MIDIChannel], 10
else
if (MIDIByte2 <> 115) and (MIDIChannel <> (10-1)) and (MIDIByte2 <> 30) and (MIDIByte2 <> 31) and (MIDIByte2 <> 86) and (MIDIByte2 <> 115)and (MIDIByte2 <> 87)
SendMIDIThru
endif
endif
if (MIDIByte2 = 115) and (MIDIChannel = (10-1)) and (MIDIByte3 = 127)
SendMIDIBankSelect (10-1), 80, 0
SendMIDIProgramChange (10-1), 0, 10
Log {CH: 10, PROG: 1, BANK MSB: 80, LSB: 0 (orchestrall performance)}
endif
@end
Comments
@OscarSouth : MMC comnands are sysex messages. Mozaic has a function for sending sysex messages.
A web search will reveal the format of the MMC sysex messages.
Thanks for this, I tracked down the messages for the MPC here:
https://www.mpc-forums.com/viewtopic.php?f=48&t=186979
And have thrown this together:
This successfully prints the Log messages but I'm not getting any response from the device and not seeing any Sysex messages in any logging (using MIDISpy on iOS after Mozaic).
Anyone help me out? I think the problem is with my Mozaic code -- the Sysex doesn't appear to be sent. Even if someone can give me some sample Mozaic Sysex code that works, then I should be able to massage it into doing what I need it to do and debug with this specific device.
An an extra thought, I do see the MPC register as MIDI input, but nothing is logged in MIDISpy ( which has a filter for Sysex so I'd assume it'd be shown) or in the MPC MIDI log. IT may be that the message is being sent but not logged, and I'm not getting any control effect from it (the Receive MMC param is checked).
Have confirmed that the data is being sent correctly (wasn't being displayed on iOS midi monitor apps) -- need to get the device to respond to it. I will continue on the MPC message board. Thanks for the Mozaic help to get this far
Maybe there is a receive sysex setting in the mpc that you have to enable.
I think mmc stands for multi media command and it expects a string like "play".
I got the data from here: https://www.mpc-forums.com/viewtopic.php?t=186979
That setting is enabled.
Have started a thread over here: https://www.mpc-forums.com/viewtopic.php?f=48&t=218090
Should have looked at that before commenting...
Succes
@OscarSouth look at the Wikipedia or other articles about mmc. The device ID may not be correct. If your device is a different model than the one on site you copied from, your device might have a different device id.
http://midi.teragonaudio.com/tech/mmc.htm
When reading the linked docs i noticed akai being nonstandard, leave the F0 and F7 out ! But that seems impossible because it is inserted by the sendsysex command in mozaic.
Doing some digging. I also have an old MPD with AKAI transport MMC buttons laying around, so I will see if I can extract some data from that.
Interesting observation -- I'd interpreted that as the (different) piece of hardware that people were working with in that thread also automatically adding those bytes. Worth thinking about -- Thanks.
Guess that explains that then
I am not sure that is what is being said in the conversation. If the people are (as implied) using a send sysex command from a pedal, the wrapping sysex bytes would automatically be sent by the pedal. MIDI generally requires proper header bytes in its messages.
I could be wrong but I suspect they are leaving out the wrapping bytes for convenience.
In case it's useful to anyone, here's the MMC data sent by an AKAI MPD32:
Quick update for anyone looking for this info in future -- what I was working on in this thread all worked once I downgraded the MPC firmware to 2.13
Hopefully they fix that bug in the latest release soon