unit Constants; {$MODE objfpc} interface uses fgl; type TIntToIntMap = specialize TFPGMap; TNoteMap = specialize TFPGMap; TNoteToCodeMap = specialize TFPGMap; TNoteToFreqMap = TIntToIntMap; TInstrumentIndex = 1..15; TWaveIndex = 0..15; TRoutineIndex = 0..15; const UGE_FORMAT_VERSION = 7; //HT_GIT_TAG = {$INCLUDE revision.inc} {$ifdef DEVELOPMENT} + '-DEBUG'{$ENDIF}; SYM_ROW = 'row'; SYM_TICK = 'tick'; SYM_CURRENT_ORDER = 'current_order'; SYM_NEXT_ORDER = 'next_order'; SYM_ROW_BREAK = 'row_break'; SYM_TICKS_PER_ROW = 'ticks_per_row'; SYM_LOOP_ORDER = 'loop_order'; SYM_SINGLE_STEPPING = 'single_stepping'; SYM_SINGLE_STEP_STOPPED = 'single_step_stopped'; SYM_SONG_DESCRIPTOR = 'song_descriptor'; SYM_HALT_INSTR = 'instrument'; SYM_HALT_PERIOD = 'channel_period'; SYM_HALT_SUBPATTERN = 'subpattern'; SYM_HALT_START = 'start_ch'; SYM_HALT_RUNNING = 'running_ch'; SYM_HALT_WAVEFORMS = 'waveforms'; SYM_HALT_NOTE = 'channel_note'; // Sound controller registers NR10 = $FF10; NR11 = $FF11; NR12 = $FF12; NR13 = $FF13; NR14 = $FF14; NR21 = $FF16; NR22 = $FF17; NR23 = $FF18; NR24 = $FF19; NR30 = $FF1A; NR31 = $FF1B; NR32 = $FF1C; NR33 = $FF1D; NR34 = $FF1E; NR41 = $FF20; NR42 = $FF21; NR43 = $FF22; NR44 = $FF23; AUD3_WAVE_RAM = $FF30; LOWEST_NOTE = 0; C_3 = 0; Cs3 = 1; D_3 = 2; Ds3 = 3; E_3 = 4; F_3 = 5; Fs3 = 6; G_3 = 7; Gs3 = 8; A_3 = 9; As3 = 10; B_3 = 11; C_4 = 12; Cs4 = 13; D_4 = 14; Ds4 = 15; E_4 = 16; F_4 = 17; Fs4 = 18; G_4 = 19; Gs4 = 20; A_4 = 21; As4 = 22; B_4 = 23; C_5 = 24; Cs5 = 25; D_5 = 26; Ds5 = 27; E_5 = 28; F_5 = 29; Fs5 = 30; G_5 = 31; Gs5 = 32; A_5 = 33; As5 = 34; B_5 = 35; C_6 = 36; Cs6 = 37; D_6 = 38; Ds6 = 39; E_6 = 40; F_6 = 41; Fs6 = 42; G_6 = 43; Gs6 = 44; A_6 = 45; As6 = 46; B_6 = 47; C_7 = 48; Cs7 = 49; D_7 = 50; Ds7 = 51; E_7 = 52; F_7 = 53; Fs7 = 54; G_7 = 55; Gs7 = 56; A_7 = 57; As7 = 58; B_7 = 59; C_8 = 60; Cs8 = 61; D_8 = 62; Ds8 = 63; E_8 = 64; F_8 = 65; Fs8 = 66; G_8 = 67; Gs8 = 68; A_8 = 69; As8 = 70; B_8 = 71; HIGHEST_NOTE = 71; MIDDLE_NOTE = ((HIGHEST_NOTE - LOWEST_NOTE) div 2)+1; LAST_NOTE = 72; NO_NOTE = 90; var NoteMap, NoteToDriverMap, NoteToCMap: TNoteMap; NotesToFreqs: TNoteToFreqMap; NoteToCodeMap: TNoteToCodeMap; Ch4FreqToNoteCodeMap: TIntToIntMap; ConfDir: String = '.'; // Directory for configuration (options.ini) CacheDir: String = '.'; // Directory for crash backups, intermediate assembled files RuntimeDir: String = '.'; // Directory for runtime files (fonts, halt.gb, hUGEDriver) function NoteCodeToString(NoteCode: Integer): String; implementation function NoteCodeToString(NoteCode: Integer): String; begin if not NoteMap.TryGetData(NoteCode, Result) then Result := '...'; end; begin NoteMap := TNoteMap.Create; NoteToDriverMap := TNoteMap.Create; NoteToCMap := TNoteMap.Create; NotesToFreqs := TNoteToFreqMap.Create; NoteToCodeMap := TNoteToCodeMap.Create; Ch4FreqToNoteCodeMap := TIntToIntMap.Create; {%Region Notes->Freqs} NotesToFreqs.Add(C_3, 44); NotesToFreqs.Add(CS3, 156); NotesToFreqs.Add(D_3, 262); NotesToFreqs.Add(DS3, 363); NotesToFreqs.Add(E_3, 457); NotesToFreqs.Add(F_3, 547); NotesToFreqs.Add(FS3, 631); NotesToFreqs.Add(G_3, 710); NotesToFreqs.Add(GS3, 786); NotesToFreqs.Add(A_3, 854); NotesToFreqs.Add(AS3, 923); NotesToFreqs.Add(B_3, 986); NotesToFreqs.Add(C_4, 1046); NotesToFreqs.Add(CS4, 1102); NotesToFreqs.Add(D_4, 1155); NotesToFreqs.Add(DS4, 1205); NotesToFreqs.Add(E_4, 1253); NotesToFreqs.Add(F_4, 1297); NotesToFreqs.Add(FS4, 1339); NotesToFreqs.Add(G_4, 1379); NotesToFreqs.Add(GS4, 1417); NotesToFreqs.Add(A_4, 1452); NotesToFreqs.Add(AS4, 1486); NotesToFreqs.Add(B_4, 1517); NotesToFreqs.Add(C_5, 1546); NotesToFreqs.Add(CS5, 1575); NotesToFreqs.Add(D_5, 1602); NotesToFreqs.Add(DS5, 1627); NotesToFreqs.Add(E_5, 1650); NotesToFreqs.Add(F_5, 1673); NotesToFreqs.Add(FS5, 1694); NotesToFreqs.Add(G_5, 1714); NotesToFreqs.Add(GS5, 1732); NotesToFreqs.Add(A_5, 1750); NotesToFreqs.Add(AS5, 1767); NotesToFreqs.Add(B_5, 1783); NotesToFreqs.Add(C_6, 1798); NotesToFreqs.Add(CS6, 1812); NotesToFreqs.Add(D_6, 1825); NotesToFreqs.Add(DS6, 1837); NotesToFreqs.Add(E_6, 1849); NotesToFreqs.Add(F_6, 1860); NotesToFreqs.Add(FS6, 1871); NotesToFreqs.Add(G_6, 1881); NotesToFreqs.Add(GS6, 1890); NotesToFreqs.Add(A_6, 1899); NotesToFreqs.Add(AS6, 1907); NotesToFreqs.Add(B_6, 1915); NotesToFreqs.Add(C_7, 1923); NotesToFreqs.Add(CS7, 1930); NotesToFreqs.Add(D_7, 1936); NotesToFreqs.Add(DS7, 1943); NotesToFreqs.Add(E_7, 1949); NotesToFreqs.Add(F_7, 1954); NotesToFreqs.Add(FS7, 1959); NotesToFreqs.Add(G_7, 1964); NotesToFreqs.Add(GS7, 1969); NotesToFreqs.Add(A_7, 1974); NotesToFreqs.Add(AS7, 1978); NotesToFreqs.Add(B_7, 1982); NotesToFreqs.Add(C_8, 1985); NotesToFreqs.Add(CS8, 1988); NotesToFreqs.Add(D_8, 1992); NotesToFreqs.Add(DS8, 1995); NotesToFreqs.Add(E_8, 1998); NotesToFreqs.Add(F_8, 2001); NotesToFreqs.Add(FS8, 2004); NotesToFreqs.Add(G_8, 2006); NotesToFreqs.Add(GS8, 2009); NotesToFreqs.Add(A_8, 2011); NotesToFreqs.Add(AS8, 2013); NotesToFreqs.Add(B_8, 2015); {%Endregion} {%Region Note names -> Notes} NoteToCodeMap.add('C-3', C_3); NoteToCodeMap.add('C#3', Cs3); NoteToCodeMap.add('D-3', D_3); NoteToCodeMap.add('D#3', Ds3); NoteToCodeMap.add('E-3', E_3); NoteToCodeMap.add('F-3', F_3); NoteToCodeMap.add('F#3', Fs3); NoteToCodeMap.add('G-3', G_3); NoteToCodeMap.add('G#3', Gs3); NoteToCodeMap.add('A-3', A_3); NoteToCodeMap.add('A#3', As3); NoteToCodeMap.add('B-3', B_3); NoteToCodeMap.add('C-4', C_4); NoteToCodeMap.add('C#4', Cs4); NoteToCodeMap.add('D-4', D_4); NoteToCodeMap.add('D#4', Ds4); NoteToCodeMap.add('E-4', E_4); NoteToCodeMap.add('F-4', F_4); NoteToCodeMap.add('F#4', Fs4); NoteToCodeMap.add('G-4', G_4); NoteToCodeMap.add('G#4', Gs4); NoteToCodeMap.add('A-4', A_4); NoteToCodeMap.add('A#4', As4); NoteToCodeMap.add('B-4', B_4); NoteToCodeMap.add('C-5', C_5); NoteToCodeMap.add('C#5', Cs5); NoteToCodeMap.add('D-5', D_5); NoteToCodeMap.add('D#5', Ds5); NoteToCodeMap.add('E-5', E_5); NoteToCodeMap.add('F-5', F_5); NoteToCodeMap.add('F#5', Fs5); NoteToCodeMap.add('G-5', G_5); NoteToCodeMap.add('G#5', Gs5); NoteToCodeMap.add('A-5', A_5); NoteToCodeMap.add('A#5', As5); NoteToCodeMap.add('B-5', B_5); NoteToCodeMap.add('C-6', C_6); NoteToCodeMap.add('C#6', Cs6); NoteToCodeMap.add('D-6', D_6); NoteToCodeMap.add('D#6', Ds6); NoteToCodeMap.add('E-6', E_6); NoteToCodeMap.add('F-6', F_6); NoteToCodeMap.add('F#6', Fs6); NoteToCodeMap.add('G-6', G_6); NoteToCodeMap.add('G#6', Gs6); NoteToCodeMap.add('A-6', A_6); NoteToCodeMap.add('A#6', As6); NoteToCodeMap.add('B-6', B_6); NoteToCodeMap.add('C-7', C_7); NoteToCodeMap.add('C#7', Cs7); NoteToCodeMap.add('D-7', D_7); NoteToCodeMap.add('D#7', Ds7); NoteToCodeMap.add('E-7', E_7); NoteToCodeMap.add('F-7', F_7); NoteToCodeMap.add('F#7', Fs7); NoteToCodeMap.add('G-7', G_7); NoteToCodeMap.add('G#7', Gs7); NoteToCodeMap.add('A-7', A_7); NoteToCodeMap.add('A#7', As7); NoteToCodeMap.add('B-7', B_7); NoteToCodeMap.add('C-8', C_8); NoteToCodeMap.add('C#8', Cs8); NoteToCodeMap.add('D-8', D_8); NoteToCodeMap.add('D#8', Ds8); NoteToCodeMap.add('E-8', E_8); NoteToCodeMap.add('F-8', F_8); NoteToCodeMap.add('F#8', Fs8); NoteToCodeMap.add('G-8', G_8); NoteToCodeMap.add('G#8', Gs8); NoteToCodeMap.add('A-8', A_8); NoteToCodeMap.add('A#8', As8); NoteToCodeMap.add('B-8', B_8); {%EndRegion} {%Region Notes -> Note names} NoteMap.add(C_3, 'C-3'); NoteMap.add(Cs3, 'C#3'); NoteMap.add(D_3, 'D-3'); NoteMap.add(Ds3, 'D#3'); NoteMap.add(E_3, 'E-3'); NoteMap.add(F_3, 'F-3'); NoteMap.add(Fs3, 'F#3'); NoteMap.add(G_3, 'G-3'); NoteMap.add(Gs3, 'G#3'); NoteMap.add(A_3, 'A-3'); NoteMap.add(As3, 'A#3'); NoteMap.add(B_3, 'B-3'); NoteMap.add(C_4, 'C-4'); NoteMap.add(Cs4, 'C#4'); NoteMap.add(D_4, 'D-4'); NoteMap.add(Ds4, 'D#4'); NoteMap.add(E_4, 'E-4'); NoteMap.add(F_4, 'F-4'); NoteMap.add(Fs4, 'F#4'); NoteMap.add(G_4, 'G-4'); NoteMap.add(Gs4, 'G#4'); NoteMap.add(A_4, 'A-4'); NoteMap.add(As4, 'A#4'); NoteMap.add(B_4, 'B-4'); NoteMap.add(C_5, 'C-5'); NoteMap.add(Cs5, 'C#5'); NoteMap.add(D_5, 'D-5'); NoteMap.add(Ds5, 'D#5'); NoteMap.add(E_5, 'E-5'); NoteMap.add(F_5, 'F-5'); NoteMap.add(Fs5, 'F#5'); NoteMap.add(G_5, 'G-5'); NoteMap.add(Gs5, 'G#5'); NoteMap.add(A_5, 'A-5'); NoteMap.add(As5, 'A#5'); NoteMap.add(B_5, 'B-5'); NoteMap.add(C_6, 'C-6'); NoteMap.add(Cs6, 'C#6'); NoteMap.add(D_6, 'D-6'); NoteMap.add(Ds6, 'D#6'); NoteMap.add(E_6, 'E-6'); NoteMap.add(F_6, 'F-6'); NoteMap.add(Fs6, 'F#6'); NoteMap.add(G_6, 'G-6'); NoteMap.add(Gs6, 'G#6'); NoteMap.add(A_6, 'A-6'); NoteMap.add(As6, 'A#6'); NoteMap.add(B_6, 'B-6'); NoteMap.add(C_7, 'C-7'); NoteMap.add(Cs7, 'C#7'); NoteMap.add(D_7, 'D-7'); NoteMap.add(Ds7, 'D#7'); NoteMap.add(E_7, 'E-7'); NoteMap.add(F_7, 'F-7'); NoteMap.add(Fs7, 'F#7'); NoteMap.add(G_7, 'G-7'); NoteMap.add(Gs7, 'G#7'); NoteMap.add(A_7, 'A-7'); NoteMap.add(As7, 'A#7'); NoteMap.add(B_7, 'B-7'); NoteMap.add(C_8, 'C-8'); NoteMap.add(Cs8, 'C#8'); NoteMap.add(D_8, 'D-8'); NoteMap.add(Ds8, 'D#8'); NoteMap.add(E_8, 'E-8'); NoteMap.add(F_8, 'F-8'); NoteMap.add(Fs8, 'F#8'); NoteMap.add(G_8, 'G-8'); NoteMap.add(Gs8, 'G#8'); NoteMap.add(A_8, 'A-8'); NoteMap.add(As8, 'A#8'); NoteMap.add(B_8, 'B-8'); {%EndRegion} {%Region Notes -> Driver constants} NoteToDriverMap.add(C_3, 'C_3'); NoteToDriverMap.add(Cs3, 'C#3'); NoteToDriverMap.add(D_3, 'D_3'); NoteToDriverMap.add(Ds3, 'D#3'); NoteToDriverMap.add(E_3, 'E_3'); NoteToDriverMap.add(F_3, 'F_3'); NoteToDriverMap.add(Fs3, 'F#3'); NoteToDriverMap.add(G_3, 'G_3'); NoteToDriverMap.add(Gs3, 'G#3'); NoteToDriverMap.add(A_3, 'A_3'); NoteToDriverMap.add(As3, 'A#3'); NoteToDriverMap.add(B_3, 'B_3'); NoteToDriverMap.add(C_4, 'C_4'); NoteToDriverMap.add(Cs4, 'C#4'); NoteToDriverMap.add(D_4, 'D_4'); NoteToDriverMap.add(Ds4, 'D#4'); NoteToDriverMap.add(E_4, 'E_4'); NoteToDriverMap.add(F_4, 'F_4'); NoteToDriverMap.add(Fs4, 'F#4'); NoteToDriverMap.add(G_4, 'G_4'); NoteToDriverMap.add(Gs4, 'G#4'); NoteToDriverMap.add(A_4, 'A_4'); NoteToDriverMap.add(As4, 'A#4'); NoteToDriverMap.add(B_4, 'B_4'); NoteToDriverMap.add(C_5, 'C_5'); NoteToDriverMap.add(Cs5, 'C#5'); NoteToDriverMap.add(D_5, 'D_5'); NoteToDriverMap.add(Ds5, 'D#5'); NoteToDriverMap.add(E_5, 'E_5'); NoteToDriverMap.add(F_5, 'F_5'); NoteToDriverMap.add(Fs5, 'F#5'); NoteToDriverMap.add(G_5, 'G_5'); NoteToDriverMap.add(Gs5, 'G#5'); NoteToDriverMap.add(A_5, 'A_5'); NoteToDriverMap.add(As5, 'A#5'); NoteToDriverMap.add(B_5, 'B_5'); NoteToDriverMap.add(C_6, 'C_6'); NoteToDriverMap.add(Cs6, 'C#6'); NoteToDriverMap.add(D_6, 'D_6'); NoteToDriverMap.add(Ds6, 'D#6'); NoteToDriverMap.add(E_6, 'E_6'); NoteToDriverMap.add(F_6, 'F_6'); NoteToDriverMap.add(Fs6, 'F#6'); NoteToDriverMap.add(G_6, 'G_6'); NoteToDriverMap.add(Gs6, 'G#6'); NoteToDriverMap.add(A_6, 'A_6'); NoteToDriverMap.add(As6, 'A#6'); NoteToDriverMap.add(B_6, 'B_6'); NoteToDriverMap.add(C_7, 'C_7'); NoteToDriverMap.add(Cs7, 'C#7'); NoteToDriverMap.add(D_7, 'D_7'); NoteToDriverMap.add(Ds7, 'D#7'); NoteToDriverMap.add(E_7, 'E_7'); NoteToDriverMap.add(F_7, 'F_7'); NoteToDriverMap.add(Fs7, 'F#7'); NoteToDriverMap.add(G_7, 'G_7'); NoteToDriverMap.add(Gs7, 'G#7'); NoteToDriverMap.add(A_7, 'A_7'); NoteToDriverMap.add(As7, 'A#7'); NoteToDriverMap.add(B_7, 'B_7'); NoteToDriverMap.add(C_8, 'C_8'); NoteToDriverMap.add(Cs8, 'C#8'); NoteToDriverMap.add(D_8, 'D_8'); NoteToDriverMap.add(Ds8, 'D#8'); NoteToDriverMap.add(E_8, 'E_8'); NoteToDriverMap.add(F_8, 'F_8'); NoteToDriverMap.add(Fs8, 'F#8'); NoteToDriverMap.add(G_8, 'G_8'); NoteToDriverMap.add(Gs8, 'G#8'); NoteToDriverMap.add(A_8, 'A_8'); NoteToDriverMap.add(As8, 'A#8'); NoteToDriverMap.add(B_8, 'B_8'); {%EndRegion} {%Region Notes -> C constants} NoteToCMap.add(C_3, 'C_3'); NoteToCMap.add(Cs3, 'Cs3'); NoteToCMap.add(D_3, 'D_3'); NoteToCMap.add(Ds3, 'Ds3'); NoteToCMap.add(E_3, 'E_3'); NoteToCMap.add(F_3, 'F_3'); NoteToCMap.add(Fs3, 'Fs3'); NoteToCMap.add(G_3, 'G_3'); NoteToCMap.add(Gs3, 'Gs3'); NoteToCMap.add(A_3, 'A_3'); NoteToCMap.add(As3, 'As3'); NoteToCMap.add(B_3, 'B_3'); NoteToCMap.add(C_4, 'C_4'); NoteToCMap.add(Cs4, 'Cs4'); NoteToCMap.add(D_4, 'D_4'); NoteToCMap.add(Ds4, 'Ds4'); NoteToCMap.add(E_4, 'E_4'); NoteToCMap.add(F_4, 'F_4'); NoteToCMap.add(Fs4, 'Fs4'); NoteToCMap.add(G_4, 'G_4'); NoteToCMap.add(Gs4, 'Gs4'); NoteToCMap.add(A_4, 'A_4'); NoteToCMap.add(As4, 'As4'); NoteToCMap.add(B_4, 'B_4'); NoteToCMap.add(C_5, 'C_5'); NoteToCMap.add(Cs5, 'Cs5'); NoteToCMap.add(D_5, 'D_5'); NoteToCMap.add(Ds5, 'Ds5'); NoteToCMap.add(E_5, 'E_5'); NoteToCMap.add(F_5, 'F_5'); NoteToCMap.add(Fs5, 'Fs5'); NoteToCMap.add(G_5, 'G_5'); NoteToCMap.add(Gs5, 'Gs5'); NoteToCMap.add(A_5, 'A_5'); NoteToCMap.add(As5, 'As5'); NoteToCMap.add(B_5, 'B_5'); NoteToCMap.add(C_6, 'C_6'); NoteToCMap.add(Cs6, 'Cs6'); NoteToCMap.add(D_6, 'D_6'); NoteToCMap.add(Ds6, 'Ds6'); NoteToCMap.add(E_6, 'E_6'); NoteToCMap.add(F_6, 'F_6'); NoteToCMap.add(Fs6, 'Fs6'); NoteToCMap.add(G_6, 'G_6'); NoteToCMap.add(Gs6, 'Gs6'); NoteToCMap.add(A_6, 'A_6'); NoteToCMap.add(As6, 'As6'); NoteToCMap.add(B_6, 'B_6'); NoteToCMap.add(C_7, 'C_7'); NoteToCMap.add(Cs7, 'Cs7'); NoteToCMap.add(D_7, 'D_7'); NoteToCMap.add(Ds7, 'Ds7'); NoteToCMap.add(E_7, 'E_7'); NoteToCMap.add(F_7, 'F_7'); NoteToCMap.add(Fs7, 'Fs7'); NoteToCMap.add(G_7, 'G_7'); NoteToCMap.add(Gs7, 'Gs7'); NoteToCMap.add(A_7, 'A_7'); NoteToCMap.add(As7, 'As7'); NoteToCMap.add(B_7, 'B_7'); NoteToCMap.add(C_8, 'C_8'); NoteToCMap.add(Cs8, 'Cs8'); NoteToCMap.add(D_8, 'D_8'); NoteToCMap.add(Ds8, 'Ds8'); NoteToCMap.add(E_8, 'E_8'); NoteToCMap.add(F_8, 'F_8'); NoteToCMap.add(Fs8, 'Fs8'); NoteToCMap.add(G_8, 'G_8'); NoteToCMap.add(Gs8, 'Gs8'); NoteToCMap.add(A_8, 'A_8'); NoteToCMap.add(As8, 'As8'); NoteToCMap.add(B_8, 'B_8'); {%EndRegion} {%Region Ch4 Frequency -> Note Code} Ch4FreqToNoteCodeMap.Add(524288, 63); Ch4FreqToNoteCodeMap.Add(262144, 62); Ch4FreqToNoteCodeMap.Add(131072, 61); Ch4FreqToNoteCodeMap.Add(87381, 60); Ch4FreqToNoteCodeMap.Add(65536, 59); Ch4FreqToNoteCodeMap.Add(52428, 58); Ch4FreqToNoteCodeMap.Add(43690, 57); Ch4FreqToNoteCodeMap.Add(37449, 56); Ch4FreqToNoteCodeMap.Add(32768, 55); Ch4FreqToNoteCodeMap.Add(26214, 54); Ch4FreqToNoteCodeMap.Add(21845, 53); Ch4FreqToNoteCodeMap.Add(18724, 52); Ch4FreqToNoteCodeMap.Add(16384, 51); Ch4FreqToNoteCodeMap.Add(13107, 50); Ch4FreqToNoteCodeMap.Add(10922, 49); Ch4FreqToNoteCodeMap.Add(9362, 48); Ch4FreqToNoteCodeMap.Add(8192, 47); Ch4FreqToNoteCodeMap.Add(6553, 46); Ch4FreqToNoteCodeMap.Add(5461, 45); Ch4FreqToNoteCodeMap.Add(4681, 44); Ch4FreqToNoteCodeMap.Add(4096, 43); Ch4FreqToNoteCodeMap.Add(3276, 42); Ch4FreqToNoteCodeMap.Add(2730, 41); Ch4FreqToNoteCodeMap.Add(2340, 40); Ch4FreqToNoteCodeMap.Add(2048, 39); Ch4FreqToNoteCodeMap.Add(1638, 38); Ch4FreqToNoteCodeMap.Add(1365, 37); Ch4FreqToNoteCodeMap.Add(1170, 36); Ch4FreqToNoteCodeMap.Add(1024, 35); Ch4FreqToNoteCodeMap.Add(819, 34); Ch4FreqToNoteCodeMap.Add(682, 33); Ch4FreqToNoteCodeMap.Add(585, 32); Ch4FreqToNoteCodeMap.Add(512, 31); Ch4FreqToNoteCodeMap.Add(409, 30); Ch4FreqToNoteCodeMap.Add(341, 29); Ch4FreqToNoteCodeMap.Add(292, 28); Ch4FreqToNoteCodeMap.Add(256, 27); Ch4FreqToNoteCodeMap.Add(204, 26); Ch4FreqToNoteCodeMap.Add(170, 25); Ch4FreqToNoteCodeMap.Add(146, 24); Ch4FreqToNoteCodeMap.Add(128, 23); Ch4FreqToNoteCodeMap.Add(102, 22); Ch4FreqToNoteCodeMap.Add(85, 21); Ch4FreqToNoteCodeMap.Add(73, 20); Ch4FreqToNoteCodeMap.Add(64, 19); Ch4FreqToNoteCodeMap.Add(51, 18); Ch4FreqToNoteCodeMap.Add(42, 17); Ch4FreqToNoteCodeMap.Add(36, 16); Ch4FreqToNoteCodeMap.Add(32, 15); Ch4FreqToNoteCodeMap.Add(25, 14); Ch4FreqToNoteCodeMap.Add(21, 13); Ch4FreqToNoteCodeMap.Add(18, 12); Ch4FreqToNoteCodeMap.Add(16, 11); Ch4FreqToNoteCodeMap.Add(12, 10); Ch4FreqToNoteCodeMap.Add(10, 9); Ch4FreqToNoteCodeMap.Add(9, 8); Ch4FreqToNoteCodeMap.Add(8, 7); Ch4FreqToNoteCodeMap.Add(6, 6); Ch4FreqToNoteCodeMap.Add(5, 5); Ch4FreqToNoteCodeMap.Add(4, 4); Ch4FreqToNoteCodeMap.Add(4, 3); Ch4FreqToNoteCodeMap.Add(3, 2); Ch4FreqToNoteCodeMap.Add(2, 1); Ch4FreqToNoteCodeMap.Add(2, 0); {%EndRegion} end.