'#INCLUDE "c:\b\pb\gmt\kristof\audexp\AE.bi DECLARE FUNCTION Doesitwork LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" AS LONG DECLARE SUB AE_PrepareWaveFunctions LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (WavHdr() AS WAVEHDR) DECLARE FUNCTION AE_Wave2Env LIB "c:\b\pb\gmt\kristof\audexp\AE.dll"(BYVAL track AS LONG,BYVAL fct AS DWORD) AS LONG DECLARE SUB AE_GranulateTrack LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (BYVAL track AS LONG, BYVAL Env AS DWORD, BYREF Grain AS Graintype) DECLARE FUNCTION GranuSynthStoch LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (GSD AS GrainSynthDataType) AS LONG DECLARE FUNCTION GranuSynthEx LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (GSD AS GrainSynthDataType) AS LONG DECLARE FUNCTION Wave2Env LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (BYVAL track AS LONG) AS LONG DECLARE SUB GetGrainFileName LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (BYREF fn AS ASCIIZ * 15) DECLARE SUB FreeTrack LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (BYREF t AS LONG ) DECLARE SUB LeftChansToStereo LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (track1 AS LONG, track2 AS LONG) DECLARE SUB LeftChanToStereo LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (track AS LONG, sc AS SINGLE) DECLARE FUNCTION StretchMod LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" ( ASCIIZ, ASCIIZ) AS LONG DECLARE FUNCTION StretchModTrack LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" ( LONG, LONG) AS LONG DECLARE FUNCTION Noiserate LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (track AS LONG, amount AS DWORD, filt AS DWORD) AS LONG DECLARE FUNCTION Noiserate2 LIB "c:\b\pb\gmt\kristof\audexp\AE.dll" (track AS LONG, filt AS LONG) AS LONG DECLARE FUNCTION InitVerbzReit1 AS LONG 'declare task subs DECLARE SUB VR_Master 'master task DECLARE SUB VR_RecordWaves 'recorder task DECLARE SUB VR_RecWaveHandler 'slave of RecordWaves 'DECLARE SUB VR_PlayWaves 'player Task 'DECLARE SUB VR1_InitMixer DECLARE SUB VR1_intro DECLARE SUB VR1_Part1 DECLARE SUB VR1_Part2 DECLARE SUB VR1_Part3 DECLARE SUB VR1_Part4 DECLARE SUB VR1_Repeat DECLARE SUB VR1_Repeat2 GLOBAL TimFirstRec AS DWORD 'other subs &functions '!! some functions froma audexp.bas are needed here, so we should include it in stud.bas DECLARE SUB VR1_ToLog(a$) 'write string to log file DECLARE FUNCTION VR_Start() AS LONG $fnEnv = "Env.wav" '%optimiseforspeed = 1 'unecessary FUNCTION InitVerbZreit1 AS LONG IF ISFALSE Audio.hwi THEN MSGBOX "please select wave input device first" FUNCTION =%false EXIT FUNCTION END IF IF ISFALSE Audio.hwo THEN MSGBOX "please select wave output device first" FUNCTION = %false EXIT FUNCTION END IF ButnSW(1).cptr = CODEPTR(VR_Start) AE_NoiseFloor = %AENoiseFloor Task(%AEMaster).naam = "Master" Task(%AEMaster).freq = 3 Task(%AEMaster).switch = %false'%true Task(%AEMaster).cptr = CODEPTR(VR_Master) Task(%RecTask).naam = "RecordIt" 'cont recording, writes useful data in separate track, send to RWH Task(%RecTask).freq = 10 'seems to be satisfying; was20 'not recomputed internally, should stay fixed Task(%RecTask).switch =%false Task(%RecTask).cptr =CODEPTR(VR_RecordWaves) Task(%RWH).naam = "RecHand" 'finish and store info on tracknr passed in Task(%RWH).channel by RecordWaves Task(%RWH).freq = 10 'one shot slave of RecordIt Task(%RWH).switch = %false Task(%RWH).channel = 17 '= tracknr; nothing to save right now so we take an invalid one (recogd by sub) Task(%RWH).cptr = CODEPTR(VR_RecWaveHandler) Task(%Monitor).naam = "Monitor" 'keep track of slider controlled global vars Task(%Monitor).freq = 1 Task(%Monitor).switch = %false Task(%Monitor).cptr=CODEPTR(VR_Monitor) Task(%intro).naam = "intro" Task(%intro).freq = 3.7 '3.3 Task(%intro).switch = %false Task(%intro).cptr=CODEPTR(VR1_Intro) Task(%Part1).naam = "Part 1" Task(%Part1).freq = 4.3 Task(%Part1).switch=%false Task(%Part1).cptr=CODEPTR(Vr1_Part1) Task(%Part2).naam = "Part 2" Task(%Part2).freq = 0.8 Task(%Part2).switch = %false Task(%part2).cptr = CODEPTR(Vr1_Part2) Task(%part3).naam= "Part 3" Task(%part3).freq = 3.03 Task(%part3).switch = %false Task(%part3).cptr=CODEPTR(Vr1_part3) Task(%part4).naam="Part 4" Task(%part4).freq = 5 Task(%part4).switch = %false Task(%part4).cptr=CODEPTR(Vr1_Part4) Task(%part6).naam = "res 4 " Task(%part6).freq = 5 Task(%part6).switch = %false Task(%part6).cptr = CODEPTR(VR1_res4) Task(%Repeat).naam="TalckBack" Task(%Repeat).freq = 5 Task(%Repeat).switch = %false Task(%Repeat).cptr = CODEPTR(Vr1_Repeat) Task(%Repeat2).naam="LoopBack" Task(%Repeat2).freq = 2.5 Task(%Repeat2).switch = %false Task(%Repeat2).cptr = CODEPTR(Vr1_Repeat2) StartWaveOutStream %AudioStreamCallBack FUNCTION = %true END FUNCTION FUNCTION VR_Start AS LONG AE_PrepareWaveFunctions WavHdr() ButnSW_StartStopToggle 'GMT function 'REPLACE THIS WITH PART OF ITS CINTENTS88 StopTask App.GlobalHarmonyTaskNr StopTask App.PromilTaskNr StartTask %AEMaster StartTask %RecTask StartTask %Monitor END FUNCTION SUB VR_Monitor 'monitor sliders n stuff and set according variables STATIC Slnr AS LONG STATIC nrSlr AS LONG STATIC TaskParamLabels() AS ASCIIZ * 8 LOCAL i AS LONG IF (task(%Monitor).flags AND %TASK_BUSY) THEN EXIT SUB IF ISFALSE task(%Monitor).patch THEN'(tasknr) THEN INCR task(%Monitor).patch nrSlr = 0'3 'nr of sliders - 1 DIM TaskParamLabels(0 TO 0)'NrSlr) 'slider 0 is for the noisefloor TaskParamLabels(0) = "NzFl" MakeTaskParameterDialog BYVAL %Monitor,nrSlr + 1,Slider(),0,UDctrl(),TaskParamLabels() Slnr = TaskEX(%monitor).SliderNumbers(0) Slider(slnr).minval = 200 Slider(slnr).maxval = 2500 Slider(slnr).stap = 20 Slider(slnr).value = AE_NoiseFloor SendMessage Slider(slnr).h, %TBM_SETRANGE,%True, MakeLong(Slider(slnr).minval, Slider(slnr).maxval) SendMessage Slider(slnr).h, %TBM_SETPAGESIZE,0,Slider(Slnr).stap SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF AE_NoiseFloor = Slider(slnr).value END SUB SUB VR_Master SELECT CASE task(%AEMaster).patch 'patch holds counter for events in composition CASE %false INCR task(%AEMaster).patch 'do nothing here. so we're sure the record and monitor tasks work when we start music CASE 1 'start %Part1 StartTask %intro INCR task(%AEMaster).patch CASE 2 'wait for sound IF BIT (AE.flag, 3) THEN BIT RESET AE.flag, 3 INCR task(%AEMaster).patch ToLog "start part 1" StartTask %Part1 '%part1 is responsible for stopping intro & starting part2!!! StartTask %Repeat END IF CASE 3 IF task(%intro).freq >1.7 THEN task(%intro).freq = ((50 *task(%intro).freq) + 1.7) / 51 END IF IF AE.FC > 19 THEN task(%Part3).channel = 2 'nr of src sounds used by this task StartTask %part3 INCR task(%AEMaster).patch END IF CASE 4 SELECT CASE AE.FC CASE 22 task(%Part3).channel = 3 CASE 25 task(%part3).channel = 4 CASE 28 task(%part3).channel = 5 CASE >= 38 ToLog "stop part 1" StopTask %Part1 StopTask %Part3 StartTask %part4 BIT RESET AE.flag, 3 INCR task(%AEMaster).patch END SELECT CASE 5 IF AE.FC > 50 THEN ToLog "stop part2" StopTask %part2 INCR Task(%AEMaster).patch END IF CASE 6 IF task(%part4).channel > 5 THEN task(%part1).freq = 0.5 'restart first part but slower now StartTask %part1 INCR task(%AEMaster).patch END IF CASE 7 IF task(%part4).channel > 9 THEN StopTask %part1 INCR task(%AEMaster).patch END IF CASE 8 IF task(%part4).channel > 15 THEN task(%part3).channel = 4 StartTask %part3 INCR task(%AEMaster).patch END IF CASE 9 IF task(%part4).channel > 20 THEN StopTask %part3 INCR task(%AEMaster).patch END IF CASE 10 IF task(%part4).channel > 12 THEN ' Stoptask %Repeat ' StartTask %Repeat2 INCR task(%AEMaster).patch END IF CASE 11 IF task(%part4).channel > 13 THEN ' StopTask %Repeat ' StopTask %RecTask ' StopTask %part4 warning "stopped %part4"+CHR$(12)+CHR$(13),1000 INCR Task(%AEMaster).patch END IF CASE 12 'StartTask %Repeat2 INCR TAsk(%AEMAster).patch END SELECT END SUB SUB VR1_intro 'plays mx waves > drone 'm4 6 s LOCAL track AS LONG LOCAL ssize AS DWORD SELECT CASE task(%intro).patch CASE 0 ' ToLog "intro case 0" INCR task(%intro).patch CASE 1,6,15,26,37,55,62,73,108,119,121, 135,152,173,178,199,223,232,249 '1,9,16,23,29,35,40,44,52,57,63,67,71,76,82,100,108,117,123,127,135,140,148,163,172,176,191,213,217,221,225,229,233,237,252,268,296 track = ReadWaveData($intro_1) ' ToLog $intro_1 INCR task(%intro).patch CASE 11,19,29,39,50,68,78,104,111,124,129,143,145,155,169,183,209,226,235 '38,48,53,61,69,77,81,90,96,104,112,122,128,131,137,141,165,189,203,207,219,231,239,241,244,247,250,253,258,261,272,280,293 track = ReadWaveData($intro_2) INCR task(%intro).patch ' ToLog $intro_2 CASE 23,31,41,46,83,100,114,147,158,165,188, 215,228,239,255 '94,102,106,110,114,119,125,133,143,145,147,149,151,153,155,157,159,162,169,180,205,209,227,243,263,265,267,269,271,273,275,277,279,281 track = ReadWaveData($intro_3) ' ToLog $intro_3 INCR task(%intro).patch CASE 34,43,88,96,117,149,161,193,219,230,244 ' 161,164,167,170,174,178,182,187,193,201,211,223,235,248,259,264,276,282,285,288,291,294,297 track = ReadWaveData($intro_4) ' ToLog $intro_4 INCR task(%intro).patch CASE 265 task(%intro).patch = 15 EXIT SUB CASE 301 ToLog "will stop intro" StopTask %intro EXIT SUB CASE ELSE INCR task(%intro).patch EXIT SUB END SELECT IF track < 0 THEN EXIT SUB PlayAudioTrack track,%Modulate_Volume ' ToLog STR$(track) END SUB SUB VR1_Part1 'premade waves get the envelope of recorded sounds. a 30 step pattern builds up, with a new sample added for every new 'recorded sound, starting with high sounds, [grad adding more low sounds. = P2 now] from recorded sample 9, older samples are 'replaced by new ones, all low. LOCAL fn AS ASCIIZ * 15 LOCAL track AS LONG LOCAL track2 AS LONG STATIC OldFc AS LONG STATIC Filecount AS LONG STATIC cEnv AS LONG 'counter of envelopes saved STATIC Acc AS SINGLE 'cceleration STATIC scont AS LONG IF ISFALSE Acc THEN Acc = .1 END IF IF Filecount > 2 THEN IF Task(%part1).freq > 6 THEN Task(%part1).freq = 5.8 Acc = -.1 ELSEIF Task(%part1).freq <2.4 THEN Task(%part1).freq = 2.4 Acc = .04 END IF task(%part1).freq = task(%part1).freq + Acc END IF INCR task(%part1).patch IF OldFc <> AE.FC THEN SELECT CASE AE.FC 'IF AE.FC = 4 THEN CASE 11 task(%intro).patch = 301 '= command to intro to free its arrays and stop CASE 12 StartTask %part2 '!!!!!!!! task %part1 starts task %part2 !!!!!!!!! END SELECT OldFC = AE.FC track = ReadWaveData (AE.filenam(AE.FC-1)) IF track < 0 THEN ToLog "track < 0 @ P1 CASE 1, 1, on file:" + AE.filenam(AE.FC-1) EXIT SUB END IF AE_Wave2Env track, 60 'using it recursively for less artifacts AE_Wave2Env track, 60 AE_Wave2Env track, 60 AE_Wave2Env track, 60 NormalizeWave WavHdr(track) , 80 + (AE.FC MOD 8) INCR cEnv ' ToLog STR$(track) SaveAudioTrack $fnEnv, track SELECT CASE cEnv CASE 1, 26 fn = "i1.wav" CASE 3, 4, 28 fn = "i2.wav" CASE 2, 5 ',7 '5,6,10 fn = "i4.wav" CASE 6, 8 '8, 9 ', 12, 13 fn = "i3.wav" CASE 7, 31 fn = "i5.wav" CASE 9, 30 fn = "i6.wav" CASE 10, 16 fn = "i7.wav" 'i7 to i 10 are i1 to i4 stretched 82 % CASE 11, 15 fn = "i8.wav" CASE 12, 14 fn = "i9.wav" CASE 13, 17 fn = "i10.wav" CASE 18,21, 27, 33 ',8 fn = "m3.wav" CASE 19, 22, 29 ',9 fn = "m4.wav" CASE 20, 23, 31 fn = "m5.wav" CASE 24, 25, 32 fn = "m6.wav" CASE ELSE EXIT SUB END SELECT track = StretchMod ($fnEnv, fn) IF track < 0 THEN ToLog "track < 0 @ P1 CASE 1, 2, on files:" + $fnEnv + fn EXIT SUB END IF NorMalizeWave WavHdr(track), INT(30 + RND * 20) 'was int(70 + rnd * 20) maar gaf slechte balans tov bassen LeftChanToStereo track, (cEnv MOD 13) / ( (cEnv MOD 7) + 2) INCR FileCount IF FileCount <= 16 THEN fn = "P1_"+TRIM$(STR$(FileCount))+".wav" ELSEIF fileCount <=32 THEN fn = "P1_"+TRIM$(STR$(Filecount-16))+".wav" 'from here replace lowest files with new ones (basses) ELSE fn = "P1_"+TRIM$(STR$(Filecount-32))+".wav" 'from here replace lowest files with new ones (basses) END IF SaveAudioTrack fn, track IF Acc < 0 THEN Acc = - Acc ELSE Acc = Acc + .04 END IF ' task(%part1).patch = 0 'increase on every step EXIT SUB END IF SELECT CASE task(%part1).patch CASE 2 'inconsequent order of comparisors, but consequent order of filecount and according sample SELECT CASE Filecount CASE 4 fn = "P1_4.wav" ' track2 = ReadWaveData("AE_4.wav") CASE 6 fn = "P1_5.wav" CASE 1 TO 7 fn = "AE_1.wav" CASE >0 fn = "P1_1.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "ERR reading" + fn EXIT SUB END IF PlayAudioTrack track, %MODULATE_VOLUME CASE 13 SELECT CASE FileCount CASE 6 fn = "P1_5.wav" CASE 3 TO 9 fn = "AE_2.wav" CASE > 1 fn = "P1_2.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err reading" + fn EXIT SUB END IF PlayAudioTrack track, %MODULATE_VOLUME CASE 8,36 IF FileCount > 12 THEN fn = "AE_3.wav" ELSEIF FileCount > 2 THEN fn = "P1_3.wav" END IF IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err reading" + fn EXIT SUB END IF PlayAudioTrack track, %MODULATE_VOLUME CASE 14,48 IF FileCount > 3 THEN fn = "P1_4.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 6,32 IF FileCount > 4 THEN fn = "P1_5.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 10,40 IF FileCount > 5 THEN fn = "P1_6.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 17, 54 IF FileCount > 16 THEN fn = "AE_6.wav" ELSEIF FileCount > 6 THEN fn = "P1_7.wav" END IF IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 3, 26 IF FileCount > 7 THEN fn = "P1_8.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 5, 30, 88 IF FileCount > 8 THEN fn = "P1_9.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 7, 34 IF FileCount > 9 THEN fn = "P1_10.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 9, 38, 72 IF AE.FC > 0 THEN track = ReadWaveData(AE.filenam(AE.FC - 1)) IF track < 0 THEN MSGBOX "ERR": EXIT SUB NormalizeWave WavHdr(track), 70 + RND* 10 PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 11, 42, 83 SELECT CASE FileCount CASE 2 TO 6 fn = "P1_2.wav" CASE > 11 fn = "P1_1.wav" CASE ELSE EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 12,44 IF FileCount > 12 THEN fn = "P1_3.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 15, 50 IF FileCount > 13 THEN fn = "P1_4.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 16, 18, 19, 52, 79 SELECT CASE FileCount CASE 4 TO 9 fn = "P1_3.wav" CASE > 13 fn = "P1_5.wav" CASE ELSE EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 28, 46, 48, 56, 58, 75 IF FileCount < 10 THEN EXIT SUB fn = "P1_"+TRIM$(STR$(1 + FIX(RND * 9)))+".wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 59, 63 SELECT CASE FileCount CASE 2 TO 10 fn="P1_1.wav" CASE > 10 fn="P1_10.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 61, 64 SELECT CASE FileCount CASE 3 TO 11 fn ="P1_1.wav" CASE >11 fn="P1_11.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 66, 68, 72 SELECT CASE FileCount CASE 2 TO 12 fn = "P1_2.wav" CASE > 12 fn = "P1_12.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 69, 71 SELECT CASE FileCount CASE 6 TO 13 fn = "P1_6.wav" CASE > 13 fn = "P1_13.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 24, 46, 94 INCR scont IF (scont >= FileCount) OR (scont > 16) THEN scont = 1 track = ReadWaveData ("p1_"+TRIM$(STR$(scont))+".wav") IF track < 0 THEN ToLog "err reading p1_"+TRIM$(STR$(scont))+".wav": EXIT SUB track2 = GetFreeaudioTrack IF track2 < 0 THEN ResizeAudioTrack track, %false EXIT SUB END IF ResizeAudioTrack track2, TrackDuration(track) * 1.1 VariSpeed WavHdr(track), WavHdr(track2) ResizeAudioTrack track, %false SaveAudioTrack "p1_"+TRIM$(STR$(scont))+".wav", track2 CASE 96, 102 SELECT CASE FileCount CASE 1 TO 14 fn = AE.filenam(AE.FC - 1) CASE > 14 fn = "P1_14.wav" END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 97 SELECT CASE FileCount CASE 3 TO 15 fn = AE.filenam(AE.FC - 2) CASE > 15 fn = "P1_15.wav END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 100 SELECT CASE FileCount CASE 5 TO 16 fn = AE.filenam(AE.FC - 3) CASE > 16 fn = "P1_16.wav END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE > 104 track = GetFreeAudioTrack IF track > 12 THEN ToLog "track > 12 @ P1" + STR$(track) Acc = - .2 END IF ResizeAudioTrack track, %false task(%part1).patch = INT(RND * 47) 'is increased at start of proc, before slelect case, so will be 1 then END SELECT END SUB SUB Vr1_Part2 'premade waves get the envelope of recorded sounds. a 30 step pattern builds up, with a new sample added for every new 'recorded sound, starting with high sounds, grad adding more low sounds. from recorded sample 14, older samples are 'replaced by new ones, all low. LOCAL fn AS ASCIIZ * 15 LOCAL track AS LONG LOCAL track2 AS LONG STATIC OldFc AS LONG STATIC Filecount AS LONG STATIC cEnv AS LONG 'counter of envelopes saved STATIC Acc AS SINGLE IF (task(%part2).flags AND %TASK_BUSY) THEN EXIT SUB IF ISFALSE task(%part2).patch THEN OldFc = AE.FC acc = .02 END IF task(%part2).freq = task(%part2).freq + acc IF task(%part2).freq > 2 THEN acc = -.03 IF task(%part2).freq < .5 THEN acc = .03 INCR task(%part2).patch ' ToLog "2 patch = " + STR$(task(%part2).patch) IF OldFc <> AE.FC THEN IF AE.FC = 4 THEN StopTask %intro END IF OldFC = AE.FC track = ReadWaveData (AE.filenam(AE.FC-1)) IF track < 0 THEN ToLog "track < 0 @ P2 CASE 1, 1, on file:" + AE.filenam(AE.FC-1) EXIT SUB END IF AE_Wave2Env track, 60 'using it recursively for less artifacts AE_Wave2Env track, 60 AE_Wave2Env track, 60 AE_Wave2Env track, 60 AE_Wave2Env track, 60 NormalizeWave WavHdr(track) , 90 INCR cEnv SaveAudioTrack $fnEnv, track ' MSGBOX STR$(WavHdr(track).lpData) SELECT CASE cEnv CASE 1,11, 6 '4, 15,20,23, 25 fn = "m4.wav" 'lowest bass, 50Hz CASE 2,8,14'7,17, 21,24, 26 fn = "m6.wav" '74 Hz, almost harmonic spectrum CASE 3,9'9,18,22 fn = "m5.wav" '70 Hz, dirty spectrum CASE 4,10, 14'11,19 fn = "m3.wav" CASE 5,13 '14, 27 fn = "m2.wav" CASE 7,12'16, 28 fn = "m1.wav" CASE >14 EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = StretchMod ($fnEnv, fn) IF track < 0 THEN ToLog "track < 0 @ P2 CASE 1, 2, on files:" + $fnEnv + fn EXIT SUB END IF NormalizeWave WavHdr(track), INT(90 + 10 * RND) '70 + 20 * rnd LeftChanToStereo track, (cEnv MOD 3) / (cEnv MOD 11) SELECT CASE cEnv CASE 6, 8, 9 track2 = GetFreeAudioTrack IF track2 < 0 THEN ResizeAudioTrack track, %false EXIT SELECT END IF ResizeAudioTrack track2, WaveDuration(WavHdr(track)) * 0.83 VarisPeed WavHdr(track), WavHdr(track2) ResizeAudioTrack track, %false track = track2 CASE 11, 14 ,13 track2 = GetFreeAudioTrack IF track2 < 0 THEN ResizeAudioTrack track, %false EXIT SELECT END IF ResizeAudioTrack track2, WaveDuration(WavHdr(track)) * 1.13 VarisPeed WavHdr(track), WavHdr(track2) ResizeAudioTrack track, %false track = track2 END SELECT INCR FileCount fn = "P2_"+TRIM$(STR$(FileCount))+".wav" SaveAudioTrack fn, track EXIT SUB END IF SELECT CASE task(%part2).patch CASE 2, 30 'inconsequent order of comparisors, but consequent order of filecount and according sample IF FileCount > 0 THEN fn = "P2_1.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 20, 33 IF FileCount > 1 THEN fn = "P2_2.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 12, 36 IF FileCount > 2 THEN fn = "P2_3.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 22 IF FileCount > 3 THEN fn = "P2_4.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 8 IF FileCount > 4 THEN fn = "P2_5.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 17 IF FileCount > 5 THEN fn = "P2_6.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 27 IF FileCount > 6 THEN fn = "P2_7.wav" track = ReadWaveData(fn) IF track<0 THEN ToLog "err rd"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 4 IF FileCount > 7 THEN fn = "P2_8.wav" track = ReadWavedata(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 7 IF FileCount > 8 THEN fn = "P2_9.wav" track = Readwavedata(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 10 IF FileCount > 9 THEN fn = "P2_10.wav" track = ReadWavedata(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 14 SELECT CASE FileCount CASE 1 TO 6 track = ReadWaveData(AE.filenam(AE.FC - 1)) IF track < 0 THEN EXIT SUB NormalizeWave WavHdr(track), 10 + RND*30 PlayAudioTrack track, %MODULATE_VOLUME CASE > 10 fn = "P2_11.wav" CASE ELSE EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 18 SELECT CASE FileCount CASE 2 TO 6 track = ReadWaveData(AE.filenam(AE.FC - 1)) IF track < 0 THEN EXIT SUB NormalizeWave WavHdr(track), 10 + RND*50 PlayAudioTrack track, %MODULATE_VOLUME CASE > 11 fn = "P2_12.wav" CASE ELSE EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 19 IF FileCount > 12 THEN fn = "P2_13.wav" track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudiotrack track, %MODULATE_VOLUME END IF CASE 23 IF FileCount > 13 THEN fn = "P2_14.wav" track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 25, 28, 29 SELECT CASE FileCount CASE 4 TO 9 fn = "P2_3.wav" CASE > 13 fn = "P2_"+ TRIM$(STR$(INT(RND * 13 + 1))) +".wav" CASE ELSE EXIT SUB END SELECT IF fn="" THEN EXIT SUB track = ReadWavedata(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE > 40 ' task(%part2).patch = 0 'is increased at start of proc, before slelect case, so will be 1 then END SELECT END SUB SUB Vr1_part3 'makes 'wind' sounds based on last saved envelope. '.channel determines how much how much different files (@cnt) ar used '!improve: wx are noisy sounds that can be looped without clicks, so we miht shorten them and ad them back together 'for longer waves... LOCAL track AS LONG LOCAL fn AS ASCIIZ * 15 ' LOCAL track2 AS LONG LOCAL fn2 AS ASCIIZ*15 STATIC OldFc AS LONG STATIC cnt AS LONG STATIC cSav AS LONG 'files saved by me INCR cnt IF (task(%part3).flags AND %TASK_BUSY) THEN EXIT SUB IF cnt > task(%part3).channel THEN cnt = 1 IF OldFc = AE.FC THEN IF ISFALSE cnt THEN EXIT SUB IF cnt > cSav THEN cnt = 1 fn = "P3_"+TRIM$(STR$(cnt))+".wav" track = ReadWaveData(fn) IF track < 0 THEN ToLog "err reacing"+fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME EXIT SUB END IF OldFc = AE.FC track = ReadWaveData($fnEnv) IF track < 0 THEN EXIT SUB task(%part3).freq = (2000 )/WaveDuration(WavHdr(track)) 'afwiselend track en de lengt ervan, overlappin gwel mogelijk als verschillende files gebruikt w. free track SELECT CASE cnt CASE 1 fn2 = "w1.wav" CASE 2 fn2 = "w2.wav" CASE 3 fn2 = "w3.wav" CASE 4 fn2 = "w1t3d.wav" CASE 5 fn2 = "w2t3d.wav" CASE ELSE fn2 = "w" + TRIM$( STR$((FIX(RND*4)+1) )) + ".wav" END SELECT track = StretchMod($fnEnv, fn2) IF track < 0 THEN ToLog "track < 0 @ P3 stretchmod "+$fnEnv + fn2 EXIT SUB END IF NorMalizeWave WavHdr(track), INT(50 + RND*30) LeftChanToStereo track, INT(6 * RND^3) INCR csav fn = "P3_"+TRIM$(STR$(csav))+".wav" SaveAudioTrack fn, track END SUB SUB Vr1_part4 'basses grad stretched higher & higher before envelope applied 'tendency to cluster of sounds when sound recorded, after wich the tempo slows down 'LOCAL fnEnv AS ASCIIZ * 15 LOCAL fn AS ASCIIZ * 15 LOCAL track AS LONG LOCAL track2 AS LONG STATIC Filecount AS LONG STATIC cEnv AS LONG 'we will overwrite the old envelopes INCR task(%part4).patch 'rythm counter, cyclic IF BIT (AE.flag, 3) THEN BIT RESET AE.flag, 3 IF task(%part4).freq > 12 THEN ToLog "P4 exit @ freq > 12" task(%part4).freq = 12 EXIT SUB 'we dont put to much stress on the processor when we need high tempo's END IF track = ReadWaveData (AE.filenam(AE.FC-1)) IF track < 0 THEN ToLog "track < 0 @ P4 CASE 1, 1, on file:" + AE.filenam(AE.FC-1) EXIT SUB END IF AE_Wave2Env track, 60 'using it recursively for less artifacts AE_Wave2Env track, 60 ' AE_Wave2Env track, 60 NormalizeWave WavHdr(track) , 90 INCR cEnv SaveAudioTrack $fnEnv, track fn="m"+TRIM$(STR$((cEnv MOD 6) + 1))+".wav" track = StretchMod ($fnEnv, fn) IF track < 0 THEN ToLog "track < 0 @ P4 CASE 1, 2, on files:" + $fnEnv + fn EXIT SUB END IF track2=GetFreeAudioTrack IF track2 < 0 THEN ResizeAudioTrack track, 0 ToLog "track < 0 @ P4 CASE1, 2" EXIT SUB END IF ReSizeAudioTrack track2, INT(WaveDuration(WavHdr(track)) / (1.3 + (task(%part4).patch/3) ) ) 'was /4 VariSpeed WavHdr(track), WavHdr(track2) Free track LeftChanToStereo track2, (task(%part4).patch MOD 5) / (task(%part4).patch MOD 11) INCR FileCount fn = "P4_"+TRIM$(STR$(FileCount))+".wav" SaveAudioTrack fn, track2 task(%part4).freq = 12 + task(%part4).channel '/ 2 IF task(%part4).freq > 20 THEN task(%part4).freq = 20 task(%part4).patch = 1 INCR task(%part4).channel ' SetDlgItemText gh.Cockpit, %GMT_TEXT0_ID + 11,"state"+STR$(task(%part4).channel) END IF SELECT CASE task(%part4).patch CASE 9, 13, 17 IF (task(%part4).freq >task(%part4).patch) AND task(%part4).freq < 25 THEN fn = "P4_"+TRIM$(STR$(FIX(FileCount*RND)+1))+".wav" track = ReadWaveData(fn) IF track < 0 THEN ToLog "err reading " + fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 3,5, 12, 18 'play last file made fn = "P4_"+TRIM$(STR$(FileCount))+".wav" track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 1, 4, 16,21, 25 'play random file IF filecount < 10 THEN fn = "P4_"+TRIM$(STR$(FIX(FileCount*RND)+1))+".wav" ELSE fn = "P4_"+TRIM$(STR$(Filecount-INT(RND*6)))+".wav" 'last 6 samps now, other ones still played (case 9, 13, 17) END IF IF fn = "" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 27, 29 fn = AE.filenam(AE.FC- (30 - task(%part4).patch)) track = ReadWaveData(fn) PlayAudioTrack track, %MODULATE_VOLUME CASE 31 task(%part4).patch = %false IF task(%part4).freq > 3 THEN task(%part4).freq = task(%part4).freq * .8 END IF END SELECT END SUB SUB Vr1_res4 'basses grad stretched higher & higher before envelope applied 'tendency to cluster of sounds when sound recorded, after wich the tempo slows down 'LOCAL fnEnv AS ASCIIZ * 15 LOCAL fn AS ASCIIZ * 15 LOCAL track AS LONG LOCAL track2 AS LONG STATIC Filecount AS LONG STATIC cEnv AS LONG 'we will overwrite the old envelopes INCR task(%part6).patch 'rythm counter, cyclic IF BIT (AE.flag, 3) THEN BIT RESET AE.flag, 3 IF task(%part6).freq > 12 THEN ToLog "P4 exit @ freq > 12" task(%part6).freq = 12 EXIT SUB 'we dont put to much stress on the processor when we need high tempo's END IF track = ReadWaveData (AE.filenam(AE.FC-1)) IF track < 0 THEN ToLog "track < 0 @ P4 CASE 1, 1, on file:" + AE.filenam(AE.FC-1) EXIT SUB END IF AE_Wave2Env track, 60 'using it recursively for less artifacts AE_Wave2Env track, 60 ' AE_Wave2Env track, 60 NormalizeWave WavHdr(track) , 90 INCR cEnv SaveAudioTrack $fnEnv, track fn="m"+TRIM$(STR$((cEnv MOD 6) + 1))+".wav" track = StretchMod ($fnEnv, fn) IF track < 0 THEN ToLog "track < 0 @ P4 CASE 1, 2, on files:" + $fnEnv + fn EXIT SUB END IF track2=GetFreeAudioTrack IF track2 < 0 THEN ResizeAudioTrack track, 0 ToLog "track < 0 @ P4 CASE1, 2" EXIT SUB END IF ReSizeAudioTrack track2, INT(WaveDuration(WavHdr(track)) / (1.3 + (task(%part4).patch/3) ) ) 'was /4 VariSpeed WavHdr(track), WavHdr(track2) Free track NormalizeWave WavHdr(track2), 70 'new 000802 LeftChanToStereo track2, (task(%part4).patch MOD 5) / (task(%part4).patch MOD 11) INCR FileCount fn = "P4_"+TRIM$(STR$(FileCount))+".wav" SaveAudioTrack fn, track2 task(%part6).freq = 12 + task(%part6).channel '/ 2 task(%part6).patch = 1 INCR task(%part6).channel ' SetDlgItemText gh.Cockpit, %GMT_TEXT0_ID + 11,"state"+STR$(task(%part4).channel) END IF SELECT CASE task(%part4).patch CASE 9, 13, 17 IF (task(%part6).freq >task(%part6).patch) AND task(%part6).freq < 25 THEN fn = "P4_"+TRIM$(STR$(FIX(FileCount*RND)+1))+".wav" track = ReadWaveData(fn) IF track < 0 THEN ToLog "err reading " + fn: EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME END IF CASE 3,5, 12, 18 'play last file made fn = "P4_"+TRIM$(STR$(FileCount))+".wav" track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 1, 4, 16,21, 25 'play random file IF filecount < 8 THEN fn = "P4_"+TRIM$(STR$(FIX(FileCount*RND)+1))+".wav" ELSE fn = "P4_"+TRIM$(STR$(Filecount-INT(RND*6)))+".wav" 'last 6 samps now, other ones still played (case 9, 13, 17) END IF IF fn = "" THEN EXIT SUB track = ReadWaveData(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME CASE 27, 29 fn = AE.filenam(AE.FC- (30 - task(%part4).patch)) track = ReadWaveData(fn) PlayAudioTrack track, %MODULATE_VOLUME CASE 31 task(%part6).patch = %false IF task(%part6).freq > 3 THEN task(%part6).freq = task(%part4).freq * .8 END IF END SELECT END SUB SUB VR1_Repeat LOCAL track AS LONG LOCAL track2 AS LONG LOCAL fn AS ASCIIZ * 15 STATIC LastTime AS DWORD STATIC last AS DWORD STATIC pan AS SINGLE STATIC pangrowth AS SINGLE IF ISFALSE panGrowth THEN pangrowth = .2 ' IF (task(%repeat).flags AND %TASK_BUSY) THEN EXIT SUB IF (TimeGetTime - LastTime) < 14000 THEN EXIT SUB 'shut up at least 14 s 'if voice keeps silent, start repeating and granustretching its sounds IF AE.FC < 3 THEN EXIT SUB SELECT CASE task(%repeat).channel CASE 0 'waiting for silence IF (timeGetTime - TimFirstRec)/1000 - AE.TimRec(AE.FC-1) > 8 THEN '8 s. silence 'tijd verstreken sinds 1ste samp time laatste samp INCR task(%Repeat).channel task(%repeat).patch = %false task(%repeat).freq = .5 END IF CASE ELSE ' ToLog "repeat " + STR$(Task(%Repeat).patch) SELECT CASE Task(%Repeat).patch CASE 0 fn = AE.filenam(task(%Repeat).channel-1) track = ReadWavedata(fn) IF track < 0 THEN ToLog "can't read wave @ VR1_Repeat" + fn + STR$(AE.FC) EXIT SUB END IF IF track > 12 THEN Free track Task(%Repeat).channel = 0 LastTime = TimeGetTime EXIT SUB END IF NormalizeWave WavHdr(track), 80 IF WaveDuration(WavHdr(track)) < 2300 THEN track2 = StretchTrack (track, 960, 1.2) ELSE track2 = StretchTrack (track, 960, 0.8) END IF ResizeAudioTrack track, %false IF track2 < 0 THEN IF trackduration(track) THEN ResizeAudioTrack track, %false EXIT SUB END IF pan = pan + pangrowth IF pan >= 5 THEN pangrowth = -.2 IF pan <= .2 THEN pangrowth = .2 NorMalizeWave WavHdr(track2), 80 LeftChanTostereo track2 , pan SaveAudioTrack fn,track2 INCR Task(%Repeat).patch CASE ELSE DECR Task(%Repeat).patch fn = AE.filenam(task(%Repeat).channel - 1) track = ReadWavedata(fn) IF track < 0 THEN EXIT SUB ' ToLog "track:" + STR$(track) PlayAudioTrack track, %MODULATE_VOLUME INCR Task(%Repeat).channel IF Task(%Repeat).channel > AE.FC THEN Task(%Repeat).freq = 5 Task(%Repeat).channel = 0 LastTime = TimeGetTime EXIT SUB END IF END SELECT END SELECT END SUB SUB VR1_Repeat2 LOCAL track AS LONG LOCAL track2 AS LONG LOCAL fn AS ASCIIZ * 15 LOCAL grainLength AS DWORD LOCAL NrGrains AS DWORD IF (task(%AEMaster).flags AND %TASK_ONOFF) THEN StopTask %AEMaster IF ISFALSE task(%repeat2).channel THEN task(%repeat2).channel = 1 SELECT CASE Task(%Repeat2).patch CASE 0 INCR Task(%Repeat2).patch fn = AE.filenam(task(%Repeat2).channel-1) track = ReadWavedata(fn) IF track < 0 THEN ToLog "can't read wave @ VR1_Repeat2" + fn + STR$(AE.FC) EXIT SUB END IF IF track > 12 THEN Free track ToLog "exit repeat 2 @ track > 12" + STR$(track) EXIT SUB END IF IF WaveDuration(WavHdr(track)) < 4000 THEN NormalizeWave WavHdr(track), 70 Grainlength = 1536 NrGrains = CalcNrOfGrains(track, GrainLength) DIM Arr (0 TO NrGrains -1, 0 TO GrainLength) AS LOCAL INTEGER GranulateTrack track ,3, Arr() 'Free track ResizeAudioTrack track, %false IF TrackDuration(track) THEN tolog "ERR!! resize 0 failed !!" track = GranuSynth (Arr(), 1536, 1.4) IF track < 0 THEN EXIT SUB END IF LeftChanToStereo track, INT(RND^2 * 6) SaveAudioTrack fn,track IF TrackDuration(track) THEN tolog "ERR!! track not freed @ savetrack !!" END IF CASE ELSE DECR Task(%Repeat2).patch fn = AE.filenam(task(%Repeat2).channel - 1) track = ReadWavedata(fn) IF track < 0 THEN EXIT SUB PlayAudioTrack track, %MODULATE_VOLUME INCR Task(%Repeat2).channel IF Task(%Repeat2).channel >= AE.FC THEN Task(%Repeat2).channel = 2 EXIT SUB END IF END SELECT END SUB '____________________________ ' !!! 'keep this for other part !!! '_________________________!!! 'SUB VR1_Partx ' LOCAL fn AS ASCIIZ * 60 ' LOCAL track AS LONG ' STATIC OldFc AS LONG ' STATIC FileCount AS LONG ' IF OldFc<> AE.FC THEN ' OldFc = AE.FC ' ' FileCount = 0 ' task(%partx).channel = %false 'channel used as a flag here, means new file recorded ' task(%partx).patch = %false ' END IF ' INCR task(%partx).patch '' ToLog STR$(task(%part1).patch) ' SELECT CASE task(%Partx).patch ' CASE 0 ' IF ISFALSE task(%part1).channel THEN ' fn = ($SamplePath + "m4.wav") ' track = StretchMod (AE.filenam(AE.FC-1),fn) ' IF track < 0 THEN ' ToLog "track < 0 @ P1 CASE 0" ' EXIT SUB ' END IF ' INCR FileCount ' fn = "Px_" + TRIM$(STR$(FileCount)) + ".wav" ' SaveAudioTrack fn, track ' END IF ' CASE 1 ' IF FileCount > 0 THEN ' fn = "Px_"+TRIM$(STR$(FIX(RND * FileCount) + 1)) + ".wav" ' ' ToLog (fn) ' PlayWaveFile fn,%MODULATE_VOLUME ' END IF ' CASE 2 ' CASE 3 ' IF ISFALSE task(%partx).channel THEN ' fn = $SamplePath + "m6.wav" ' track = StretchMod (AE.filenam(AE.FC-1), fn) ' ' ToLog "track " + STR$(track) + " " + fn ' IF track < 0 THEN ' ToLog "track < 0 @ P1 CASE 3" ' EXIT SUB ' END IF ' INCR FileCount ' fn="Px_" + TRIM$(STR$(FileCount)) + ".wav" ' ' ToLog "Save" + fn ' SaveAudioTrack fn, track ' END IF ' CASE 4 ' IF FileCount > 0 THEN ' fn = "Px_"+TRIM$(STR$(FIX(RND * FileCount) + 1)) + ".wav" ' PlayWaveFile fn, %MODULATE_VOLUME ' END IF ' CASE 5 ' CASE 6 ' CASE 7 ' CASE 8 ' IF ISFALSE task(%partx).channel THEN ' fn= $SamplePath + "m5.wav" ' track = StretchMod (AE.filenam(AE.FC-1),fn) ' IF track < 0 THEN ' ToLog "track < 0 @ P1 CASE 8" ' EXIT SUB ' END IF ' INCR FileCount ' fn = "Px_" + TRIM$(STR$(FileCount)) + ".wav" ' SaveAudioTrack fn, track ' task(%partx).channel = 1 ' END IF ' CASE 9 ' IF FileCount > 0 THEN ' fn = "Px_"+TRIM$(STR$(FIX(RND * FileCount) + 1)) + ".wav" ' PlayWaveFile fn, %MODULATE_VOLUME ' END IF ' CASE 10 ' task(%Partx).patch = %false ' END SELECT 'END SUB SUB VR_RecordWaves 'debugged and ok, buth watch out with assigning and freeing tracks that could allready be in use!!! 'look for a sound, preceeded and followed by silence, put it in a track, pass the number to RWH STATIC TrackRead AS LONG 'van recordbuffer STATIC TrackWrite AS LONG 'naar bijhoud buffer STATIC initialised AS INTEGER STATIC TLastRead AS DWORD 'tijd v/ einde laatst lezing v e stuk v d buffer in ms STATIC pGenRead AS INTEGER PTR ' pointer to information read from buffer that is being recorded STATIC pGenWrite AS INTEGER PTR 'pointer to place in trackwrite where new information will be stored STATIC SampCall AS WORD 'samples per call of this task '!! make constants for this ?? STATIC MsPCall AS DWORD 'milli seconds per call STATIC cSilent AS DWORD 'counter of silent samples LOCAL SamCount AS WORD 'samplecounter LOCAL TotVol AS INTEGER 'max vol i/e stuk sample LOCAL Lp AS LONG LOCAL dummy AS INTEGER IF (task(%RecTask).flags AND %TASK_BUSY) THEN EXIT SUB IF ISFALSE initialised THEN initialised = %true Audio.ToDisk = %false SamPCall = %CD_SR/task(%RecTask).freq 'AudioFormat.nSamplesPerSec/task(%RecTask).freq MsPCall = 1000/Task(%RecTask).freq EXIT SUB END IF IF BIT (AE.flag, 0) THEN 'start recording BIT RESET AE.flag, 0 TrackRead = RecordAudioSample(10000) ' 10", was: (AE.Duur(AE.fc)) TrackWrite = GetFreeAudioTrack IF (TrackWrite < 0) OR (TrackRead<0) THEN 'no free track BIT SET AE.flag, 0 FreeTrack TrackRead FreeTrack TrackWrite EXIT SUB END IF WavHdr(TrackWrite).dwflags = %false '? SizeAudioTrack TrackWrite, MsPCall pGenRead = WavHdr(TrackRead).lpData pGenWrite = WavHdr(TrackWrite).lpData tLastRead = timeGetTime task(%RecTask).patch =%false '0 = recoring started, no storing yet 1=silence, no storing yet, 2 = storing EXIT SUB END IF IF ISFALSE TrackStatus.Recording(TrackRead) THEN 'this should prevent reading further then the defined buffer boundary, without further checking FreeTrack TrackRead FreeTrack TrackWrite BIT SET AE.flag, 0 'this makes it a ever continuing task, without master interference!! EXIT SUB END IF IF TLastRead + MspCall >= timeGetTime THEN 'happens often, wait until more data recorded ! EXIT SUB END IF 'de SamPCall samples na pNext kunnen nu veilig gelezen worden TotVol = %false SamCount = %false DO WHILE SamCount < SamPCall @pGenWrite = @pGenRead IF @pGenRead > TotVol THEN TotVol = @pGenRead END IF INCR pGenWrite :INCR pGenWrite 'twice > only left channel copied, other channel free > for speed 'no relevant difference between signals on different channels INCR pGenRead :INCR pGenRead INCR SamCount LOOP WHILE SamCount < SamPCall tLastRead = timeGetTime SELECT CASE TAsk(%RecTask).Patch 'houd bij of we aan het opnemen zijn/ aan het wachten op stilte of signaal CASE 0 'wachten op stilte voor signaal ' SetDlgItemText hCockpit, %GMT_TEXT0_ID + 10, "Waiting for silence" pGenWrite = WavHdr(TrackWrite).lpData 'begin wordt volgende keer gewoon weer overschreven IF TotVol 1 THEN cSilent = %false TAsk(%RecTask).Patch = 1 EXIT SUB END IF ELSE cSilent = %false END IF EXIT SUB CASE 1 'silence, waiting for signal ' SetDlgItemText hCockpit, %GMT_TEXT0_ID + 10, "Waiting for signal" IF TotVol > AE_NoiseFloor THEN Task(%RecTask).Patch = 2 ' Lp = WavHdr(TrackWrite).lpData '< !!!!!!!! resizeaudiotrack can change pointer!!!!! ResizeAudioTrack TrackWrite, WaveDuration(WavHdr(TrackWrite)) + MsPCall pGenWrite = pGenWrite + WavHdr(TrackWrite).lpData - Lp ELSE pGenWrite = WavHdr(TrackWrite).lpData 'begin wordt volgende keer gewoon weer overschreven END IF EXIT SUB CASE 2 'current noise is being stored, stop on silence IF TotVol 1 THEN cSilent=%false WaveInStop Audio.hWi FreeTrack TrackRead IF WavHdr(TrackWrite).dwBufferlength < ((SamPCall *4) * 8) THEN SetDlgItemText gh.Cockpit, %GMT_TEXT0_ID + 10, "Recording failed, sound too short" FreeTrack TrackWrite BIT SET AE.flag, 0 EXIT SUB 'too short to save, probably just a click END IF IF ISFALSE task(%RWH).switch AND %TASK_BUSY THEN task(%RWH).channel = TrackWrite StartTask %RWH ELSE MSGBOX "ERROR can't start RecWaveHandler" END IF BIT SET AE.flag, 0 ' this makes it a ever continuing task, without master interference!! EXIT SUB END IF ELSE cSilent = %false END IF 'not saved yet, new bufferlength '!!!!!!!! resizeaudiotrack can change pointer (15 THEN MSGBOX "will stop RWH" StopTask %RWH EXIT SUB END IF IF ISFALSE TimFirstRec THEN TimfirstRec = timeGetTime END IF AE.TimRec(AE.FC) = (timeGetTime - TimFirstRec)/1000 'secondes TrimWave WavHdr(Task(%RWH).channel),AE_NoiseFloor AE.duur(AE.FC) = WaveDuration(WavHdr(Task(%RWH).channel))'1000 * WavHdr(trackwrite).dwBufferLength / %BytesPSec 'Audioformat.nAvgBytesPerSec ResizeAudioTrack Task(%RWH).channel,AE.duur(AE.FC) ' LeftChanToStereo BYVAL Task(%RWH).channel GetFN 'put new filname in place SaveAudioTrack AE.filenam(AE.fc),Task(%RWH).channel ' >naar AESampleProc SetDlgItemText gh.Cockpit, %GMT_TEXT0_ID + 10,STR$(AE.FC + 1) + " Recorded" IncrFc 'increase file counter >naar AESampleProc BIT SET AE.flag, 3 task(%RWH).channel = 17'NOT %false StopTask %RWH END SUB SUB VR1_ToLog(a$) STATIC f AS LONG STATIC init AS LONG IF ISFALSE init THEN f = FREEFILE OPEN "VR1_log.txt" FOR APPEND AS f init = %true ToLog "___RESTART LOG_____________________" END IF WRITE# f, timeGetTime , a$ END SUB 'SUB VR_PlayWaves '=%PlayTask ' LOCAL i AS WORD ' LOCAL track AS LONG ' LOCAL retval AS LONG ' IF ToPlay = "" THEN EXIT SUB ' track = ReadWaveData(ToPlay) ' SELECT CASE track ' CASE < 0 ' MSGBOX "PW ERR can't play "+ToPlay +"now" ' EXIT SUB ' CASE < 15 ' CASE ELSE ' MSGBOX "PW all tracks occupied ' EXIT SUB ' END SELECT ' PlayAudioTrack track, %Modulate_volume ' ToPlay = "" 'END SUB 'FUNCTION AE_Wave2Env (BYVAL track AS LONG,BYVAL fct AS DWORD) AS LONG ' LOCAL SamCount AS LONG ' LOCAL pSamp AS INTEGER PTR ' LOCAL pPrevL AS INTEGER PTR ' LOCAL MaxSam AS LONG ' MaxSam = WavHdr(track).dwBufferlength ' SHIFT RIGHT MaxSam, 2 ' pSamp = WavHdr(track).lpData ' @pSamp = 0 ' pPrevL = pSamp ' INCR pSamp: INCR pSamp ' BIT SET SamCount, 0 ' DO ' @pSamp = fct*ABS(@pPrevL) + ABS(@pSamp) ' @pSamp = INT(ABS(@pSamp)/(fct+1)) '@pSamp = SHIFT RIGHT @pSamp, 4) ' INCR pSamp ' INCR pPrevL: INCR pPrevL ' @pSamp = -@pPrevL ' INCR pSamp ' INCR SamCount ' LOOP WHILE SamCount < MaxSam ' 'END FUNCTION 'EOF