根据其文档中的高级描述,AVAudioEngine
可以从AVAudioBuffer
或文件中读取数据。如果内存中的音频数据为PCM格式,则可以使用AVAudioPlayerNode
及其各种scheduleBuffer: ...
方法来实现。但是,这些仅接受AVAudioPCMBuffer
。
是否可以将压缩数据注入AVAudioEngine
实例中以进行回放?也许我没有见过的其他节点类型能够接受AVAudioCompressedBuffer
而不是PCM。我只对可在iOS 8.0及更高版本中使用的解决方案感兴趣(因此,使用AVAudioConverter
(仅在9.0及更高版本中受支持)对我不可行)。
我已经考虑过使用Audio Toolbox框架中的AudioConverter
,但是不幸的是,使用它们会非常棘手:我正在使用通过AudioFileStream
馈送的数据源(同样来自Audio Toolbox)来解析容器格式,但是该API仅能够通过回调将其推送给我来提供数据,AudioConverter
希望能够通过回调将其从我那里获取,烦人的棘手(我真的不想为处理启动一个专用线程,但这似乎是解决此问题的唯一可行方法)。
我还看到了提到的Audio Queues API和AUGraph
API,但是这两者似乎都非常低级……是否适合这种使用?
(这与Play audio on iOS from a memory data stream相似,但与 quitem 相同,因为在这种情况下,没有提及使用压缩音频,这确实会影响可用选项)>