在 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 1
到 output 2
和 input 2
到 output 1
。
我如何通过使用 portaudio
来实现?我期待类似 *out.1++ = *in.2++;
的内容,但找不到任何相关信息。
预先感谢您的回答!
out
和 in
是 float
的数组,其中通道是交错的。意思是 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;
}
目前正在使用 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
的数组,其中通道是交错的。意思是 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;
}