//
// MIDI and waveform look-up tables
//
// Author: P.J. Drongowski
// Date: 6 May 2015
// Version: 1.0
//
// Copyright (c) 2015 Paul J. Drongowski
// This is indexed by MIDI note number (0 to 127). Each entry contains
// two 4-bit packed values:
// Low nibble: Waveform step size (by octave) encoded
// 0 -> 1 step
// 1 -> 2 steps Software must add one to the encoded value
// 3 -> 4 steps to obtain the correct step size. The encoding lets
// 7 -> 8 steps us fit the range [1:16] into 4 bits.
// 15 -> 16 steps
// High nibble: Pitch waveform index
// C 0 E 4 Ab 8
// Db 1 F 5 A 9
// D 2 Gb 6 Bb 10
// Eb 3 G 7 B 11
#define N(n,s) ((n<<4)|s)
prog_uchar PROGMEM MidiNotes[] = {
N(0,0),N(1,0),N(2,0),N(3,0),N(4,0),N(5,0), // 0:11
N(6,0),N(7,0),N(8,0),N(9,0),N(10,0),N(11,0),
N(0,0),N(1,0),N(2,0),N(3,0),N(4,0),N(5,0), // 12:23 C0:B0
N(6,0),N(7,0),N(8,0),N(9,0),N(10,0),N(11,0),
N(0,0),N(1,0),N(2,0),N(3,0),N(4,0),N(5,0), // 24:35 C1:B1
N(6,0),N(7,0),N(8,0),N(9,0),N(10,0),N(11,0),
N(0,0),N(1,0),N(2,0),N(3,0),N(4,0),N(5,0), // 36:47 C2:B2
N(6,0),N(7,0),N(8,0),N(9,0),N(10,0),N(11,0),
N(0,0),N(1,0),N(2,0),N(3,0),N(4,0),N(5,0), // 48:59 C3:B3
N(6,0),N(7,0),N(8,0),N(9,0),N(10,0),N(11,0),
N(0,1),N(1,1),N(2,1),N(3,1),N(4,1),N(5,1), // 60:71 C4:B4
N(6,1),N(7,1),N(8,1),N(9,1),N(10,1),N(11,1),
N(0,3),N(1,3),N(2,3),N(3,3),N(4,3),N(5,3), // 72:83 C5:B5
N(6,3),N(7,3),N(8,3),N(9,3),N(10,3),N(11,3),
N(0,7),N(1,7),N(2,7),N(3,7),N(4,7),N(5,7), // 84:95 C6:B6
N(6,7),N(7,7),N(8,7),N(9,7),N(10,7),N(11,7),
N(0,15),N(1,15),N(2,15),N(3,15),N(4,15),N(5,15), // 96:107 C7:B7
N(6,15),N(7,15),N(8,15),N(9,15),N(10,15),N(11,15),
N(0,15),N(1,15),N(2,15),N(3,15),N(4,15),N(5,15), // 108:119 C8:B8
N(6,15),N(7,15),N(8,15),N(9,15),N(10,15),N(11,15),
N(0,15),N(1,15),N(2,15),N(3,15),N(4,15),N(5,15), // 120:127 C9:B9
N(6,15),N(7,15)
} ;
// C 0 E 4 Ab 8
// Db 1 F 5 A 9
// D 2 Gb 6 Bb 10
// Eb 3 G 7 B 11
//
// Farfisa-type single cycle wave information tables
//
// Number of samples in each waveform
prog_int16_t PROGMEM FarfNumOfSamples[] = {
Farf_C3_Num,
Farf_Db3_Num,
Farf_D3_Num,
Farf_Eb3_Num,
Farf_E3_Num,
Farf_F3_Num,
Farf_Gb3_Num,
Farf_G3_Num,
Farf_Ab3_Num,
Farf_A3_Num,
Farf_Bb3_Num,
Farf_B3_Num,
} ;
// Base address of each waveform
PROGMEM const prog_int16_t* FarfWaves[] = {
Farf_C3,
Farf_Db3,
Farf_D3,
Farf_Eb3,
Farf_E3,
Farf_F3,
Farf_Gb3,
Farf_G3,
Farf_Ab3,
Farf_A3,
Farf_Bb3,
Farf_B3,
} ;
//
// Vox-type single cycle wave information tables
//
// Number of samples in each waveform
prog_int16_t PROGMEM VoxNumOfSamples[] = {
Vox_C3_Num,
Vox_Db3_Num,
Vox_D3_Num,
Vox_Eb3_Num,
Vox_E3_Num,
Vox_F3_Num,
Vox_Gb3_Num,
Vox_G3_Num,
Vox_Ab3_Num,
Vox_A3_Num,
Vox_Bb3_Num,
Vox_B3_Num,
} ;
// Base address of each waveform
PROGMEM const prog_int16_t* VoxWaves[] = {
Vox_C3,
Vox_Db3,
Vox_D3,
Vox_Eb3,
Vox_E3,
Vox_F3,
Vox_Gb3,
Vox_G3,
Vox_Ab3,
Vox_A3,
Vox_Bb3,
Vox_B3,
} ;