[linux-audio-dev] XAP: 12t keyboard + pitch bend example

David Olofson david at olofson.net
Fri Dec 13 14:35:01 UTC 2002


Someone suggested that it would be impossible to map the 12 tones 
onto the white keys of a keyoard, and still get correct pitch bend 
handling. Well, here's a solution:

The MIDI converter/driver:
	This will have to make pitch bend available as a
	separate control output from pitch. This does *not*
	mean we have to apply pitch bend later, though!
	Instead, we apply pitch bend to out PITCH output,
	*and* then send pitch bend to the PITCHBEND output.
	So, if you don't care for anything but continous
	pitch, just ignore this feature.

	As to pitch bend range, that is handled entirely
	by the converter/driver; the bend output is in the
	same units as the pitch output.

	With NOTEPITCH:
		NOTEPITCH is in 1.0/note
		PITCHBEND is in 1.0/note

		PITCHBEND = (midi_bend - 8192) * midi_range * (1.0/8192.0);
		NOTEPITCH = midi_pitch + PITCHBEND;

	Without NOTEPITCH:
		PITCH is in (1/12)/note
		PITCHBEND is in (1/12)/note

		PITCHBEND = (midi_bend - 8192) * midi_range * (1.0/8192.0);
		PITCH = midi_pitch + PITCHBEND;
		PITCHBEND *= 1.0/12.0;
		PITCH *= 1.0/12.0;


The keyboard remapper:
	This one will have inputs for both pitch and pitch
	bend controls, since it needs to be able to remove
	the bend and then reapply it later. remap_lut[] is
	simply a table that "returns" the desired pitch for
	each key in the scale. (Obviously, you'll have to
	add a conditional to ignore the black keys, if you
	don't want to map them to anything.)

	With NOTEPITCH:
		int note = (int)(NOTEPITCH - PITCHBEND);
		NOTEPITCH = remap_lut[note] + PITCHBEND;

	Without NOTEPITCH:
		int note = (int)((NOTEPITCH - PITCHBEND)*12.0);
		NOTEPITCH = remap_lut[note] + PITCHBEND;


//David Olofson - Programmer, Composer, Open Source Advocate

.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`---------------------------> http://olofson.net/audiality -'
.- M A I A -------------------------------------------------.
|    The Multimedia Application Integration Architecture    |
`----------------------------> http://www.linuxdj.com/maia -'
   --- http://olofson.net --- http://www.reologica.se ---



More information about the Linux-audio-dev mailing list