有关我的问题的更多上下文,请参考这里:https://gamedev.stackexchange.com/questions/136817/how-to-get-sdl2-to-play-32bit-wav-files
我有一个24位的WAV文件,它的音频格式为1,请参阅这里:http://soundfile.sapp.org/doc/WaveFormat/ to 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更改头号的信息将是非常感谢的。
发布于 2017-02-05 05:40:06
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);
...一个粗略的尝试就是用01 00替换0x20的2个字节,然后尝试。如果这不起作用,而且这种行为是不规范的,那么就提交一个错误报告。
https://stackoverflow.com/questions/42048078
复制相似问题