我目前正在使用 C 开发一个实时声音应用程序,我正在学习如何使用 portaudio
。
我的第一个问题是我不太了解如何管理 channel 。
承认我只想通过 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
到 输出 1
。
我如何通过使用 portaudio
来实现?我期待类似 *out.1++ = *in.2++;
但找不到任何相关信息。
预先感谢您的回答!
最佳答案
out
和 in
是 float
数组, channel 交错排列。意思是 in
是 L1,R1,L2,R2,L3,R3... 输出相同。要交换 channel ,请在从输入复制到输出时更改索引。
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;
}
关于c - 在 portaudio 中管理 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900456/