C 在portaudio中管理频道
目前正在用C编写一个实时声音应用程序,我正在学习如何使用C 在portaudio中管理频道,c,audio,portaudio,C,Audio,Portaudio,目前正在用C编写一个实时声音应用程序,我正在学习如何使用portaudio 我的第一个问题是我不太了解如何管理频道。 我承认我只想通过portaudio 我认为我的回调函数是: static int fuzzCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer,
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];//右->左
}
返回继续;
}
非常感谢您的快速回答!现在看来还管用!