更高效的int to double - PortAudio,FFTW - C / C ++

问题描述 投票:2回答:1

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

    /* 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(流),等待缓冲区填充,调用PaStopStream(流),处理并重复。保持流打开并在必要时调用回调函数似乎更有效。你告诉我!

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

type-conversion fftw processing-efficiency portaudio
1个回答
0
投票

将短整数转换为双精度将非常快。你有没有想过这个?你知道这是不是一个瓶颈?

Pa_ReadStream可能更符合你的需求,而不是使用回调。然后你可以填充缓冲区并将其处理到位。

© www.soinside.com 2019 - 2024. All rights reserved.