Ask HN: Moving MIDI

3 points by phusion ↗ HN
I've been working with a friend on this project to basically get rid of his hardware general midi tone generator and have a software version do all the work, AND be able to send MIDI data to his crazy Biofeedback application on the same computer. We wrote up a text to better explain, here it is, any help would be awesome:

We currently have an app running in Windows that is sending out basic general MIDI commands to a COM port, which in turn is driving via a serial cable a Edirol SD-20 tone generator. Our needs are pretty basic, we're doing just general MIDI, picking various voices (clarinet, oboe etc). What we want to be able to do is drop the external tone generator and re-route/pickup the MIDI traffic that's on the COM port (i.e. Device Manager -> COM1/2/3/45 etc) and then route that basic GM data to a software based tone generator. We don't need or want a super sophisticated DAW ( Microsoft GS Wavetable synth may be enough). Our client bass are health care professionals, so it needs to be easy, intuitive for the uninitiated.

I've been in IT for a long time, but never worked on something like this before. Thanks for the read. If the above text isn't clear enough, please let me know.

5 comments

[ 4.0 ms ] story [ 27.4 ms ] thread
MIDI-OX might be able to help you: http://www.midiox.com/

It runs a Windows Scripting Host interface, which you should be able to use with most scripting languages to send the incoming data into MIDI-OX, and then route it directly to Microsoft GM.

If I were doing this project I would probably try going down this route, using the ActivePython distribution and pySerial. There might be simpler alternatives but this way looks pretty straightforward.

This, or MIDIyoke creates virtual ports and is lightweight. MIDI-OX is better for programming and debugging though.
We have looked into MIDI-OX and Midi-YOKE and we're not entirely sure how to implement it to serve our purpose, does anyone have any specific experience with these tools?
I don't actually have much experience working with these apps, but on a second reading of the problem, I realized I was thinking of a different problem(an external generator sending stuff from a serial port into the computer). The key to solving this one is just to get the MIDI data into the Windows MIDI mapper system.

If you have access to the app source you should be able to rewrite the code to use DirectSound or FluidSynth to play MIDI rather than touch the serial port.

If not, two dirty-hack options come to mind: you can loop the serial line's output back into the computer with a USB MIDI device(classically, MIDI goes over a 9-pin connection, presumably you already have a solution for serial-to-9-pin with the original setup) or you might be able to poll outgoing serial traffic and remap it with some code.

Ahhh, so we would most likely need to write something custom for this. That's very useful info, I take it pySerial is a serial iface for Python scripts? Thank you.