在 portaudio 中管理频道

Managing channels in portaudio

目前正在使用 C 开发实时声音应用程序,我正在学习如何使用 portaudio

我的第一个问题是我不太了解如何管理频道。
承认我只想通过 portaudio.
传递音频 我认为我的回调函数是:

static int fuzzCallback( const  void *inputBuffer,
                            void *outputBuffer,
                            unsigned long framesPerBuffer,
                            const PaStreamCallbackTimeInfo* timeInfo,
                            PaStreamCallbackFlags statusFlags,
                            void *userData )
{
    SAMPLE *out = (SAMPLE*)outputBuffer;
    const SAMPLE *in = (const SAMPLE*)inputBuffer;
    (void) timeInfo; /* Prevent unused variable warnings. */
    (void) statusFlags;
    (void) userData;

    *out++ = *in++; // Left channel
    *out++ = *in++; // Right channel

    return paContinue;
}

现在承认我想切换我的输入并将其发送到我的输出,即发送 input 1output 2input 2output 1

我如何通过使用 portaudio 来实现?我期待类似 *out.1++ = *in.2++; 的内容,但找不到任何相关信息。

预先感谢您的回答!

outinfloat 的数组,其中通道是交错的。意思是 in 是 L1,R1,L2,R2,L3,R3... 输出相同。要交换通道,请在从输入复制到输出时更改索引。

static int fuzzCallback( const  void *inputBuffer,
                         void *outputBuffer,
                         unsigned long framesPerBuffer,
                         const PaStreamCallbackTimeInfo* timeInfo,
                         PaStreamCallbackFlags statusFlags,
                         void *userData )
{
    SAMPLE *out = (SAMPLE*)outputBuffer;
    const SAMPLE *in = (const SAMPLE*)inputBuffer;
    (void) timeInfo; /* Prevent unused variable warnings. */
    (void) statusFlags;
    (void) userData;


    for (int i=0; i < framesPerBuffer; i++)
    {
        out[i*2+1] = in[i*2];   // Left  -> Right
        out[i*2]   = in[i*2+1]; // Right -> Left
    }
    return paContinue;
}