【问题标题】: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;
}

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

【问题讨论】:

    标签: c++ audio portaudio


    【解决方案1】:

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

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

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

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

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

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

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

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2022-12-22
      • 2016-08-01
      相关资源
      最近更新 更多