OpenSL的文档,其中说明 “支持的格式包括WAV PCM,WAV alaw,WAV ulaw,MP3,Ogg Vorbis,AAC LC,HE-AACv1(aacPlus),HE-AACv2(增强型aacPlus),AMR和FLAC [前提是整体平台支持这些格式,和AAC格式必须位于MP4或ADTS容器中。不支持MIDI.WMA不是开源版本的一部分,并且尚未验证与Android OpenSL ES的兼容性。“
在其他地方,在论坛中,我已经读过Android上的OpenSL不支持任何压缩格式的解码。由于使用OpenSL API实现解码器似乎是一项需要至少花费几个小时才能完成的任务,我很想知道,如果我能够确定一旦我为解码提供了所有必需的样板代码我不会惊讶于无法读取任何压缩格式,尤其是OGG。
答案 0 :(得分:2)
使用OpenSL解码ogg vorbis有效。它甚至可以进行采样率转换,这很方便。虽然我发现流的末尾没有用事件SL_PLAYEVENT_HEADATEND
发出信号。如果mp3
或wav
'解码',则会调度此事件。这不是一个交易破坏者,b / c你可以弄清楚解码是以其他方式完成的。
我最终将ogg vorbis来源添加到我的项目中,因为我希望能够更好地控制解码:这样我可以事先告诉解码剪辑有多长,例如,我必须进行采样率转换自己。