teknopipo.nl

Archive for May, 2010

Götebogsvarvet

by on May.22, 2010, under Friends

Today Sini, Jens and Thomas successfully completed the Göteborgsvarvet! Steve and I cheered for them along the track as many times as we could. I think we raced through every street in Göteborg at least eight times in our awesome BMW rental car :P The weather was great, around 24 degrees in the blazing sun, so our friends reached a pretty impressive goal!

Leave a Comment :, more...

Java SysEx programming

by on May.05, 2010, under Audio, Telecom

I’m taking my first steps into the world of JavaSound programming. The first thing I learned is that the Snow Leopard default javax.sound.midi.spi implementation is buggy when it comes to SysEx message transmission. For the time being I’m sticking with the MMJ library instead.

As an example, I’ve been trying to send a “SID Skip Patch” command to my SID station. The SysEx message for this command is F0 00 20 3C 01 00 03 F7.

The following code shows how to construct this message in Java (example based on SendSysex.java at jsresources.org):


String s = "F000203C010003F7";
int n = s.length() / 2;
byte[] msg = new byte[n];
for (int i = 0; i < n; i++) {
    msg[i] = (byte) Integer.parseInt(
    s.substring(i * 2, i * 2 + 2), 16);
}

The next step is to send the resulting byte array to a MIDI output. The following code works fine (tested with MIDI monitor and on a real SID station through an ESI MIDI Mate):

String[] outputs = de.humatic.mmj.MidiSystem.getOutputs();
int index = 0;
 
// insert code to set correct index here...
 
de.humatic.mmj.MidiOutput mo =     de.humatic.mmj.MidiSystem.openMidiOutput(index);
mo.sendMidi(msg);

I’ve left out the code to determine the correct index as it is irrelevant. This could be a dropdown list in a GUI or some substring search or whatever. The following code tries to do the same thing using Snow Leopard libraries, but sends nothing at all:

javax.sound.midi.SysexMessage sysexMsg;
javax.sound.midi.Receiver receiver;
javax.sound.midi.MidiDevice.Info[] dev;
int index;
javax.sound.midi.MidiDevice myOutPort;
 
sysexMsg = new SysexMessage();
sysexMsg.setMessage(msg, msg.length);
dev = javax.sound.midi.MidiSystem.getMidiDeviceInfo();
 
// insert code to set correct index here...
 
myOutPort =
    javax.sound.midi.MidiSystem.getMidiDevice(dev[index]);
myOutPort.open();
receiver = myOutPort.getReceiver();
receiver.send(sysexMessage, -1);

If you have succeeded in making this work, please let me know. MMJ development seems to have stopped so I’d kind of want to start using OSXs own stuff…

1 Comment :, , , , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!