' ========================================================================= ' ' File....... MIDI_Notes.BS2 ' Purpose.... ' Author..... Jon Williams -- Parallax, Inc. ' E-mail..... jwilliams@parallax.com ' Started.... ' Updated.... 30 JUL 2005 ' ' {$STAMP BS2} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- NoteCtrl PIN 0 ' pot inputs OctCtrl PIN 1 MidiOut PIN 15 ' -----[ Constants ]------------------------------------------------------- #SELECT $STAMP #CASE BS2, BS2E, BS2PE T1200 CON 813 T2400 CON 396 T4800 CON 188 T9600 CON 84 T19K2 CON 32 TMidi CON 12 T38K4 CON 6 #CASE BS2SX, BS2P T1200 CON 2063 T2400 CON 1021 T4800 CON 500 T9600 CON 240 T19K2 CON 110 TMidi CON 60 T38K4 CON 45 #CASE BS2PX T1200 CON 3313 T2400 CON 1646 T4800 CON 813 T9600 CON 396 T19K2 CON 188 TMidi CON 108 T38K4 CON 84 #ENDSELECT SevenBit CON $2000 Inverted CON $4000 Open CON $8000 Baud CON TMidi + Open NoteOn CON $90 ' -----[ Variables ]------------------------------------------------------- result VAR Word ' raw pot reading note VAR Byte ' note, 0 (C) to 11 (B) octave VAR Byte ' octave noteOut VAR Byte velocity VAR Byte ' -----[ EEPROM Data ]----------------------------------------------------- ' Note table derived from: ' -- http://www.elby-designs.com/asm-2/documents/asm2-manual.pdf ' -- lowest octave is -1 ' -- highest octave is 9 ' C C# D D# E F F# G G# A A# B ' Midi_Notes DATA 000,001,002,003,004,005,006,007,008,009,010,011 DATA 012,013,014,015,016,017,018,019,020,021,022,023 DATA 024,025,026,027,028,029,030,031,032,033,034,035 DATA 036,037,038,039,040,041,042,043,044,045,046,047 DATA 048,049,050,051,052,053,054,055,056,057,058,059 DATA 060,061,062,063,064,065,066,067,068,069,070,071 DATA 072,073,074,075,076,077,078,079,080,081,082,083 DATA 084,085,086,087,088,089,090,091,092,093,094,095 DATA 096,097,098,099,100,101,102,103,104,105,106,107 DATA 108,109,110,111,112,113,114,115,116,117,118,119 DATA 120,121,122,123,124,125,126,127,$FF,$FF,$FF,$FF ' -----[ Initialization ]-------------------------------------------------- Reset: velocity = 63 ' mid volume ' -----[ Program Code ]---------------------------------------------------- Main: DO GOSUB Get_Note GOSUB Get_Octave READ (Midi_Notes + (octave * 12) + note), noteOut IF (noteOut <= 127) THEN SEROUT MidiOut, Baud, [NoteOn, noteOut, velocity] PAUSE 100 ENDIF LOOP END ' -----[ Subroutines ]----------------------------------------------------- Get_Note: HIGH NoteCtrl PAUSE 1 RCTIME NoteCtrl, 1, result ' read note pot note = result / 53 ' convert to 0..11 RETURN Get_Octave: HIGH OctCtrl PAUSE 1 RCTIME OctCtrl, 1, result ' read octave pot octave = result / 63 ' convert to 0..10 RETURN