teknopipo.nl

Tag: snow leopard

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...

Wireshark on Snow Leopard

by on Apr.16, 2010, under Telecom

Finally fixed a bug that’s been annoying me for months. I managed to get Wireshark up and running on OSX Snow Leopard – without any crappy workarounds such as running it inside a virtual XP machine. The video below by dangribbin explains it all.

Summarizing the steps:

  1. Download and mount Wireshark for 10.5 Leopard Intel
  2. Drag Wireshark to Applications
  3. Open a terminal and type:
    defaults write com.apple.finder AppleShowAllFiles YES
    killall Finder
    - com.apple.Finder (i.e. Finder with a capital F) did not work for me!
    - For more info on defaults type man defaults.
  4. Create /usr/local/bin/ if you don’t already have one.
  5. Drag the Command Line utilities into /usr/local/bin/.
  6. Drag ChmodBPF folder to Startup Items.
  7. In the terminal type:
    sudo chown -R root:wheel ChmodBPF
  8. Launch Wireshark
  9. Add /usr/share/snmp/mibs/ under Edit Preferences Name Resolution SMI (MIB and PIB) paths Edit New
  10. Reboot, done!
2 Comments :, , , 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!