在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?

Posted

技术标签:

【中文标题】在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?【英文标题】:Optimal way to convert from 16-bit linear PCM audio to 32-bit floating point in C/C+? 【发布时间】:2014-02-26 21:17:54 【问题描述】:

在 C 或 C++ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法是什么?

【问题讨论】:

最优在什么意义上?最有效的方法? 一次一个样本,优化它的意义不大。或者使用众多可用的音频支持库之一。 由于您似乎正在为 ios 和/或 MacOSX 进行开发,因此 Accelerate Framework 值得一看。 您是否对其进行了分析以确保它是您的应用实际花费时间的地方? 最快的可能是vDSP_vflt16其次是vDSP_vsdiv 【参考方案1】:

简单:

std::vector<int16_t> PCM = foo();
std::vector<float> audio(begin(PCM), end(PCM));

您可以期望这是 1000 倍实时。

【讨论】:

以上是关于在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 PCM 16 位音频转换为 PCM 8 位

从线性 PCM 中提取音频通道

如何在 Windows 中从任何格式转换为 PCM

签名的 16 位 PCM 转换不起作用。为啥?

混合 PCM 音频样本

将 32 位浮点数转换为 16 位 PCM 范围