' *********************************************************** ' * * ' * Prologos * ' *********************************************************** 'Plot: In this prologue we see the sexual metamorphosis of Faust. ' Two naked actors are connected back to back '17.11.2002: code module creation date. ' Specific hardware: analog holosound setup, with FM ' demodulation on subwoofers. '28.09.2003: further coding '08.01.2005: Bourdonola new implemented. '15.10.2016: HybrLo to be added here! DECLARE FUNCTION Init_Prologos () AS DWORD DECLARE SUB Prologos_Enschede () DECLARE SUB Prologos_Enschede_Stop () DECLARE SUB Prologos_So () DECLARE SUB Prologos_So_UD0 () DECLARE SUB Prologos_So_UD1 () DECLARE SUB Prologos_So_UD2 () DECLARE SUB Prologos_So_UD3 () DECLARE SUB Prologos_Harma () DECLARE SUB Prologos_Bourdonola () DECLARE SUB BOURDONOLA_UD_Motor () DECLARE SUB BOURDONOLA_UD_Light () FUNCTION Init_Prologos () AS DWORD LOCAL i AS DWORD LOCAL m AS ASCIIZ * 30 App.id = %ID_PROLOGOS App.Komposduur = Read_Duration_From_File ($faustini, "Prologos") ' new function in g_file.dll 15.10.2003 'App.komposduur = 360 ' = 6 minutes App.tempo = 60 ButnSW(1).tag0 = "Start" ' start/stop toggle SetDlgItemText gh.Cockpit, %GMT_BUTNSW_ID + 1, ButnSW(1).tag0 ButnSW(1).flag = %False ' reset ButnSW(1).cptr = CODEPTR(ButnSW_FaustStartStop) ' start / stop the running act FOR i = 17 TO 32 RemoveCockpitTask i NEXT i Task(%Prolog).naam = "Enschede" Task(%Prolog).cptr = CODEPTR(Prologos_Enschede) Task(%Prolog).freq = 10 Task(%Prolog).flags = %False TaskEx(%Prolog).Stopcptr = CODEPTR(Prologos_Enschede_Stop) Task(%Prologos_Bourdonola).naam = "Bourdono" Task(%Prologos_Bourdonola).freq = 2 Task(%Prologos_Bourdonola).cptr = CODEPTR(Prologos_Bourdonola) Task(%Prologos_Bourdonola).flags = %Null TaskEX(%Prologos_BOurdonola).StopCptr = CODEPTR(MM_Bourdonola_Off) Task(%Prologos_So).naam = "" Task(%Prologos_So).cptr = CODEPTR(Prologos_So) Task(%Prologos_So).freq = 1 Task(%Prologos_So).flags = %False TaskEX(%Prologos_So).StopCptr = CODEPTR(MM_So_Off) ' use button code in Faust.inc Task(%Prologos_Harma).naam = "" Task(%Prologos_Harma).cptr = CODEPTR(Prologos_Harma) Task(%Prologos_Harma).freq = 1 Task(%Prologos_Harma).flags = %False TaskEX(%Prologos_Harma).StopCptr = CODEPTR(MM_Harma_Off) ' use button code in Faust.inc Task(%Prologos_HybrLo).naam = "HybrLo" Task(%Prologos_HybrLo).freq = 2 Task(%Prologos_HybrLo).cptr = CODEPTR(Prologos_HybrLo) Task(%Prologos_HybrLo).flags = %Null TaskEX(%Prologos_HybrLo).StopCptr = CODEPTR(MM_HybrLo_Off) FaustPatches "prologos" ' also sets the robotports m = "" SendMessage gh.Cockpit, %WM_SETTEXT,0, VARPTR(m) SetDlgItemText gh.Cockpit, %GMT_TITLE, "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR, $gwr SetDlgItemText gh.Cockpit, %GMT_MSG1, "Sexual metamorphosis of Faust" SetDlgItemText gh.Cockpit, %GMT_MSG2, "subsonics" FUNCTION = %True END FUNCTION SUB Prologos_Enschede () ' based on %Prologos_Bourdonola = 60 - voor Enschede toegevoegd. ' uses piano, since we could not transport bourdonola to Enschede. ' %Prolog = 58 ' note speeds for notes 26-62 STATIC slnr AS DWORD STATIC oldnote AS DWORD STATIC oldhnote AS DWORD STATIC cnt AS DWORD IF ISFALSE Task(%prolog).tog THEN DIM TaskParamLabels(2) AS LOCAL ASCIIZ * 8 TaskParamLabels(0) = "Notes" TaskParamLabels(1) = "Speed" TaskParamLabels(2) = "Velo" IF ISFALSE Task(%prolog).hParam THEN MakeTaskParameterDialog %prolog,3,Slider(),0,UDctrl(),TaskParamlabels() END IF IF ISFALSE slnr THEN slnr = TaskEX(%prolog).SliderNumbers(0) ' the second slider is slnr + 1 SendMessage Slider(slnr).h, %TBM_SETPOS,%True, 36 SendMessage Slider(slnr+1).h, %TBM_SETPOS,%True, 64 ' speed SendMessage Slider(slnr+2).h, %TBM_SETPOS,%True, 14 ' velo Slider(slnr).value = 36 Slider(slnr+1).value = 64 Slider(slnr+2).value = 14 END IF oldnote = %False oldhnote = %False cnt = %False Task(%prolog).tog = %True Task(%prolog).freq = 8 EXIT SUB END IF IF ISFALSE oldnote THEN mPlay Piano.channel, MAX(Slider(slnr).value, Piano.lowtes), Slider(slnr+2).value oldnote = MAX(Slider(slnr).value, Piano.lowtes) ELSE mPlay Piano.channel, oldnote, %False oldnote = %False END IF IF (cnt MOD (3 + (RND(1) * 8))) > %False THEN IF ISFALSE oldhnote THEN IF oldnote THEN oldhnote = Harma.lowtes + (oldnote MOD 12) ELSE oldhnote = Harma.lowtes + (RND(1)* 12) END IF mPlay Harma.channel, oldhnote, 127 END IF ELSE IF oldhnote THEN mPlay Harma.channel, oldhnote, %False oldhnote = %False END IF 'incr cnt END IF INCR cnt Task(%prolog).freq = Slider(slnr+1).value / 5 IF Task(%prolog).freq < 0.1 THEN Task(%prolog).freq = 0.1 END SUB SUB Prologos_Enschede_Stop () InstrumallNotesOff Piano InstrumAllNotesOff Harma END SUB SUB Prologos_So () STATIC n AS DWORD STATIC onoff AS DWORD STATIC udnr AS DWORD IF ISFALSE Task(%Prologos_So).tog THEN DIM TaskParamLabels(3) AS LOCAL ASCIIZ*8 ' test voor UD's only Task(%Prologos_So).tempo = 60 TaskParamLabels(0) = "rit" TaskParamLabels(1) = "n=" TaskParamLabels(2) = "vol" TaskParamLabels(3) = "tempo" IF ISFALSE Task(%Prologos_So).hParam THEN udnr = %False MakeTaskParameterDialog %Prologos_So,0,Slider(),4,UDctrl(),TaskParamlabels() END IF IF ISFALSE udnr THEN udnr = TaskEX(%Prologos_So).UpDownnumbers(0) UDctrl(udnr).cptr = CODEPTR(Prologos_So_UD0) UDctrl(udnr).value = 20 UDctrl(udnr).maxval = 255 UDctrl(udnr).minval = 1 UDctrl(udnr).resetval = 20 UDctrl(udnr+1).cptr = CODEPTR(Prologos_So_UD1) UDctrl(udnr+1).value = 12 UDctrl(udnr+1).maxval = 48 UDctrl(udnr+1).minval = 12 UDctrl(udnr+1).resetval = 12 UDctrl(udnr+2).value = 63 UDctrl(udnr+2).maxval = 127 UDctrl(udnr+2).minval = 0 UDctrl(udnr+2).resetval = 36 UDctrl(udnr+2).cptr = CODEPTR(Prologos_So_UD2) UDctrl(udnr+3).value = 20 UDctrl(udnr+3).maxval = 240 UDctrl(udnr+3).minval = 20 UDctrl(udnr+3).resetval = 30 UDctrl(udnr+3).cptr = CODEPTR(Prologos_So_UD3) END IF ' test adding static labels in front of the UD's FOR n = 0 TO 3 SELECT CASE n CASE %False CONTROL ADD LABEL, Task(%Prologos_So).hParam,-1,"Pulse-Pause Time",1,12 + (n*18),100,10 CASE 1 CONTROL ADD LABEL, Task(%Prologos_So).hParam,-1,"Midi Note",1,12 + (n*18),100,10 CASE 2 CONTROL ADD LABEL, Task(%Prologos_So).hParam,-1,"Volume",1,12 + (n*18),100,10 CASE 3 ' 20 characters text maximum CONTROL ADD LABEL, Task(%Prologos_So).hParam,-1,"Task Tempo",1,12 + (n*18),100,10 END SELECT NEXT n DIALOG SET SIZE Task(%Prologos_So).hParam,160,100 So.ctrl(1) = 127 'was bug - was ctrl(7), whith which So_Wind did nothing kl 20070725 'So_Wind So Controller So.channel, 1, So.ctrl(1) onoff = %False Task(%Prologos_So).tog = %True END IF n = UDctrl(udnr+1).value ' note Task(%Prologos_So).tempo = UDctrl(udnr+3).value IF ISFALSE onoff THEN AddNote2Har So.Har(1), n,UDctrl(udnr+2).value InstrumPlay So Task(%Prologos_So).freq = Task(%Prologos_So).tempo / (241 -UDctrl(udnr).value) ' tempo / 4 60 ELSE InstrumPlay So Task(%Prologos_So).freq = Task(%Prologos_So).Tempo / UDctrl(udnr).value '30 ' tempo * 2 END IF BIT TOGGLE onoff,0 END SUB SUB Prologos_So_UD0 () LOCAL udnr AS LONG LOCAL i AS LONG LOCAL value AS BYTE udnr = TaskEX(%Prologos_So).UpDownnumbers(0) SetDlgItemText Task(%Prologos_So).hparam, %GMT_TEXT0_ID + 16, "r=" & STR$(UDctrl(udnr).value) END SUB SUB Prologos_So_UD1 () LOCAL udnr AS LONG LOCAL i AS LONG LOCAL value AS BYTE udnr = TaskEX(%Prologos_So).UpDownnumbers(1) SetDlgItemText Task(%Prologos_So).hparam, %GMT_TEXT0_ID + 17, "n=" & STR$(UDctrl(udnr).value) END SUB SUB Prologos_So_UD2 () LOCAL udnr AS LONG LOCAL i AS LONG LOCAL value AS BYTE udnr = TaskEX(%Prologos_So).UpDownnumbers(2) SetDlgItemText Task(%Prologos_So).hparam, %GMT_TEXT0_ID + 18, "v=" & STR$(UDctrl(udnr).value) END SUB SUB Prologos_So_UD3 () LOCAL udnr AS LONG LOCAL i AS LONG LOCAL value AS BYTE udnr = TaskEX(%Prologos_So).UpDownnumbers(3) SetDlgItemText Task(%Prologos_So).hparam, %GMT_TEXT0_ID + 19, "MM=" & STR$(UDctrl(udnr).value) END SUB SUB Prologos_Bourdonola () '%Prologos_Bourdonola = 60 ' voor test op bourdonola. ' to be tested: windpressure ' lights: notes 32-35 ' note speeds for notes 26-62 STATIC slnr AS DWORD STATIC udnr AS DWORD STATIC oldnote AS DWORD IF ISFALSE Task(%Prologos_Bourdonola).tog THEN DIM TaskParamLabels(3) AS LOCAL ASCIIZ * 8 TaskParamLabels(0) = "Notes" TaskParamLabels(1) = "Speed" TaskParamLabels(2) = "Motor" TaskParamLabels(3) = "Light" IF ISFALSE Task(%Prologos_Bourdonola).hParam THEN MakeTaskParameterDialog %Prologos_Bourdonola,2,Slider(),2,UDctrl(),TaskParamlabels() END IF IF ISFALSE slnr THEN slnr = TaskEX(%Prologos_Bourdonola).SliderNumbers(0) ' the second slider is slnr + 1 udnr = TaskEX(%Prologos_Bourdonola).UpDownnumbers(0) SendMessage Slider(slnr).h, %TBM_SETPOS,%True, 36 SendMessage Slider(slnr+1).h, %TBM_SETPOS,%True, 64 ' wind Slider(slnr).value = 36 Slider(slnr+1).value = 64 UDctrl(udnr).cptr = CODEPTR(Bourdonola_UD_Motor) UDctrl(udnr).value = 0 UDctrl(udnr).maxval = 255 UDctrl(udnr).minval = 0 UDctrl(udnr).resetval = 0 UDctrl(udnr+1).cptr = CODEPTR(Bourdonola_UD_Light) UDctrl(udnr+1).value = 0 UDctrl(udnr+1).maxval = 1 UDctrl(udnr+1).minval = 0 UDctrl(udnr+1).resetval = 0 END IF Task(%Prologos_Bourdonola).tog = %True EXIT SUB Task(%Prologos_Bourdonola).freq = 12.8 END IF IF ISFALSE oldnote THEN mPlay Bourdonola.channel, MAX(Slider(slnr).value, 36), 64 oldnote = MAX(Slider(slnr).value, 36) ELSE mPlay Bourdonola.channel, oldnote, %False oldnote = %False END IF Task(%Prologos_Bourdonola).freq = Slider(slnr+1).value / 5 IF Task(%Prologos_Bourdonola).freq < 0.1 THEN Task(%Prologos_Bourdonola).freq = 0.1 END SUB SUB BOURDONOLA_UD_Motor () LOCAL udnr AS LONG LOCAL i AS LONG LOCAL value AS BYTE udnr = TaskEX(%Prologos_Bourdonola).UpDownnumbers(0) value = UDctrl(udnr).value Bourdonola.ctrl(1) = value Controller Bourdonola.channel, 1, value SetDlgItemText Task(%Prologos_Bourdonola).hparam, %GMT_TEXT0_ID + 16, "M=" & STR$(value) END SUB SUB BOURDONOLA_UD_Light () LOCAL udnr AS LONG LOCAL value AS BYTE LOCAL i AS INTEGER udnr = TaskEX(%Prologos_Bourdonola).UpDownnumbers(1) value = UDctrl(udnr).value IF value > 4 THEN value = 4 FOR i = 32 TO 35 IF Bourdonola.ctrl(i) THEN NoteOff Bourdonola.channel, i Bourdonola.ctrl(i) = %False NEXT i IF value THEN mPlay Bourdonola.channel, 31 + value, 64 Bourdonola.ctrl(31+value) = %True END IF SetDlgItemText Task(%Prologos_Bourdonola).hparam, %GMT_TEXT0_ID + 17, "L=" & STR$(value) END SUB SUB Prologos_Harma() END SUB SUB Prologos_HybrLo () ' 14.09.2016 - test for HybrLo ' here we look only into the frequency data in order to detect accelerating gesture ' this is an experiment only sofar... ' this code works but not too well. The mapping on Llor was not very good neither. (way too loud) ' code adapted to fourstep recognition 06.04.2010 ' retested, with better ambitus mapping ' rescaling done 09.04.2010 ' 13.04.2010 works very well now with algo 1, but scaling should be enlarged. ' 15.04.2010: fine tuning. ' derived from Links. ' 08.01.2015: Sticky notes for some reason... ARM crash? ' 10.01.2015: o.k. now, reduce Llor... ' Llor changed to temblo ' 14.09.2016: adapted for use un HybrLo ' 14.10.2016: Revised. To be checked again. ' 15.10.2016: copied from namuda study for Hybr to Faust. STATIC xtrig, ytrig, ztrig, xnoot, ynoot, znoot, lites AS LONG STATIC sens AS SINGLE IF ISFALSE Task(%Prologos_HybrLo).tog THEN IF ISFALSE Task(%Gesture_Analyser).tog THEN starttask %Gesture_Analyser sens = 1 Controller Hybrlo.channel, 66, 64 ' send preset: ProgChange Hybrlo.channel, 3 ' organ sound ' send controllers for HybrLo: Controller HybrLo.channel, 7, 90 '76 MM_HybrLo_On %MM_White Task(%Prologos_HybrLo).tog = %True END IF ' on accelerating body speed, do something... IF gesture.speedup(3) > gesture.slowdown(3) + sens THEN IF ISFALSE xtrig THEN xnoot = MIN(HybrLo.lowtes - sens + (gesture.speedup(3)* .50), 69) ' multiplier was 1.5, chaned to 1 (12.01.2015) xnoot = MAX(MIN(xnoot,69),HybrLo.lowtes) mPlay HybrLo.channel,xnoot, MIN(gesture.speedup_val(3) , 127) xtrig = %True END IF ELSE RESET xtrig IF xnoot THEN Release HybrLo.channel, xnoot, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 42 ' 0-126 RESET xnoot END IF END IF IF ISFALSE xnoot THEN IF ISFALSE znoot THEN mPlay HybrLo.channel, 22, 10 ' soft znoot = 22 END IF ELSE IF znoot THEN Release HybrLo.channel, 22, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 42 RESET znoot END IF END IF ' IF gesture.speedup(1) > gesture.slowdown(1) + sens THEN ' IF ISFALSE ytrig THEN ' ynoot = MIN(Hybr.lowtes - sens + (gesture.speedup(1)* 1), 72) ' ynoot = MAX(MIN(ynoot,72),Hybr.lowtes) ' IF ynoot = xnoot THEN ' DECR ynoot ' END IF ' mPlay Hybr.channel,ynoot , MIN(gesture.speedup_val(1), 127) ' ytrig = %true ' END IF ' ELSE ' IF ynoot THEN ' mPlay Hybr.channel, ynoot, %False ' RESET ynoot ' END IF ' RESET ytrig ' END IF ' IF gesture.speedup(2) > gesture.slowdown(2) + sens THEN ' IF ISFALSE ztrig THEN ' znoot = MIN(Hybr.lowtes - sens + (gesture.speedup(2)* 1), 72) ' znoot = MAX(MIN(znoot,72),Hybr.lowtes) ' IF znoot = ynoot THEN ' DECR znoot ' END IF ' mPlay Hybr.channel, znoot, MIN(gesture.speedup_val(2), 127) ' ztrig = %True ' END IF ' ELSE ' IF znoot THEN ' mPlay Hybr.channel, znoot, %False ' RESET znoot ' END IF ' RESET ztrig ' END IF IF Gesture.speedup(3) > (sens * 10) THEN IF ISFALSE lites THEN MM_HybrLo_On %MM_Lights lites = %True END IF ELSE IF lites THEN MM_HybrLo_Off %MM_Lights RESET lites END IF END IF END SUB '[eof]