내 질문에 더 컨텍스트를 보려면 여기를 참조하십시오 : 나는의 오디오 포맷 PCM이있는 24 비트 WAV 파일이 https://gamedev.stackexchange.com/questions/136817/how-to-get-sdl2-to-play-32bit-wav-files32 비트 위해 24 비트 WAV 파일을 변환하는 방법 동안 유지 오디오 포맷 PCM = 1 (선형 양자화)
1, 여기를 참조하십시오 :to AudioFormat
ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s16le output.wav
을 사용하여 16 비트로 내 WAV 파일 (24 비트)을 변환 할 때 오디오 형식 PCM = 0x001을 유지합니다.
ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s32le output.wav
을 사용하는 경우 오디오 형식 PCM = 0xfffe.
SDL2은 (부모의 문제에서 볼 수 있듯이) 파일 만 리니어 PCM 오디오 포맷 (1)과 함께 재생할 수 있습니다, 어떻게 SDL2로 (32 비트 위쪽 내 24 비트 WAV 파일을 변환 sox
또는 ffmpeg
를 사용하여 어떻게 확실하지 오전에만 32 비트 및 16 비트 재생).
내가 묻는 것은 가능한가? WAV 파일에 대한 더 많은 정보와 ffmpeg가 헤더 번호를 변경하는 이유는 크게 감사하겠습니다.
파일의 16 진수를 수동으로 편집하여 정상적인 방법으로 재생할 수 있는지 알아 봅니다. ffmpeg에 관한 몇 가지 버그 리포트가 확장 가능한 포맷과 관련된 몇 가지 유사한 문제와 관련되어 있음을 알 수 있습니다. 그 라인은 특히 (> 2 channels = false, sample_rate> 48k = false, av_get_bits_per_sample> 16 = true (아마도 함수/매크로를 살펴 봐야 할 것입니다.)), 그걸 가지고 놀고 뒤로. 이 문제를 조사해 주셔서 감사합니다. – jake
Vim을 사용하여 WAV 헤더의 바이트 20과 21을 'fe ff' (0xfffe)에서'01 00' (0x0001)으로 편집하면 SDL2 (상위 게시물)에서 부호있는 32 비트 리틀 엔디안 오디오를 완벽하게 재생할 수 있습니다. 이 문제를 버그로보고하는 방법에 대해서는 확실치 않지만 어쨌든 들어 본 적이 없지만 "확장 가능 파형 형식"에 대한 이유가있을 수 있습니다. – jake
나는 여기서 SDL2가 잘못이라고 생각한다. 원래 WAVE 사양은 8 비트 및 16 비트 샘플 만 허용했습니다. 최신 사양을 사용하면 샘플 깊이와 속도를 높일 수 있습니다. 버그 보고서는 SDL 프로젝트에 제출해야합니다. – Mulvya