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

Reply via email to