1

我正在制作一个 iphone 游戏,目前使用 openAL 进行 SFX,我们希望将游戏保持在 10 兆以下。

iphone(至少通过openAL)只能本地播放未压缩的PCM。

从某种良好的压缩格式(mp3、aac、ogg 等)中获取音乐到我的游戏中的最直接的方法是什么?

有某种解码器api吗?我应该使用openAL吗?

编辑:

好的,我们已经进行了一些计算,我们应该能够使用简单的 64kb/s 压缩方案很好地适应所有内容,所以我正在寻找将压缩文件(最好从内存中)解码为原始 pcm 的最简单方法在内存中与 open al 一起使用。我们还需要一个流解码器,它不需要能够从内存中解码流,但它会很好。我们想为轨道添加循环,因此如果解码器具有“随机访问”功能,那么您可以轻松地在轨道上移动,这将是理想的。

4

3 回答 3

2

最压缩的方式是跟踪器MIDI。这样您就可以只存储音乐的乐谱,而不是声音样本。

也许就是你要找的。

于 2010-02-02T05:06:39.593 回答
2

另一种选择是在您的游戏中编译一个开源合成器/采样器,并将一个 MIDI 播放器与合成器样本/声音通信,这可以为您提供非常好的音乐(我是一名软件工程专业的学生,​​几乎学习了音乐(15 年钢琴/合成器等),这可能有点复杂,但是,可以为您提供由合成器播放的令人敬畏的声音,并带有轻量级的 MIDI 轨道来触发合成器声音。

祝你好运,我认为这实际上是一个非常好的(可能有点复杂),要走的路!

于 2010-02-05T11:20:10.487 回答
0

好的,我已经全部设置好了。

我将音频队列用于音乐流只是因为它是 iPhone SDK 的一个部分,有据可查:

http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AboutAudioQueues/AboutAudioQueues.html#//apple_ref/doc/uid/TP40005343-CH5-SW1

一般解释和

http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQPlayback/PlayingAudio.html#//apple_ref/doc/uid/TP40005343-CH3-SW1

举一个很好的例子(有点错误)

这似乎与openAL一起工作正常。并且看起来它确实允许我们以样本精度水平随机跳跃。

剩下要做的就是得到它,这样我们就可以从内存中加载,这是通过替换:

音频文件打开 URL

打电话给:

AudioFileOpenWithCallbacks

不幸的是,音频文件服务的文档......至少可以说很差。

阅读它需要您自担风险,然后在它莫名其妙地不起作用之后阅读:http: //developer.apple.com/iphone/library/qa/qa2009/qa1676.html

它告诉你回调实际上是可选的,并且通过提供一个 write ,你告诉它打开文件以写入它不能为 MP4 做的,所以只需为 write 和 setSize 回调传递 NULL 。

我还想说,如果您真的想要最小的尺寸,这里推荐 MIDI 的两个答案几乎肯定是正确的方法。

不幸的是,我们很懒,只是想快速输入一些东西,这也表明我们可以适应适度压缩的音频。我也有点担心性能影响(我不知道midi会是什么)但显然这种压缩音频的方法使用硬件解码。

如果您想走传统的压缩音频路线,希望这会有所帮助,如果您想将数据与 openal 一起使用,您也可以尝试使用音频转换器服务,不幸的是,这个 API 也落入了令人尴尬的文档不足的参考手册中。我什至不知道它是否有效,如果有效,我不确定它是否使用硬件解码器。

于 2010-02-08T05:09:53.683 回答