PC: MMC from any MIDI source

Discussion about: tracktion.com
Post Reply New Topic
RELATED
PRODUCTS

Post

MMC from any MIDI input source

This guide should help those who wish to make use of T2's MMC support but lack compatible MMC MIDI hardware.

NOTE: PC ONLY! This method makes use of PC tools called MIDI YOKE and MIDI-OX. The steps taken in this guide will therefore only apply to the PC platform. However, there is more than likely an equivalent for the Mac that can do perform this kind of data translation; hopefully someone can figure out how to do it on that platform.


This requires two pieces of software:
MIDI-OX [MIDI management software]
MIDI Yoke [MIDI virtual patch cable]

Download both of these programs before you continue!

-------------------------------------------
Step One: Installation

First, install MIDI Yoke, following the instructions that come with the download. It's not like a normal program installation, you install it as a driver. You can read the website for detailed info on what it does, but basically anything that arrives at one of the 8 yoke 'output' devices is sent back to the corresponding yoke 'input' device. This allows us to achieve what we want to do!

NOTE: Even though experience with windows XP shows that a restart is rarely necessary when installing new things nowadays, i find that MidiYoke always needs my computer to restart before it works properly, so i'd recommend doing so at this stage to save potential headscratching later.

Next, install MIDI-OX. This is where we do the complex stuff, but it requires MIDI Yoke in order to work, for reasons that will become apparent.

-------------------------------------------
Step Two: Setting up devices


Load MIDIOX and you are faced with a potentially scary interface! I'll show you how to do what you need though. First we need to set up the devices that are going to be used:

OPTIONS -> MIDI DEVICES...

You get the following window:

Image

This is where you add the MIDI devices that MIDIOX will use.

In the MIDI Inputs panel, click on the input which will recieve your controller messages (YAMAHA CBX Driver in this example).

Now, we need to select an output device (or several) too. For this example we'll keep it simple and choose MIDI Yoke 1 (you can ignore the NT in the device name if you have 2000/NT/XP).

Image

Check that the tick box at the bottom of the window is selected (automatically attach inputs to outputs), and then click OK.

Now, open the PORT ROUTINGS window

VIEW -> PORT ROUTINGS


Image

The connections should hopefully have already been joined up for you, but if they haven't, make sure it looks like the above diagram (connect Both the input and the MIDI-OX Event Port to the MIDI Yoke 1 output).

Now we've configured the devices!

-------------------------------------------
Step Three: Finding the messages

Now, what we want to do is convert 'some MIDI message' into an MMC instruction (which is a different kind of MIDI message, covered later). In order to do this we need to make a 'map' which will perform this translation for us.

However, before we can make a map, we need to know what this initial message is. When you press a key on your input device, what is the actual MIDI message it generates?

Now that we have the devices set up, we can examine the MIDI monitor windows.

Image

The input/output monitors display all MIDI data recieved at the corresponding types of port. So, if you have a keyboard connected to the selected input device, any notes you press will show up as NOTE ON/NOTE OFF pairs. Any controllers you twiddle will show up as CC data or perhaps NRPN data, or even SYSEX.

Unfortunately, as the writer of this guide, the only MIDI input device i have is a keyboard, so this example will use a MIDI note-on message as the trigger source.

Press the button that you wish to map, and look at the data that appears on the input monitor. MIDI messages are made up of a bunch of header info and data. Generally, the important bits of the command live in DATA1 and DATA2, whilst another part denotes what type of message it is.

Image

The input monitor here shows the last few events. The event i'm looking to convert is the last 'NOTE ON', which came from me pressing a low C. For a NOTE ON, DATA1 holds the note number, while DATA2 holds the velocity. It is handy to have a pen and paper to note the message down, but it's of course possible to keep the input monitor somewhere visible.

Notice that the velocity of all the NOTE OFF's is 0; this is how note offs are sent; they're actually note-ons with a velocity of zero. This will be relevant later in the example.

I'm after the last NOTE ON. That message has the following details:

EVENT: Note On
DATA1: 24
DATA2: 31

It is important to bear in mind the fact that this monitor shows HEXADECIMAL values [note that some values have letters in]. This presents a slight difficulty, but only a very slight one! Windows comes with a calculator built in (stored under accessories from the start menu). Load it up, and change it to scientific mode:

VIEW->SCIENTIFIC

Image
Click the HEX radio button in the top left corner, and then type in a hex value. If you click the DEC radio button it will show you the corresponding value in decimal.

