有关我的问题的更多背景信息,请参阅此处:https://gamedev.stackexchange.com/questions/136817/how-to-get-sdl2-to-play-32bit-wav-files
我有一个音频格式 PCM 为 1 的 24 位 WAV 文件,请参阅此处:http://soundfile.sapp.org/doc/WaveFormat/至AudioFormat
使用 ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s16le output.wav
将我的 WAV 文件(24 位)转换为 16 位时它保留音频格式 PCM = 0x001。
使用 ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s32le output.wav
时音频格式 PCM = 0xfffe。
SDL2(如在父问题中所见)仅允许文件以线性 PCM 音频格式 (1) 播放,我不确定如何使用 sox
或 ffmpeg
如何将我的 24 位 WAV 文件向上转换为 32 位(因为 SDL2 只能播放 32 位和 16 位)。
我问的可能吗?非常感谢有关 WAV 文件的更多信息以及 ffmpeg 更改 header 编号的原因。
最佳答案
FFmpeg 使用以下代码设置编解码器标签
...
waveformatextensible = (par->channels > 2 && par->channel_layout) ||
par->channels == 1 && par->channel_layout && par->channel_layout != AV_CH_LAYOUT_MONO ||
par->channels == 2 && par->channel_layout && par->channel_layout != AV_CH_LAYOUT_STEREO ||
par->sample_rate > 48000 ||
par->codec_id == AV_CODEC_ID_EAC3 ||
av_get_bits_per_sample(par->codec_id) > 16;
if (waveformatextensible)
avio_wl16(pb, 0xfffe);
...
粗略的尝试是将 0x20 处的 2 个字节替换为
01 00
并尝试。如果这不起作用并且此行为超出规范,则归档 bug report .
关于audio - 如何在保持音频格式 PCM = 1(线性量化)的同时将 24 位 WAV 文件转换为 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048078/