{{ exp017.spin }} CON _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 OBJ Num : "Numbers" TV : "TV_Terminal" midiIn : "MidiIn03" midiOut : "MidiOut01" v : "AudioOut04" VAR byte aa,ga,gp,vp,vr,f1,f2,f3,f4,na,nf,fa,ff byte jj { aa aspiration amplitude ga glottal amplitude gp glottal pitch vp vibrato pitch vr vibrato rate f1 formant1 frequency f2 formant2 frequency f3 formant3 frequency f4 formant4 frequency na nasal amplitude nf nasal frequency fa frication amplitude ff frication frequency } PUB Main | dummy Num.Init TV.Start(12) TV.Str(string("Audio_output_Cog =")) dummy := v.start(@aa, 10, 11) TV.Str(Num.ToStr(dummy, Num#DEC)) TV.Str(string(", MIDI_input_Cog =")) dummy := midiIn.start(7) TV.Str(Num.ToStr(dummy, Num#DEC)) TV.Str(string(", MIDI_output_Cog =")) dummy := midiOut.start(6) TV.Str(Num.ToStr(dummy, Num#DEC)) repeat dummy := midiIn.event if dummy <> -1 midiOut.fifoset(dummy) TV.Str(Num.ToStr(dummy, Num#HEX7)) if dummy == $903064 jj := 19 setformants(550,1750,2400,3400) setnasal(2000) aa := 5 ga := 100 gp := 60 na := 5 fa := 5 v.change elseif dummy == $903000 aa := 0 ga := 0 na := 0 fa := 0 v.change elseif (dummy & $FFFF00) == $B00000 aa := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00100 ga := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00200 gp := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00300 vp := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00400 vr := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00500 f1 := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00600 f2 := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00700 f3 := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00800 f4 := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00900 na := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00A00 nf := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00B00 fa := (dummy & $00007F) << 1 v.change elseif (dummy & $FFFF00) == $B00C00 ff := (dummy & $00007F) << 1 v.change PRI setformants(sf1,sf2,sf3,sf4) f1 := (sf1 + jj/2) / jj <# 255 f2 := (sf2 + jj/2) / jj <# 255 f3 := (sf3 + jj/2) / jj <# 255 f4 := (sf4 + jj/2) / jj <# 255 PRI setnasal(f) nf := (f + jj/2) / jj <# 255 DAT ' byte aa,ga,gp,vp,vr,f1,q1,f2,q2,f3,q3,f4,q4,fn,qn,fa,ff note byte 0,2,4,5,7,9,11,12,11,9,7,5,4,2,0,0 s1 byte '0,0,0,0,0,670/jj,qx1,1033/jj,qx2,2842/jj,qx3,3933/19,qx4,0,0,0,0,0,0 s2 byte 40,000,100,0,0,0/16,2300/16,3000/16,3500/16,255,2000/16,0,0,0 s3 byte 20,200,100,0,0,250/16,2300/16,3000/16,3500/16,0,0,0,0,0 s4 byte 20,200,100,0,0,250/16,2300/16,3000/16,3500/16,0,0,0,0,0 s5 byte 40,200,100,5,20,700/16,1800/16,2550/16,3500/16,0,0,0,0,0 s6 byte 00,000,100,0,0,425/16,1000/16,2400/16,3500/16,0,0,0,0,0 ' ee i e a o oh foot boot r l uh f1s long 0280,0450,0550,0700,0775,0575,0425,0275,0560,0560,0700 f2s long 2040,2060,1950,1800,1100,0900,1000,0850,1200,0820,1300 f3s long 3040,2700,2600,2550,2500,2450,2400,2400,1500,2700,2600 f4s long 3600,3570,3400,3400,3500,3500,3500,3500,3050,3600,3100 q1s byte $9A, $9A, $9A, $9A, $9A, $9A, $9A, $9A, $9A, $9A, $98 q2s byte $98, $98, $98, $98, $98, $98, $98, $98, $98, $98, $96 q3s byte $94, $94, $94, $94, $94, $94, $94, $94, $94, $94, $94 q4s byte $92, $92, $92, $92, $92, $92, $92, $92, $92, $92, $90