我想问一下是否有比通过一一遍历所有值并将它们除以32768更快的方法来进行音频转换。

void CAudioDataItem::Convert(const vector<int>&uIntegers, vector<double> &uDoubles)
{
    for ( int i = 0; i <=uIntegers.size()-1;i++)
    {
        uDoubles[i] = uIntegers[i] / 32768.0;
    }
}

我的方法效果很好,但可能更快。但是我没有找到任何加快它的方法。

感谢您的帮助!

最佳答案

如果您的数组足够大,则可能值得将此for循环并行化。我将使用OpenMP的parallel for语句。
该函数将是:

    void CAudioDataItem::Convert(const vector<int>&uIntegers, vector<double> &uDoubles)
    {
        #pragma omp parallel for
        for (int i = 0; i < uIntegers.size(); i++)
        {
            uDoubles[i] = uIntegers[i] / 32768.0;
        }
    }

使用gcc时,在编译要使用的-fopenmp时需要传递pragma,在MSVC上是/openmp。由于产生线程有明显的开销,因此只有在处理大型数组YMMV时,这样做才会更快。

09-20 17:46