【问题标题】:iOS and decoding MP3/AAC data from memory bufferiOS 和从内存缓冲区解码 MP3/AAC 数据
【发布时间】:2011-07-14 10:07:16
【问题描述】:

请原谅我,我是 iOS 的新手 - 并且总体上是这种规模的编程。

我一直在研究 iOS 文档,我知道有一些函数,如 ExtAudiofile... 用于解码 MP3/AAC 文件,但是有没有可以对内存中已经存在的 Mp3/aac 数据进行操作的函数?

我可能必须从另一个文件中提取媒体数据(逐字节;iOS 确实允许这样做吗?),所以我不能只给它 URL。

编辑:mp3 数据将是非标准文件格式,Apple 提供的功能应该无法读取它们。我听说 iOS 有一个硬件解码器,可以处理一个音频流,如果有多个流,操作系统将回退到软件解码。

我宁愿使用 Apple 提供的产品,然后将 MP3 解码器集成到应用程序中。

【问题讨论】:

  • 您在这里想要实现的目标非常模糊。我建议重写问题。
  • 他试图从 MP3 或 AAC 文件中获取原始 PCM 波形数据。您这样做的原因是压缩的音频数据(较小的下载大小)仍然可以加载到 OpenAL 中(OpenAL 需要解码的原始 PCM 波形数据)。 AVAudioPlayer does not apparently allow this,但可以使用 ExtAudioFileRead 的东西来做到这一点

标签: iphone ios


【解决方案1】:

您可以使用 ExtAudioFileRead 读取内存中的文件,但您必须使用 AudioFileOpenWithCallbacks。我不在我的工作电脑旁,所以我不能给你确切的代码,但这里是一般过程:

  • 使用 fopen/fread 将给定文件读入内存缓冲区数组。使用简单的 C 数组,而不是 NSArray 或 NSData - 您需要速度,并且需要它与下一步兼容。
  • 为读取/获取大小创建一些基本的 C 函数回调。
  • 将 AudioFileOpenWithCallbacks 与您编写的回调一起使用以打开 内存中的音频文件。
  • 使用 ExtAudioFileWrapAudioFileID 开始解码内存中的文件。 这是替换 ExtAudioFileOpenURL。

如果您 Google +AudioFileOpenWithCallbacks +ExtAudioFileWrapAudioFileID,您会发现有些人已经这样做并发布了他们的代码。

我不确定您所说的非标准 mp3 数据是什么意思,因此您应该尝试使用其他应用播放该文件,看看它是否兼容。

【讨论】:

  • 很有趣,但是在谷歌上搜索你的建议会给出这个答案的一整页以及许多只复制堆栈溢出内容的网站。
  • 哇,这很有趣,确实如此。不加号试试看,第一个结果应该会有所帮助:github.com/sbooth/SFBAudioEngine/blob/master/Decoders/…
  • 问题是必须知道mp3流的大小...我需要解码一个流。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 2013-11-21
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多