c - 在 portaudio 中管理 channel

标签 c audio portaudio

我目前正在使用 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 2input 2输出 1

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

预先感谢您的回答!

最佳答案

outinfloat 数组, 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/

相关文章:

c - 如何修复移动功能

android - 未处理的IO异常?使用媒体播放器播放mp3文件-Android

audio - anchor 上的替代声音效果

c - PortAudio 麦克风捕获,单独的 channel 值

c++ - PortAudio:通过调用函数播放多个生成的声音

c - 使用静态数组初始化常量结构对象

c - 如何通过检查周围的所有数字是否都小于它来查找局部最大值来遍历二维数组?

c++ - 如何在 Linux 上可靠地监控驱动器挂载/卸载?

php - 当Wordpress中的链接标签中有mp3时如何生成音频短代码

c++ - 什么是样本格式?