[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MIDI driver for MiNTnet



Whoops! Someone accidentally got a message from me earlier, that was 
meant for the list. I _hate_ this software (pegasus mail on a PC (DOS 
version)).

Anyway, what I basically said was:-

> Yah, actually you could hide IP-packets in MIDI SYSEX packets, and 
> just use channel numbers as the MAC-layer addresses. This way you 
> could possibly even keep your computers coexisting with your MIDI 
> instruments.

MIDI sysex (system exclusive) is so called because it is sent to the 
whole system (i.e. it has no channel number, so everything, on any 
MIDI channel will "see" it), but is exclusive to a particular device.

Essentially it consists of a header, usually two identifiers, as much 
information as you care to squirt down the line, and an EOX (end of 
sysex) command.

The two identifiers are: 1) a manufacturers ID. These are given out 
by the international MIDI standards committee, but there is a 
universal "development" ID that could be used for MiNT (I won't tell 
them if you don't). 2) An identifier (usually) specific to the device 
being addressed (i.e. the particular type of synth). This can be 
anything you like (who said IP address????).

Following that is the data, then the EOX. Bear in mind that the 
header and EOX are specific 8 bit values, whereas the data itself 
(including the IDs) are restricted to 7 bits of data. Alternatively 
you could look at it as being 7 bits all round, with the top bit 
determining which messages are MIDI status information.

By embedding any data in sysex like this, the whole system could be 
made to operate cooperatively with other MIDI data. Admittedly the 
headers and stuff are a bit of a PITA, but it would have it's 
benefits. For example, it would be possible to use the same MIDI 
setup for networking and music (even simultaneously, if someone wrote 
some suitable software!) - at least playing a keyboard wouldn't stuff 
up the network, and network traffic wouldn't re-program a synth. 
Also, it removes the MIDI restriction of 16 channels, since sysex 
isn't channelised, it would just be the IP addresses that are 
important.

I can dig out all the relevent info if anyone seriously wants to 
tackle this.


On the hardware side of things, all Ataris have a MIDI THRU port, but 
Atari (in their infiniteless wisdom) decided to wire it to some 
"spare" pins on the MIDI out. In practice, this would be useless for 
a network, anyway, since it is hard wired straight through - put the 
devices in a loop, and watch your messages circulate forever!

In practice, anything at the IN would need to be echoed OUT again, 
unless it was being blocked for whatever reason. If the system is to 
happily coexist with MIDI instruments, though, there would need to be 
a way to optionally block non sysex messages. Take the folowing 
example:-

  +---->COMPUTER1---->SYNTH1---->COMPUTER2---->SYNTH2----+
  |                                                      |
  +------------------------------------------------------+
  
A MiNT network would work fine, provided the computers block their 
own messages, but what if a key is pressed on synth1? C2 can't 
_always_ block non sysex, since the note might be meant for synth2, 
but C1 has to block it, or S1 will see it again, and possibly play it 
when it's not meant to. As will S2.....

Obviously for a coexistant system, there'd need to be a bit of 
processing on the IN->OUT chain. Of course, only an idiot would 
connect their synths as above - but the world's full of them!

Incidentally, the above could be solved if the synths were connected 
on a spur from the main loop. MIDI for music doesn't need a loop 
topology.

Cheers,

Xav

--
Xav
E-mail: mbge4mdc@fs1.ee.man.ac.uk                                      
Web: http://cerebus.lamp.ac.uk/~xav/xav.html
"It's who I am, it's what I do - I can't change" - Sledge Hammer