我想要播放一个mp3,而不是使用RemoteIO / AudioUnit未压缩的文件。 使用未压缩的文件显然使用了太多的磁盘空间(30MB VS 3MB的MP3)。

这甚至可能吗?如果是这样,你能提供一些代码领先地位?

由于一百万。

有帮助吗?

解决方案

是,它是可能的。但是,它需要多个音频API使用和多个线程。

由于音频单元缓冲区的回调线程的实时约束,你将不得不做的压缩文件的音频单元回调外原始PCM采样转换。你可以使用扩展音频文件服务或AVAssetReader做转换为音频单元回调外无压缩的样本。不过,你不需要解压整个文件一次。第二个可能会做,只要一小部分的简短未压缩缓冲你不停地填充足够远领先于音频单元回调缓冲消费率。这可以在一个单独的定时器驱动的螺纹,其监视缓冲器的消耗,并且相应地解压缩刚够音频,或许到环形缓冲器或循环的FIFO来完成。

你将结束了将类似于音频队列API层的改写,但具有更多的可定制性。

其他提示

如何低级别的,你要到哪里去?您可以使用AudioHardware API:

err = AudioDeviceAddIOProc(deviceID, ioProc, self);

和您的ioProc自己填写的缓冲区,听听硬件改动,并处理实时线程和很多其他低层次的东西。

我假设你已经解码与AudioConverter mp3数据,知道该怎么做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top