-static unsigned char
-_pitch_to_midi (pitch_t pitch)
-{
- int octave = PITCH_OCTAVE (pitch);
- unsigned char midi_note = 12 * (octave + 1);
-
- switch (PITCH_NAME (pitch)) {
- case PITCH_NAME_C:
- break;
- case PITCH_NAME_D:
- midi_note += 2;
- break;
- case PITCH_NAME_E:
- midi_note += 4;
- break;
- case PITCH_NAME_F:
- midi_note += 5;
- break;
- case PITCH_NAME_G:
- midi_note += 7;
- break;
- case PITCH_NAME_A:
- midi_note += 9;
- break;
- case PITCH_NAME_B:
- midi_note += 11;
- break;
- }
-
- switch (PITCH_ACCIDENTAL (pitch)) {
- case PITCH_ACCIDENTAL_DOUBLE_FLAT:
- midi_note -= 2;
- break;
- case PITCH_ACCIDENTAL_FLAT:
- midi_note -= 1;
- break;
- case PITCH_ACCIDENTAL_NATURAL:
- break;
- case PITCH_ACCIDENTAL_SHARP:
- midi_note += 1;
- break;
- case PITCH_ACCIDENTAL_DOUBLE_SHARP:
- midi_note += 2;
- break;
- }
-
- return midi_note;
-}
-
-/* octave can optionally by NULL */
-static pitch_t
-_midi_to_pitch (unsigned char midi_note)
-{
- int octave = octave = midi_note / 12 - 1;
-
- switch (midi_note % 12)
- {
- default:
- case 0:
- return PITCH_LITERAL (C, NATURAL, octave);
- break;
- case 1:
- return PITCH_LITERAL (C, SHARP, octave);
- break;
- case 2:
- return PITCH_LITERAL (D, NATURAL, octave);
- break;
- case 3:
- return PITCH_LITERAL (D, SHARP, octave);
- break;
- case 4:
- return PITCH_LITERAL (E, NATURAL, octave);
- break;
- case 5:
- return PITCH_LITERAL (F, NATURAL, octave);
- break;
- case 6:
- return PITCH_LITERAL (F, SHARP, octave);
- break;
- case 7:
- return PITCH_LITERAL (G, NATURAL, octave);
- break;
- case 8:
- return PITCH_LITERAL (G, SHARP, octave);
- break;
- case 9:
- return PITCH_LITERAL (A, NATURAL, octave);
- break;
- case 10:
- return PITCH_LITERAL (A, SHARP, octave);
- break;
- case 11:
- return PITCH_LITERAL (B, NATURAL, octave);
- break;
- }
-}
-