$DIM ALL $source1 = "c:\b\pb\gmt\mod1.wav" $source2 = "c:\b\pb\gmt\mod2.wav" $desti = "c:\b\pb\gmt\desti.wav" $wavestart = "c:\b\pb\gmt\wavstart.wav" FUNCTION PBMAIN AS LONG LOCAL x AS INTEGER LOCAL s1 AS INTEGER LOCAL s2 AS INTEGER LOCAL d1 AS INTEGER LOCAL startf AS INTEGER LOCAL dummy AS INTEGER LOCAL cso1 AS LONG LOCAL cso2 AS LONG LOCAL cde1 AS LONG LOCAL flag AS INTEGER LOCAL i AS INTEGER LOCAL startlength AS INTEGER s1 = FREEFILE OPEN $source1 FOR BINARY AS #s1 s2 = FREEFILE OPEN $source2 FOR BINARY AS #s2 d1 = FREEFILE OPEN $desti FOR BINARY AS #d1 startf = FREEFILE OPEN $wavestart FOR BINARY AS #startf cso1 = LOF(s1)/2 'length of file in bytes /2 voor integers cso2 = LOF(s2)/2 cde1 = cso1 + cso2 DIM arrs1(0 TO cso1) AS LOCAL INTEGER DIM arrs2(0 TO cso2) AS LOCAL INTEGER DIM arrd1(0 TO cde1) AS LOCAL INTEGER PRINT "Total length:",cde1 %divheight = 32767% cso1 = 0 LOCATE 5,1: PRINT "reading file 1" DO UNTIL EOF(s1) GET #s1 ,,arrs1(cso1) INCR cso1 IF cso1 > UBOUND(arrs1) THEN EXIT LOOP END IF LOOP UNTIL EOF(s1) CLOSE #s1 cso2 = 0 LOCATE 5,1: PRINT "reading file 2" DO UNTIL EOF(s2) GET #s2 ,,arrs2(cso2) INCR cso2 IF cso2 > UBOUND(arrs2) THEN EXIT LOOP END IF LOOP UNTIL EOF(s2) CLOSE #s2 LOCATE 5,1: PRINT "reading file 3" Startlength = LOF(startf) / 2 LOCATE 5,1: PRINT Startlength CLOSE #startf LOCATE 5,1: PRINT "writing file" FOR cde1 = 0 TO StartLength '= waveheader PUT #d1,,arrs1(cde1) NEXT cso1 = startlength + 1 cso2 = cso1 cde1 = cso1 dummy = 0 ' FOR count = (startlength + 1) TO UBOUND(arrs1) DO 'arrs1(count) = arrs1(count)* arrs2(count) /%divheight ' we gebruiken zelfde array om geheugen te sparen ? efficient? x = 0 DO WHILE cso1 < UBOUND(arrs1) IF arrs1(cso1) > 0 THEN '= SGN(arrs1(cso1 - 1)) THEN INCR x arrd1(cde1) = arrs1(cso1) ' PRINT arrd1(cde1) INCR cso1 INCR cde1 ELSE INCR cso1 'INCR cde1 EXIT LOOP END IF LOOP ' IF x <> 0 THEN ' LOCATE 8,1:PRINT cde1,x ' END IF x = 0 DO WHILE cso2 < UBOUND(arrs2) IF arrs2(cso2)<0 THEN ' = SGN(arrs2(cso2 - 1)) THEN INCR x arrd1(cde1) = arrs2(cso2) ' PRINT arrd1(cde1) INCR cso2 INCR cde1 ELSE INCR cso2 'INCR cde1 EXIT LOOP END IF LOOP ' IF x <>0 THEN ' LOCATE 9,1:PRINT cde1,x ' END IF IF cde1 >= UBOUND(arrd1) THEN EXIT LOOP END IF IF (cso1 >= UBOUND(arrs1)) OR (cso2 >= UBOUND(arrs2)) THEN EXIT LOOP END IF LOOP PRINT "loop exited" FOR i = (startlength + 1) TO UBOUND(arrd1) IF ABS(arrd1(i)) > dummy THEN dummy = ABS(arrd1(i)) END IF NEXT LOCATE 10,1:PRINT dummy dummy = dummy + 10 'om clip te voorkomen FOR cde1 = (startlength + 1) TO UBOUND (arrd1) 'normalise arrd1(cde1) = INT(arrd1(cde1) * (%divheight / dummy)) PUT #d1,,arrd1(cde1) IF cde1 MOD 500 = 0 THEN LOCATE 3,1:PRINT cde1 END IF NEXT CLOSE #d1 'einde: END FUNCTION