예제 #1
0
    PaStreamCallbackResult SineCallback(
        PaBuffer input, PaBuffer output,
        int frameCount, PaStreamCallbackTimeInfo timeInfo,
        PaStreamCallbackFlags statusFlags, object userData)
    {
        var outBuffer = (PaBuffer <float>)output;
        var outSpan   = outBuffer.Span;

        if (note >= 0)
        {
            for (int n = 0; n < frameCount; n++)
            {
                outSpan[n] = (float)Sin(osc);
                osc       += delta;
            }
            osc = osc % (2 * Math.PI);
        }
        else
        {
            for (int n = 0; n < frameCount; n++)
            {
                outSpan[n] = 0;   // silence;
            }
        }
        return(PaStreamCallbackResult.paContinue);
    }
예제 #2
0
        private static PaStreamCallbackResult SineCallback(
            PaBuffer input, PaBuffer output,
            int frameCount, PaStreamCallbackTimeInfo timeInfo,
            PaStreamCallbackFlags statusFlags, object userData)
        {
            var data      = (SineCallbackData)userData;
            var outBuffer = (PaBuffer <float>)output;
            var outSpan   = outBuffer.Span;

            for (int n = 0; n < frameCount; n++)
            {
                outSpan[n] = 0.1f * (float)data.osc.Real;
                data.osc  *= data.delta;;
            }
            data.osc *= (3 - (data.osc.Real * data.osc.Real + data.osc.Imaginary * data.osc.Imaginary)) / 2;
            return(PaStreamCallbackResult.paContinue);
        }