我想问一下是否有比通过一一遍历所有值并将它们除以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时,这样做才会更快。