; Written by Aaron Krister Johnson, 2009 ; based on code by Ian McCurdy, 2006 ;YOU MAY NEED TO CHANGE THE DEVICE NUMBER AFTER THE MIDI INPUT FLAG (-M) -+rtaudio=jack -+rtmidi=alsa -Mhw:1,0 -odac -dm0 ;-Mhw:1,0 sr = 44100 ksmps = 100 nchnls = 2 ;FLTK INTERFACE CODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; LABEL | WIDTH | HEIGHT | X | Y FLpanel "2 Phase Modulators, with envelopes", 518, 560, 0, 0 ;PRESETS ; FLBUTBANK TYPE | NUMX | NUMY | WIDTH | HEIGHT | X | Y | IOPCODE | P1 | P2 | P3 gkGet, ihGet FLbutBank 12, 6, 1, 300, 60, 195,455, 0, 503, 0, 0 ; ON | OFF | TYPE | WIDTH | HEIGHT | X | Y | OPCODE | INS | STARTTIM | IDUR gkloadbank, ihloadbank FLbutton "Load Bank", 1, 0, 11, 80, 30, 15, 455, 0, 501, 0, 0 gksavebank, ihsavebank FLbutton "Save Bank", 1, 0, 11, 80, 30, 15, 485, 0, 502, 0, 0 gksavesnap, ihsavesnap FLbutton "Sv. Preset", 1, 0, 11, 100, 30, 95, 455, 0, 500, 0, 0 ;COUNTERS MIN | MAX | STEP1 | STEP2 | TYPE | WIDTH | HEIGHT | POS_X | POS_Y | IOPCODE gkstore,ihstore FLcount "Index", 0, 5, 1, 5, 21, 100, 30, 95, 485, -1 ;GENERAL_TEXT_SETTINGS SIZE | FONT | ALIGN | RED | GREEN | BLUE FLlabel 13, 1, 3, 0, 0, 0 ;VALUE DISPLAY BOXES WIDTH | HEIGHT | X | Y idndxatt FLvalue " ", 50, 18, 24, 224 idndxdec FLvalue " ", 50, 18, 79, 224 idndxslev FLvalue " ", 50, 18, 134, 224 idndxrel FLvalue " ", 50, 18, 189, 224 idndxatt2 FLvalue " ", 50, 18, 279, 224 idndxdec2 FLvalue " ", 50, 18, 334, 224 idndxslev2 FLvalue " ", 50, 18, 389, 224 idndxrel2 FLvalue " ", 50, 18, 444, 224 idampatt FLvalue " ", 50, 18, 24, 314 idampdec FLvalue " ", 50, 18, 79, 314 idampslev FLvalue " ", 50, 18, 134, 314 idamprel FLvalue " ", 50, 18, 189, 314 idcutoff FLvalue " ", 50, 18, 79, 403 idreson FLvalue " ", 50, 18, 134, 403 idpan FLvalue " ", 50, 18, 334, 403 idchorus FLvalue " ", 50, 18, 389, 403 ;KNOBS MIN | MAX | EXP | TYPE | DISP | WIDTH | X | Y gkndxatt, gihndxatt FLknob "Attack", .001, 8, 0, 1, idndxatt, 40, 25, 164 gkndxdec, gihndxdec FLknob "Decay", 0, 15, 0, 1, idndxdec, 40, 80, 164 gkndxslev,gihndxslev FLknob "Sustain", 0, 1, 0, 1, idndxslev, 40, 135, 164 gkndxrel, gihndxrel FLknob "Release", 0, 15, 0, 1, idndxrel, 40, 190, 164 gkndxatt2, gihndxatt2 FLknob "Attack", .001, 8, 0, 1, idndxatt2, 40, 280, 164 gkndxdec2, gihndxdec2 FLknob "Decay", 0, 15, 0, 1, idndxdec2, 40, 335, 164 gkndxslev2,gihndxslev2 FLknob "Sustain", 0, 1, 0, 1, idndxslev2, 40, 390, 164 gkndxrel2, gihndxrel2 FLknob "Release", 0, 15, 0, 1, idndxrel2, 40, 445, 164 gkampatt, gihampatt FLknob "Attack", .001, 8, 0, 1, idampatt, 40, 25, 254 gkampdec, gihampdec FLknob "Decay", 0, 15, 0, 1, idampdec, 40, 80, 254 gkampslev,gihampslev FLknob "Sustain", 0, 1, 0, 1, idampslev, 40, 135, 254 gkamprel, gihamprel FLknob "Release", 0, 15, 0, 1, idamprel, 40, 190, 254 gkcutoff, gihcutoff FLknob "Cutoff", 0, 8000, 0, 1, idcutoff, 40, 80, 342 gkreson, gihreson FLknob "Q", 1, 100, 0, 1, idreson, 40, 135, 342 gkpan, gihpan FLknob "Pan", 0, 1, 0, 1, idpan, 40, 335, 342 gkchorus, gihchorus FLknob "Chorus", 0, 1, 0, 1, idchorus, 40, 390, 342 ;VALUE BOXES MIN | MAX | STEP | TYPE | WIDTH | HEIGHT | X | Y gkmodratio, gihmodratio FLtext " Mod ratio 1", .005, 20, .001, 3, 55, 20, 25, 30 gkmodratio2, gihmodratio2 FLtext " Mod ratio 2", .005, 20, .001, 3, 55, 20, 279, 30 gkindex, gihindex FLtext " Mod index 1", .005, 20, .001, 3, 55, 20, 25, 75 gkindex2, gihindex2 FLtext " Mod index 2", .005, 20, .001, 3, 55, 20, 279, 75 ;;; align text FLsetAlign 5, gihmodratio FLsetAlign 5, gihmodratio2 FLsetAlign 5, gihindex FLsetAlign 5, gihindex2 ;TEXT BOXES TYPE | FONT | SIZE | WIDTH | HEIGHT | X | Y ih FLbox "Index 1 envelope ", 1, 1, 14, 170, 30, 40, 130 ih FLbox "Index 2 envelope", 1, 1, 14, 170, 30, 297, 130 ih FLbox "<--- Amp. envelope", 1, 1, 14, 170, 30, 250, 266 ih FLbox "Presets:", 1, 1, 12, 100, 15, 250, 435 ;SET INITIAL VALUES VALUE | HANDLE FLsetVal_i 3, gihindex FLsetVal_i 2, gihindex2 FLsetVal_i 1, gihmodratio FLsetVal_i 2, gihmodratio2 FLsetVal_i .002, gihndxatt FLsetVal_i 5, gihndxdec FLsetVal_i 0, gihndxslev FLsetVal_i .1, gihndxrel FLsetVal_i .002, gihndxatt2 FLsetVal_i 5, gihndxdec2 FLsetVal_i 0, gihndxslev2 FLsetVal_i .1, gihndxrel2 FLsetVal_i .002, gihampatt FLsetVal_i 6, gihampdec FLsetVal_i 0, gihampslev FLsetVal_i .1, gihamprel FLsetVal_i 6000, gihcutoff FLsetVal_i 1, gihreson FLsetVal_i .5, gihpan FLsetVal_i .333, gihchorus FLpanel_end FLrun ;RUN THE FLTK WIDGET THREAD ;END OF FLTK INTERFACE CODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; instr 1 ;FM (PM) INSTRUMENT icps cpsmidi ;READ NOTE INFORMATION FROM LIVE MIDI INPUT (CREATE A VARIABLE 'icps' BASED ON RECEIVED NOTE INFORMATION) iamp ampmidi 1 ;READ VELOCITY INFORMATION FROM LIVE MIDI INPUT (CREATE A VARIABLE 'iamp' BASED ON RECEIVED VELOCITY INFORMATION) i1div2pi = 0.1592 ivol = 7000 ipanR = i(gkpan) ipanL = 1-ipanR kpeakdeviation = iamp * gkindex * i1div2pi kpeakdeviation2 = iamp * gkindex2 * i1div2pi ;;; ENVELOPES kndxenv madsr i(gkndxatt), i(gkndxdec), i(gkndxslev) + .0000001, i(gkndxrel) ;LINE SEGMENT ENVELOPE WITH MIDI RELEASE MECHANISM kndxenv2 madsr i(gkndxatt2), i(gkndxdec2), i(gkndxslev2) + .0000001, i(gkndxrel2) ;LINE SEGMENT ENVELOPE WITH MIDI RELEASE MECHANISM kampenv madsr i(gkampatt), i(gkampdec), i(gkampslev) + .0000001, i(gkamprel) ;; STEREO "CHROUS" ENRICHMENT USING JITTER kjitL jitter i(gkchorus)*3, 2, 5.3 kjitR jitter i(gkchorus)*3, 1.5, 5 ;;; MODULATORS aModulator oscil kpeakdeviation * kndxenv, icps * gkmodratio, 1 aModulator2 oscil kpeakdeviation2 * kndxenv2 , icps * gkmodratio2, 1 aCarrierL phasor icps + kjitL aCarrierR phasor icps + kjitR aCarrierL table aCarrierL + aModulator + aModulator2, 1, 1, 0, 1 aCarrierR table aCarrierR + aModulator + aModulator2, 1, 1, 0, 1 aSigL = aCarrierL * iamp * kampenv aSigR = aCarrierR * iamp * kampenv aFilterL bqrez aSigL, gkcutoff, gkreson aFilterR bqrez aSigR, gkcutoff, gkreson aFilterL balance aFilterL, aSigL aFilterR balance aFilterR, aSigR outs aFilterL * ivol * ipanL, aFilterR * ivol * ipanR endin instr 500 inumsnap, inumval FLsetsnap i(gkstore) print inumsnap, inumval endin instr 501 FLloadsnap "phase_mod.snap" endin instr 502 FLsavesnap "phase_mod.snap" endin instr 503 inumel FLgetsnap i(gkGet) FLsetVal_i i(gkmodratio), gihmodratio FLsetVal_i i(gkmodratio2), gihmodratio2 endin f 1 0 65537 10 1 f 0 9000