C 在portaudio中管理频道

C 在portaudio中管理频道,c,audio,portaudio,C,Audio,Portaudio,目前正在用C编写一个实时声音应用程序,我正在学习如何使用portaudio 我的第一个问题是我不太了解如何管理频道。 我承认我只想通过portaudio 我认为我的回调函数是: static int fuzzCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer,

目前正在用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 1
发送到
output 2
input 2
发送到
output 1

如何使用
portaudio
实现这一点?我期望类似于
*out.1++=*in.2++但找不到有关此的任何信息


提前感谢您的回答

out
in
是通道交错的
float
数组。在
中,意思是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;
}
static int fuzzCallback(const void*inputBuffer,
void*outputBuffer,
未签名的长帧缓冲,
const Pastream CallbackTimeInfo*timeInfo,
PaStreamCallbackFlags状态标志,
void*用户数据)
{
样本*输出=(样本*)输出缓冲区;
常量样本*输入=(常量样本*)输入缓冲区;
(void)timeInfo;/*防止未使用的变量警告*/
(作废)状态标志;
(作废)用户数据;
for(int i=0;i右
out[i*2]=in[i*2+1];//右->左
}
返回继续;
}

非常感谢您的快速回答!现在看来还管用!