The bit of data i'm concerned with in this note-on message is the DATA1 value; this is the note number that i wish to trigger an MMC event. Tho '24' doesn't have any letters in it, it's still hexadecimal, so convert it:

0x24 = 36 (0x shows that it's a hex value)

That's the tricky part done! Now we need to make a map!

-------------------------------------------
Step Four: Create the map

So, what we need to do is convert this specific MIDI message (the one generated when you press the desired button) to one of these 'MMC' messages. To do this, we need to make a map.

OPTIONS -> DATA MAPPING

Image

This is where we set up our maps. Each line in this window (currently empty) represents a MIDI data transformation. That means that we need to add a line for each conversion we require. Don't worry if you don't know too much about MIDI data, it's not too difficult to set up.

To add a new instruction, click INSERT. This brings us the 'DEFINE MAPPING' dialog.

Image

This is where we set the details for the transformation. First, let's look at the INPUT criteria:

I want to convert a NOTE ON message, so i'm going to set the EVENT TYPE to NOTE ON.

The note number i have already worked out to be 36, so i enter that in both MIN and MAX fields of the NOTE# part (so that only one key is acknowledged and not a range).

As i pointed out earlier, a NOTE-ON with a velocity of 0 is a NOTE-OFF. I don't want to send a message with the note-off too, so i set the minimum value for velocity to 1, and the max to 127.

Image

That's the input message set! Now the output message needs to be set! But first i should explain a bit about MMC messages...

MMC instructions are MIDI 'System-exclusive' SYSEX messages. They are as follows:

[ F0 7F 00 06 01 F7 ] -- Stop
[ F0 7F 00 06 02 F7 ] -- Play
[ F0 7F 00 06 04 F7 ] -- FF
[ F0 7F 00 06 05 F7 ] -- REW
[ F0 7F 00 06 06 F7 ] -- Rec

They look scary, but they're not at all really. It's hexadecimal notation again, and each part has meaning. You'll notice that only one part changes out of all the different messages. The first two ('F0 7F') signify that this is a SYSEX message. The '00' is a device ID number (we don't need to worry about device IDs). The '06' basically tells the reciever that the sysex message type is MMC. The final 'F7' marks the end of the message. The part that changes is the bit that describes the event. Simple!

For this example, i want to send a PLAY message from my C note on. That means the 'output' message i need to generate is a SYSEX with the following data:

F0 7F 00 06 02 F7

This still might look scary but it really isn't. Go to the OUTPUT part of the map definition, and change the type to SysEx. Now you can just copy/paste the above string into the slot that appears.

Image

And this is the 'output' message set up. Now if we click on OK, we'll see a line representing this conversion. click SAVE. Give the map a useful name like "MMC Map 1" (save it in the default location), and then save it and click OK to close the map window.

Remember that this is only one conversion so far!

-------------------------------------------
Step Five: Apply the map

Now, we need to go back to the ROUTING page. Halfway along the connection lines sits a little square. This is where we apply our map to a connection. We want this conversion to happen between the INPUT and the MIDI Yoke 1 port.

Click the little square on the line between the input and MIDI Yoke 1 output. This brings up the CONNECTION PROPERTIES window.

Image

All you need to do here is load the map file: select the one you just saved, and click OK. you'll see a little green light on the connection square to show that there's a map applied.

The last important step to do in MIDIOX is to MAKE SURE THAT OPTIONS->PASS SYSEX has a tick next to it, otherwise MIDIOX will ignore all sysex commands!

Image

Now if you open the MONITOR-OUTPUT window, and press the key, you should see a SYSEX message appear instead of the original message. This is the end of the painful part!

-------------------------------------------
Step Six: Configure Tracktion

Now, T2 is probably not going to be able to see your MIDI input due to MIDI-OX holding the device. However, that's not a problem as we're going to use MIDI Yoke 1 as our input device. Make sure that it is enabled as an input midi device on the settings page.

On the EDIT page, click the TIMECODE button (bottom left):

RESPOND TO MIDI MACHINE CONTROL FROM DEVICE -> MIDI YOKE 1

This will set T2 up to listen for MMC messages from that port. If you press the key you've configured in MIDI-OX, you should now see T2 start playing.



Congratulations!

Now you can go back to the data mapping section and add new lines to create MMC conversion instructions for the other commands. You can copy/paste the lines to minimise typing effort for similar translations.

