/* SFX ApplySine */

OPTIONS RESULTS

ADDRESS REXX_SFX

okay=1

IF(~SHOW('l','rexxmathlib.library')) THEN okay=ADDLIB('rexxmathlib.library',0,-30,0)

IF okay=1 THEN DO

	GetActiveBuffer
	buf1=RESULT

	IF buf1>-1 THEN DO
		GetLength buf1
		slen=RESULT
		GetRate buf1
		srat=RESULT
		GetChannels buf1
		cha=RESULT

		NewBuffer slen srat cha
		buf2=RESULT

		pif=0.0001917475985		/* 6.283185307/32768.0 */

		DO ch=0 TO cha
			IF IsChannelActive buf1 ch THEN DO
				title='"Working on ApplySine['ch']"'
				InitProWin slen title
				IF RESULT=1 THEN DO
					DO pos=0 TO slen
						RefrProWin pos
						IF RESULT=0 THEN DO
							GetSampleValue buf1 ch pos
							sval=RESULT*pif
							sval=32767.0*sin(sval)
							PutSampleValue buf2 ch pos sval
						END
						ELSE LEAVE pos
					END
					RemoveProWin
				END
			END
		END
		RedrawActiveBuffer
	END
	ActivateSFX												/* fertig */
END
ELSE say 'resource failure'

EXIT

AppError:PROCEDURE
	cmd=arg(1)
	ret=arg(2)
	SAY '[4m[33mApplication Error[31m[24m';say
	SAY 'Command 'cmd' failed with Returncode 'ret
	SELECT
		WHEN ret='1' THEN SAY '	=> unknown command'
		WHEN ret='2' THEN SAY '	=> unknown parameter'
		OTHERWISE SAY '	=> unknown returncode'
	END
	SAY
RETURN
