I got this AKAI MIDImix USB controller. It's principally meant for Ableton, like apparently half the stuff nowadays is. My only real interest is to connect it to my computer with the Processing MidiBus library.
Previously I have have been messing with MicroKORGs, Electribe and a Nanokontrol 2, so a controller like this is not a big deal. Compared to synths, the major difference is that the lights can be set independently of the key presses. They even need to be set because the physical button presses only send information about the key press itself and do not change the light state.
I'll look at the Processing midi library a bit and then at the AKAI mapping.
Midibus
MidiBus is a clever library for Processing that eases the use of MIDI considerably. It handles input, output, program change, control change, raw midi data on multiple channels. Here I'm not going into song player routines, which are a bit tricky but doable. (The Midibus does not have a player).
After installing MidiBus to the Processing install, this will activate it in the source:
import themidibus.*;
void setup()
{
MidiBus.list();
mybus=new MidiBus(this,1,2);
println(mybus);
}
The "(this,1,2)" can be adjusted to input and output of the given list of MIDI devices you get from running the sketch.
The MidiBus.list() produces a list to the console with the relevant information. My USB/MIDI interface is an UM1G, and as the AKAI MIDImix works through a separate USB cable (not a MIDI cable) it will be listed as a separate device:
Available MIDI Devices:
----------Input----------
[0] "UM1G [hw:2,0,0]"
[1] "Mix [hw:3,0,0]"
[2] "Real Time Sequencer"
----------Output----------
[0] "Gervill"
[1] "UM1G [hw:2,0,0]"
[2] "Mix [hw:3,0,0]"
[3] "Real Time Sequencer"
After the Midibus has been set correctly, sending a note is simple:
mybus.sendNoteOn(midi_channel, pitch, velocity);
You need to shut the notes too:
mybus.sendNoteOff(midi_channel, pitch, velocity);
For example, these could be directly inserted within the Processing keyPressed() and keyReleased()events to facilitate a simple MIDI keyboard.
output.sendControllerChange(midi_channel, CC, value);
Just as an aside, some devices use NRPN (Non-Registered Parameter Number) for similar things. In such cases the data has to be sent as raw MIDI information. This worked for my Korg Electribe:
output.sendMessage(0xb0, 0x63, 0x05);
output.sendMessage(0xb0, 0x62, NRPN);
output.sendMessage(0xb0, 0x06, VALUE);
The 0xb0 signifies MIDI channel 1, whereas 0xb1 would be 2, and so on. Good manufacturer manuals and datasheets should give Control Change and NRPN values for each device.
But it's also possible to find out the CCs and note values by displaying the incoming MIDI data. The values can shown by adding controllerChange() and noteOn() events to the sketch:
void noteOn(int channel, int number, int value){
println("Received note channel:" + channel);
println("Received note number:" + number);
println("Received note value:" + value);
}
void controllerChange(int channel, int number, int value) {
println("Received CC channel:" + channel);
println("Received CC number:" + number);
println("Received CC value:" + value);
}
AKAI midimix
Ok, back to the MIDImix. Physically, the knobs could have been taller, it's not easy to get a good grip of them. Also the faders could have been a bit longer but this is less of a problem. Yet the MIDImix is compact and quite cheap, although not as cheap as a Nanokontrol might be.
The nice thing with these modern controllers is that the data is transmitted through an USB cable and it's also USB-powered, so no power cable / MIDI cable hassle.
AKAI works on MIDI channel #1, and I didn't see how it could be changed. For the purposes of my tests I simply disconnected the MIDI cable from my UM1G box.
All potentiometer and slider values are Control Change messages with the value 0-127 with them.
The buttons are "keys" that send a velocity of 127 with them.
Potentiometer CCs:
I II III IV V VI VII VIII
16 20 24 28 46 50 54 58 TOP ROW
17 21 25 29 47 51 55 59 MIDDLE ROW
18 22 26 30 48 52 56 60 BOTTOM ROW
Slider CCs:
19 23 27 31 49 53 57 61 (62 = MASTER)
MUTE button Note values:
01 04 07 10 13 16 19 22 (27 = SOLO)
Individual SOLO button Note values: *)
02 04 08 11 14 17 20 23
REC ARM button Note values:
03 06 09 12 15 18 21 24
Bank Left Note value:
25
Bank Right Note value:
26
Solo button Note value:
27
*) Holding down the "SOLO" key shows the individual SOLO status for each channel instead of the MUTEs. So, sending a SOLO light change only shows up if the "SOLO" key is held. In other MIDImix devices there may even be separate lights for the SOLOs. Pressing the "SOLO" key does send a note value, though.
Sending note-ons to MUTE, REC ARM or Bank button values with velocity 127 will turn the associated lights on. Sending note-ons with velocity 0 will turn the lights off. Sending note-offs does nothing. The "SOLO" key cannot be lit this way, possibly there's no LED at all.
Pressing SEND ALL will cause the MIDImix to send all the above values in succession. This key also may not have a LED in it.
No comments:
Post a Comment