Bear in mind, however, that the FF/REW commands are a little odd; if one of the messages as coded above is used, it will move forwards/backwards by one degree of snap (from the zoom level). it will only move once for each message it recieves, so it is best suited for an 'incremental' rotary knob style control; i.e. one that sends out an 'increase' message with each clockwise click and a 'decrease' with each anticlockwise click. i've not got one of these myself, so i can't really come up with anything effective for it :hihi: but, mapped to a key, those controls amount to forward/backward stepwise navigators.

If you add MIDI Yoke 2 to the input devices in MIDIOX, and then set T2 to SEND its own MMC messages to that port, you can look in the MIDIOX input monitor to see exactly what the MMC messages are and how they work. Perhaps you'll find some T2 features that you can map! i've tried to see if it sends mute/solo tho and it doesn't :'(

Remember that your controller will probably generate something different to a note-on, so pay attention to the midi generated in the input monitor when you're looking for the message to use. if you have any difficulties just post back to this thread and i'll see if i can help at all.

ALSO, final note, you may want to use more than one MIDI Yoke output in MIDIOX; i set it so that the INPUT->MIDIYoke1 had NO map (and therefore was unaltered) and use MIDIYoke1 as my normal T2 midi input for recording duties. The INPUT->MIDIYoke2 was where i put the map, and then set T2 to respond to MIDIYoke2 instead of 1. This just makes sure that the MMC data isn't going into the tracks, but it's probably not that big a deal.

I hope this is useful to anyone :)
Kick, punch, it's all in the mind.

Post

This is untested, as i don't have a US-428, but i've made a basic map for the 5 basic transport controls based on what i've read in some US428 docs.

If you download it here and it works, you can miss out steps 3 and 4.

Untested US428 MIDIOX translation map
Kick, punch, it's all in the mind.

Post

bcr2000 preset to use SOME! of the MCU commands here

http://skirize.bounceme.net/MCU.zip

Post

piaz wrote:hey, djsubject, how does this work?
http://www.kvraudio.com/forum/viewtopic ... hlight=mcu

hope you can understand my bad spelling :D

Post

Thanks a lot for this guide!

How can i assign the REW/FF-functions to the pitch-bend-wheel? I don't understand what values to put in the LSB/MSB-boxes of the Define Mapping-dialog...

Post

For Mac users: MidiPipe can do this (and much much more). You need to use a "Message Factory" tool in your pipe, set the trigger to the midi event sent by whatever controller you want to use (e.g. the play button on your keyboard) and set the message to the hex message listed above for the corresponding MMC message (e.g. F0 7F 00 06 02 F7 for Play). I don't have time to do a detailed tutorial, but I wanted to let people know it can be done.
This signature is untrue

Post

This seems way to complex for just using MMC. To add the products mentioned might give you great problems in the future. I bought a M-Audio Ozonic, installed the updated drivers, messed with it a bit, although taking some time, I arrived at what you have without the install of Midi Yoke & Ox. It's great information and I appreciate the time you spent, but you still have the problem of rewind and ff moving to the next snap. That is the only problem I have without all the installs.

If snapping is disabled, then there is no movement of ff or rew at all. ?????

Why doesn't the rew and ff work normally.

Post

Thanx haydxn.

I've used your solution for a while now.
Recently, I've modified the MO somewhat.

I'm now using my midi device directly (NO MidiOX or MidiYoke).
I use a Mackie Spike as my USB Midi Interface.

I have a TR505 chained to a PM16, both Roland devices.
The midi path is TR505-->PM16-->Spike-->USB.

The TR505 is set to transmit on channel 16.
The PM16 is set to receive on channel 16 with MidiMix on.
Midi drum pad triggers are connected to the PM16.

Using the Custom Control Surface dialog
I defined a custom control surface TR505--Input device is 'USB Audio Device'(Spike).

Using the 'edit control mappings' dialog I've defined the transport actions.
Stop/Start/Record/Home/Abort&Restart etc...

When I record drums, I use the 'USB Audio Device'(Spike) as my input channel to record the Midi drums, filtering channel 16.
In the Timecode-Respond to midi machine control from device dialog, I specify the 'USB Audio Device'(Spike).

I can now use the TR505 as a control surface sitting beside my drums.

Very useful for me, so thanx again for the inspiration.

Cheers!

Post

I've been trying this method but I can't get it to work. I have mapped controllers to MMC messages between my MIDI input and a MIDI Yoke output but they don't emerge. If I look at the MIDI Port Activity dialog in MIDI Ox and I press one of my mapped keys the SX light flashes on the MIDI Input port but nothing on the output port. I have Options->Pass SysEx enabled and SysEx is not being filtered. Any ideas?

Post Reply

Return to “Tracktion”