[OSC_dev] OSC replacement for MIDI

Jeff Glatt jgglatt at roadrunner.com
Fri Jan 30 13:44:59 PST 2009


> in a midi replacement,  notes represented as floats (60, 59.9804)
> are much closer to what the previous generation of these
> controllers were doing

Huh?? MIDI doesn't even support floats. _All_ MIDI data is 8-bit
integers. (Well, actually data bytes are 7-bit because only a status
byte sets the high bit). Specifically, MIDI uses a 7-bit integer to
represent a "note pitch". It's an abstraction for frequency. In other
words, MIDI note number 60 is supposed to produce a pitch at
261.63 Hertz. MIDI note number 61 is supposed to produce a
pitch at 277.18 Hertz. MIDI assumes a 12 tone western scale. (See
my chart at http://home.roadrunner.com/~jgglatt/tutr/notefreq.htm).
It's true that most professional synths now offer the facility to
change the tuning. For example, you can set up the tuning for an
arabic scale on a Roland Fantom X. But that's a non-standard tuning,
and MIDI knows nothing about that. If you send MIDI note 61 to a
Fantom X tuned to an arabic scale, as well as a standard GM unit,
you will have a godawful noise that most people will not recognize
as music).

If you send a MIDI message to play note 61, and it _doesn't_
produce a pitch at 277.18 Hertz, then you've got a broken synth (or
something that is deliberately tuned non-standard).

What a MIDI synth does when it receives that note number of 61 is
say "Aha. That's a frequency of 277.18 Hertz in a 12 tone western
scale. That's what I'm going to set my oscillator rate to (or the
waveform sent to my DAC, if using digital audio waveforms)". Well,
actually it will probably take the reciprocal of the frequency, because
the period is usually what the hardware wants. Same thing.

Frequency is absolutely backward compatible with all current
musical devices, because that's what every single abstraction (like
MIDI note numbers, or cents) gets eventually broken down to in a
synth. A synth _can't_ play a pitch unless it knows the frequency (or
period -- same thing really). No way. It's not possible. Whether
someone tells the frequency directly, or the synth translates some
abstraction back into a frequency, it _must_ have that freq.

I think what you're arguing is that you don't want to show a freq to
an enduser. Fine. You don't have to (and you _shouldn't). You take
the frequency and translate it to a MIDI note (using the chart shown
above), or more appropriately for a musician, translate it to a pitch
name such as C#4 (or draw that note on a manuscript). The fact that
the /SYNTH/NOTE/ON message I propose specifies freq has no
bearing whatsoever upon what manner you present that info to an
enduser. (But for musicians,_ do_ translate it into a note name. Be
nice to your musician friends).


More information about the OSC_dev mailing list