c++ - FFMPEG 音频解码 : efficient conversion from short to float sample buffer

标签 c++ ffmpeg type-conversion audio-processing

我正在使用 FFMPEG avcodec_decode_audio 解码各种类型的音频输入文件。生成的样本类型为 SHORT。

这些示例由另一个库处理,该库需要 FLOAT 输入格式的示例。最后,为了回放(在 Android 上),我需要再次将 FLOAT 样本转换回 SHORT:

short* inputSamples = ...;
float* tmpBuffer = new float[nrInputSamples];
for (int i=0; i<nrInputSamples; i++)
  tmpBuffer[i] = inputSamples[i]/32767.0f;

//process audio here

for (int i=0; i<nrInputSamples; i++)
  inputSamples[i] = tmpBuffer[i]*32767.0f;

有没有更有效的方法(例如强制 ffmpeg 将音频解码为 FLOAT 样本)?

问候,

最佳答案

使用 ffmpeg 库中包含的“swresample”库,它存在于此类情况。您可以在他们的代码存储库中找到有关如何执行此操作的示例。

关于c++ - FFMPEG 音频解码 : efficient conversion from short to float sample buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816183/

相关文章:

c++ - 将字符数组传递给 CUDA 内核

ffmpeg - MacOS上如何使用FFmpeg录制多屏?

c++ - 动态类型的调用方法,不是静态的

c++ - 基于 dlopen 的应用程序第二次运行不同(错误)

c++ - Direct3D 9 阴影贴图混合模式

c++ - C++静态库中的共享全局变量 : Linux

c++ - bool 数组在衰减方面的处理方式不同吗?

FFMPEG:rtsp 流到 udp 流

linux - 使用 pkg-config 找不到错误 : dav1d >= 0. 2.1

在 Win DLL 到 Linux SO 转换中将 LPBYTE 更改为 unsigned char* 后出现 C++ 编译器错误