【问题标题】:More efficient int to double -- PortAudio, FFTW -- C/C++更高效的 int to double -- PortAudio, FFTW -- C/C++
【发布时间】:2014-04-02 00:47:02
【问题描述】:

我编写了一个程序来使用 PortAudio 打开音频流,获取数据缓冲区,并使用 FFTW3 库对该数据进行 FFT。然后在完整程序中处理 FFT 数据并重复程序直到用户停止。我能够让 PortAudio 和 FFTW 一起工作的唯一方法是将 PortAudio 数据(有符号的 16 位 int,paInt16)转换为这样的两倍:

    /* Create left and right array -- int to double */
    k = 0;
    for ( i=0; i<data.maxFrameIndex*2; i++ ) {
        myData.inL[k] = data.recordedSamples[i]; // myData is type double
        i++;
        myData.inR[k] = data.recordedSamples[i];
        k++;
    }

由于该过程不断重复并且速度非常必要,我想知道是否有人对更有效的转换方法有想法,或者更优选地,根本不转换。由于 FFTW 要求你预先分配一个输入/输出缓冲区并创建一个 FFT 计划,所以我最初的想法是只给 PortAudio 输入缓冲区的地址,但 PortAudio 没有双输入类型。

我也在寻找一种更有效的音频录制方式。当前进程正在调用 PaStartStream(stream),等待缓冲区填充,调用 PaStopStream(stream),处理并重复。让流保持打开状态并在必要时调用回调函数似乎更有效。你告诉我!

感谢您的帮助,如果更多信息对您有帮助,请告诉我。

【问题讨论】:

    标签: type-conversion fftw processing-efficiency portaudio


    【解决方案1】:

    将短整数转换为双精度整数会​​很快。你有没有介绍过这个?不知道是不是瓶颈?

    Pa_ReadStream 可能是你想要的更多,而不是使用回调。然后,您可以填充缓冲区并就地处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多