端口音频处理立体声

Posted

技术标签:

【中文标题】端口音频处理立体声【英文标题】:Port Audio process stereo 【发布时间】:2015-06-02 14:42:22 【问题描述】:

我是 PortAudio 的新手。我将它与 C++ Wrapper 标头一起使用。

http://sdr.f4gkr.org/trac/browser/gkSDR/Logiciel/audio/pawrapper.h?rev=5

我需要知道如何才能接收立体声输入并将其分解为两个单独的通道。

我正在通过此代码从一个通道输入。

  inputStreamParam.channelCount = 2;
  inputStreamParam.device = Pa_GetDefaultInputDevice();
  inputStreamParam.sampleFormat = paFloat32;
  inputStreamParam.suggestedLatency = suggestedLatency;
  inputStreamParam.hostApiSpecificStreamInfo = NULL;

  if(outputStreamParam.device > 0)
    sampleRate = getDefaultSampleRate(outputStreamParam.device);
  else
    sampleRate = 44100.0;

  frameLength = 1024; //set to a useful value

int paWrapper::startAudio(void)

  if(isRunning) return pawErrorAudioIsRunning;
  isRunning=true;
  err = Pa_OpenStream(&stream,
                      &inputStreamParam,
                      &outputStreamParam,
                      sampleRate,
                      frameLength,
                      paNoFlag,
                      &paWrapper::paStaticCallback,
                      this);

  if(err != paNoError)
  
    isRunning=false;
    return err;
  
  int err = Pa_StartStream( stream );
  if(err != paNoError)
    isRunning=false;
  return err;

我应该如何修改才能通过我的立体声麦克风分别获取两个通道,然后分别处理它们?

【问题讨论】:

【参考方案1】:

当您调用Pa_OpenStream(...) 时,倒数第二个参数是一个回调函数,这是音频处理的核心。看起来您的包装器正在使用函数paStaticCallback。通过查看包装器,我看到它调用了另一个函数userdata->processingCallBack(...),这是Pa_OpenStream(...) 函数的最后一个参数。您已将this 作为参数放在那里。

所以你需要重写processingCallback()函数。

PortAudio 文档中有更多详细信息,但该函数中的第一个参数是指向输入缓冲区的 void 指针。如果您有立体声输入,则每个通道都会交错。

例如,如果您以每个样本 16 位进行记录,则该缓冲区的前两个字节(16 位)将是左通道样本,接下来的 2 个字节将是右通道样本。然后会重复。

您可以在该回调函数中提取每个通道。

当我在使用 PortAudio 时,examples 的例子对我很有帮助。

Here 是一个记录音频、将其存储在内存中并进行播放的示例。密切关注recordCallbackplayCallback

祝你好运。

【讨论】:

以上是关于端口音频处理立体声的主要内容,如果未能解决你的问题,请参考以下文章

音频处理使用 Adobe Audition 录制电脑内部声音 ( 启用电脑立体声混音 | Adobe Audition 中设置音频设备 | Adobe Audition 内录 )

是否可以将立体声音频输入 Chrome?

iOS音频播放

音频处理Melodyne 导入音频 ( 使用 Adobe Audition 录制音频 | 在 Melodyne 中打开录制的音频 | Melodyne 对音频素材的操作 | 音频分析算法 )

交错立体声 PCM 线性 Int16 大端音频是啥样的?

Android音频开发(三)——音频编解码