我想问是否有比逐个遍历所有值并将它们除以 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 时,您需要在编译要使用的 pragma
时传递 -fopenmp
,在 MSVC 上它是 /openmp
。由于生成线程具有明显的开销,因此只有在处理大型数组 YMMV 时才会更快。
关于C++ 转换优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282549/