⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pa_process.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
📖 第 1 页 / 共 5 页
字号:
        if( bp->hostOutputChannels[0] == 0 )        {                                                                                 result = paInsufficientMemory;            goto error;        }        bp->hostOutputChannels[1] = &bp->hostOutputChannels[0][outputChannelCount];    }    PaUtil_InitializeTriangularDitherState( &bp->ditherGenerator );    bp->samplePeriod = 1. / sampleRate;    bp->streamCallback = streamCallback;    bp->userData = userData;    return result;error:    if( bp->tempInputBuffer )        PaUtil_FreeMemory( bp->tempInputBuffer );    if( bp->tempInputBufferPtrs )        PaUtil_FreeMemory( bp->tempInputBufferPtrs );    if( bp->hostInputChannels[0] )        PaUtil_FreeMemory( bp->hostInputChannels[0] );    if( bp->tempOutputBuffer )        PaUtil_FreeMemory( bp->tempOutputBuffer );    if( bp->tempOutputBufferPtrs )        PaUtil_FreeMemory( bp->tempOutputBufferPtrs );    if( bp->hostOutputChannels[0] )        PaUtil_FreeMemory( bp->hostOutputChannels[0] );    return result;}void PaUtil_TerminateBufferProcessor( PaUtilBufferProcessor* bp ){    if( bp->tempInputBuffer )        PaUtil_FreeMemory( bp->tempInputBuffer );    if( bp->tempInputBufferPtrs )        PaUtil_FreeMemory( bp->tempInputBufferPtrs );    if( bp->hostInputChannels[0] )        PaUtil_FreeMemory( bp->hostInputChannels[0] );            if( bp->tempOutputBuffer )        PaUtil_FreeMemory( bp->tempOutputBuffer );    if( bp->tempOutputBufferPtrs )        PaUtil_FreeMemory( bp->tempOutputBufferPtrs );    if( bp->hostOutputChannels[0] )        PaUtil_FreeMemory( bp->hostOutputChannels[0] );}void PaUtil_ResetBufferProcessor( PaUtilBufferProcessor* bp ){    unsigned long tempInputBufferSize, tempOutputBufferSize;    bp->framesInTempInputBuffer = bp->initialFramesInTempInputBuffer;    bp->framesInTempOutputBuffer = bp->initialFramesInTempOutputBuffer;    if( bp->framesInTempInputBuffer > 0 )    {        tempInputBufferSize =            bp->framesPerTempBuffer * bp->bytesPerUserInputSample * bp->inputChannelCount;        memset( bp->tempInputBuffer, 0, tempInputBufferSize );    }    if( bp->framesInTempOutputBuffer > 0 )    {              tempOutputBufferSize =            bp->framesPerTempBuffer * bp->bytesPerUserOutputSample * bp->outputChannelCount;        memset( bp->tempOutputBuffer, 0, tempOutputBufferSize );    }}unsigned long PaUtil_GetBufferProcessorInputLatency( PaUtilBufferProcessor* bp ){    return bp->initialFramesInTempInputBuffer;}unsigned long PaUtil_GetBufferProcessorOutputLatency( PaUtilBufferProcessor* bp ){    return bp->initialFramesInTempOutputBuffer;}void PaUtil_SetInputFrameCount( PaUtilBufferProcessor* bp,        unsigned long frameCount ){    if( frameCount == 0 )        bp->hostInputFrameCount[0] = bp->framesPerHostBuffer;    else        bp->hostInputFrameCount[0] = frameCount;}        void PaUtil_SetNoInput( PaUtilBufferProcessor* bp ){    assert( bp->inputChannelCount > 0 );    bp->hostInputChannels[0][0].data = 0;}void PaUtil_SetInputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data, unsigned int stride ){    assert( channel < bp->inputChannelCount );        bp->hostInputChannels[0][channel].data = data;    bp->hostInputChannels[0][channel].stride = stride;}void PaUtil_SetInterleavedInputChannels( PaUtilBufferProcessor* bp,        unsigned int firstChannel, void *data, unsigned int channelCount ){    unsigned int i;    unsigned int channel = firstChannel;    unsigned char *p = (unsigned char*)data;    if( channelCount == 0 )        channelCount = bp->inputChannelCount;    assert( firstChannel < bp->inputChannelCount );    assert( firstChannel + channelCount <= bp->inputChannelCount );    for( i=0; i< channelCount; ++i )    {        bp->hostInputChannels[0][channel+i].data = p;        p += bp->bytesPerHostInputSample;        bp->hostInputChannels[0][channel+i].stride = channelCount;    }}void PaUtil_SetNonInterleavedInputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data ){    assert( channel < bp->inputChannelCount );        bp->hostInputChannels[0][channel].data = data;    bp->hostInputChannels[0][channel].stride = 1;}void PaUtil_Set2ndInputFrameCount( PaUtilBufferProcessor* bp,        unsigned long frameCount ){    bp->hostInputFrameCount[1] = frameCount;}void PaUtil_Set2ndInputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data, unsigned int stride ){    assert( channel < bp->inputChannelCount );    bp->hostInputChannels[1][channel].data = data;    bp->hostInputChannels[1][channel].stride = stride;}void PaUtil_Set2ndInterleavedInputChannels( PaUtilBufferProcessor* bp,        unsigned int firstChannel, void *data, unsigned int channelCount ){    unsigned int i;    unsigned int channel = firstChannel;    unsigned char *p = (unsigned char*)data;    if( channelCount == 0 )        channelCount = bp->inputChannelCount;    assert( firstChannel < bp->inputChannelCount );    assert( firstChannel + channelCount <= bp->inputChannelCount );        for( i=0; i< channelCount; ++i )    {        bp->hostInputChannels[1][channel+i].data = p;        p += bp->bytesPerHostInputSample;        bp->hostInputChannels[1][channel+i].stride = channelCount;    }}        void PaUtil_Set2ndNonInterleavedInputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data ){    assert( channel < bp->inputChannelCount );        bp->hostInputChannels[1][channel].data = data;    bp->hostInputChannels[1][channel].stride = 1;}void PaUtil_SetOutputFrameCount( PaUtilBufferProcessor* bp,        unsigned long frameCount ){    if( frameCount == 0 )        bp->hostOutputFrameCount[0] = bp->framesPerHostBuffer;    else        bp->hostOutputFrameCount[0] = frameCount;}void PaUtil_SetOutputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data, unsigned int stride ){    assert( channel < bp->outputChannelCount );        bp->hostOutputChannels[0][channel].data = data;    bp->hostOutputChannels[0][channel].stride = stride;}void PaUtil_SetInterleavedOutputChannels( PaUtilBufferProcessor* bp,        unsigned int firstChannel, void *data, unsigned int channelCount ){    unsigned int i;    unsigned int channel = firstChannel;    unsigned char *p = (unsigned char*)data;    if( channelCount == 0 )        channelCount = bp->outputChannelCount;    assert( firstChannel < bp->outputChannelCount );    assert( firstChannel + channelCount <= bp->outputChannelCount );        for( i=0; i< channelCount; ++i )    {        bp->hostOutputChannels[0][channel+i].data = p;        p += bp->bytesPerHostOutputSample;        bp->hostOutputChannels[0][channel+i].stride = channelCount;    }}void PaUtil_SetNonInterleavedOutputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data ){    assert( channel < bp->outputChannelCount );    bp->hostOutputChannels[0][channel].data = data;    bp->hostOutputChannels[0][channel].stride = 1;}void PaUtil_Set2ndOutputFrameCount( PaUtilBufferProcessor* bp,        unsigned long frameCount ){    bp->hostOutputFrameCount[1] = frameCount;}void PaUtil_Set2ndOutputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data, unsigned int stride ){    assert( channel < bp->outputChannelCount );    bp->hostOutputChannels[1][channel].data = data;    bp->hostOutputChannels[1][channel].stride = stride;}void PaUtil_Set2ndInterleavedOutputChannels( PaUtilBufferProcessor* bp,        unsigned int firstChannel, void *data, unsigned int channelCount ){    unsigned int i;    unsigned int channel = firstChannel;    unsigned char *p = (unsigned char*)data;    if( channelCount == 0 )        channelCount = bp->outputChannelCount;    assert( firstChannel < bp->outputChannelCount );    assert( firstChannel + channelCount <= bp->outputChannelCount );        for( i=0; i< channelCount; ++i )    {        bp->hostOutputChannels[1][channel+i].data = p;        p += bp->bytesPerHostOutputSample;        bp->hostOutputChannels[1][channel+i].stride = channelCount;    }}        void PaUtil_Set2ndNonInterleavedOutputChannel( PaUtilBufferProcessor* bp,        unsigned int channel, void *data ){    assert( channel < bp->outputChannelCount );        bp->hostOutputChannels[1][channel].data = data;    bp->hostOutputChannels[1][channel].stride = 1;}void PaUtil_BeginBufferProcessing( PaUtilBufferProcessor* bp,        PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags callbackStatusFlags ){    bp->timeInfo = timeInfo;    /* the first streamCallback will be called to process samples which are        currently in the input buffer before the ones starting at the timeInfo time */            bp->timeInfo->inputBufferAdcTime -= bp->framesInTempInputBuffer * bp->samplePeriod;        bp->timeInfo->currentTime = 0; /** FIXME: @todo time info currentTime not implemented */    /* the first streamCallback will be called to generate samples which will be        outputted after the frames currently in the output buffer have been        outputted. */    bp->timeInfo->outputBufferDacTime += bp->framesInTempOutputBuffer * bp->samplePeriod;    bp->callbackStatusFlags = callbackStatusFlags;    bp->hostInputFrameCount[1] = 0;    bp->hostOutputFrameCount[1] = 0;}/*    NonAdaptingProcess() is a simple buffer copying adaptor that can handle    both full and half duplex copies. It processes framesToProcess frames,    broken into blocks bp->framesPerTempBuffer long.    This routine can be used when the streamCallback doesn't care what length    the buffers are, or when framesToProcess is an integer multiple of    bp->framesPerTempBuffer, in which case streamCallback will always be called    with bp->framesPerTempBuffer samples.*/static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -