【问题标题】:How do I speed up the loading of Audio files so the user is not waiting.如何加快音频文件的加载速度,以免用户等待。
【发布时间】:2012-07-11 04:57:12
【问题描述】:

我正在开发一款允许用户重新混音的游戏。我已经构建了一个混音器(基于苹果示例代码 MixerHost(使用混音器 audioUnit 创建一个 audioGraph),但扩展为加载 12 个音轨。一切正常,但是当游戏玩家加载歌曲需要很长时间选择他们想要重新混合的歌曲。这是因为程序必须先将 12 个单独的 mp4 文件加载到内存中,然后我才能开始播放音乐。

我认为我需要创建一个 AUFilePlayer audioUnit 负责将文件加载到混音器中。如果 AUFilePlayer 可以处理动态加载文件,那么用户将不必等待文件 100% 加载到内存中。我的两个问题是,1. AUFilePlayer 可以这样使用吗? 2. AUFilePlayer 上的文档非常非常非常薄。我在哪里可以找到一些示例代码演示如何在 IOS(而不是 MacOS)中正确实现 AUFilePlayer?

谢谢

【问题讨论】:

    标签: ios audio core-audio mixer


    【解决方案1】:

    我认为您是对的 - 在这种情况下,您可能需要“直接从磁盘”缓冲方法。我相信正确的 AudioUnit 子类型是 AudioFilePlayer。来自文档:

    单元读取和转换 音频文件数据到它自己的内部 缓冲区。它在一个磁盘上执行磁盘 I/O 所有人共享的高优先级线程 此单元在进程中的实例。 完成磁盘读取后,该单元 内部调度缓冲区进行播放。

    Chris Adamson's book Learning Core Audio 中给出了在 Mac OS X 上使用此单元的工作示例。 iOS 的代码差别不大,在 CoreAudio-API 邮件列表的this thread 中进行了讨论。 Adamson 的工作代码示例可以在here 找到。您应该能够根据自己的要求进行调整。

    【讨论】:

    • Chis 关于馅饼的帖子正是我所需要的。我使用两条轨道进行了测试,现在我正在将其放入具有 12 条轨道的更大项目中。如果您尝试做同样的事情,看起来您可以将 AUFilePlaer 变成一个数组并以这种方式加载每个轨道。
    • 创建一个带有节点数组的 AUFilePlayer 数组有效。我知道有 12 首曲目同时播放。
    • 这是一个绝妙的答案。馅饼也是我需要的!
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多