[futurebasic] Re: [FB] Pascal MyHalveFreq Function...

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : October 1998 : Group Archive : Group : All Groups

From: Chris.Young@...
Date: Wed, 21 Oct 1998 08:55:00 -0500
Eric,

Here is a translation of what you posted (the source is actually Pascal, not C 
<g>).

-------------- Pascal source --------------------
FUNCTION MyHalveFreq (mySndChan: SndChannelPtr): OSErr;
VAR
    myRate:     LongInt;          {rate of sound play} 
    mySndCmd:   SndCommand;       {a sound command}
    myErr:      OSErr;
    BEGIN
    {Get the rate of the sample currently playing.}
    mySndCmd.cmd := getRateCmd;   {the command is getRateCmd}
    mySndCmd.param1 := 0;         {unused}
    mySndCmd.param2 := LongInt(@myRate);
    myErr := SndDoImmediate(mySndChan, mySndCmd);

    IF myErr = noErr THEN
    BEGIN
        {Halve the sample rate.}
        mySndCmd.cmd := rateCmd;   {the command is rateCmd}
        mySndCmd.param1 := 0;      {unused}
        mySndCmd.param2 := FixDiv(myRate, $00020000);
        myErr := SndDoImmediate(mySndChan, mySndCmd);
    END;
    MyHalveFreq := myErr;
END;

--------------- FB translation ------------------------

CLEAR LOCAL
DIM myRate&
DIM mySndCmd.sndCSize
DIM myErr
LOCAL FN MyHalveFreq (mySndChan&)
    'Get the rate of the sample currently playing.
    mySndCmd.cmd% = _getRateCmd    ' the command is getRateCmd}
    mySndCmd.param1% = 0            ' unused}
    mySndCmd.param2& = @myRate&
    myErr = FN SndDoImmediate(mySndChan&, mySndCmd)

    LONG IF myErr = noErr
        ' Halve the sample rate
        mySndCmd.cmd% = _rateCmd    ' the command is rateCmd
        mySndCmd.param1% = 0        ' unused
        mySndCmd.param2& = FN FixDiv(myRate&, &H00020000)
        myErr = FN SndDoImmediate(mySndChan&, mySndCmd)
    END IF

END FN = myErr

untested, but should work.

Chris Young