【问题标题】:Mixing sound files on an iPhone在 iPhone 上混合声音文件
【发布时间】:2010-04-16 14:07:02
【问题描述】:

我有几个 wav 文件,可能还有一个 mp3,我想将它们混合成一个 wav 或 mp3 文件。我正在使用 C/C++/Obj-C (iPhone)。我真的没有这种事情的经验。如果有人能给我一些指点,我将不胜感激。

基本上,我想做的是类似的事情,例如 Audacity 可以做的事情,但是以编程方式。是否有一个声音库,您可以在其中轻松打开音频文件并将它们“粘贴”到定义位置的新文件中?哪里混音是您不必担心的?

谢谢。

【问题讨论】:

  • 您能否说明您是要同时播放文件还是混合它们然后将结果写入文件?如果是后者,您是否有理由不能对它们进行预处理以提前创建单个文件?如果是前者,您可能会想要阅读 Audio Queue Services 或 OpenAL,这两者都是相当深入的主题。
  • 编辑问题更清楚。是的,声音可以是同时的。
  • @quano hv 你找到解决方案了吗???
  • @Aadil 我没有实施任何与此相关的事情,并且自从我问起之后也没有研究过。现在情况可能已经改变,可能会有易于使用的库。我建议你调查一下,如果你发现什么就回来。 :)

标签: iphone audio mixing


【解决方案1】:

混合线性 PCM 的两个声音缓冲区只需将其中的每个样本值相加即可,当然要确保不会溢出。通常你会在缓冲区中使用浮点值,所以问题是当你回到文件时。您还应该在 iPhone 上安装 CoreAudio,它可以打开/读取/写入不同格式的声音文件。我认为 iPhone 上还有一个更高级别的 api 可用,但 Mac 上没有,请查阅苹果文档。

【讨论】:

  • 是的,我也明白这一点。这并不难,但需要一些工作。我想以前一定有人这样做过,甚至可能为它做了一个简单的库。那会节省我一些时间。读取文件、添加值和写出并不是我能想到的最令人兴奋的事情。 :) 这似乎是一个微不足道的功能。我真的很惊讶找到一个已经存在的库似乎是多么困难。到目前为止,我还没有在文档中找到任何解释如何打开多个文件、将它们及时放置在特定位置并将它们混合成一个文件的内容。
  • 好的,但是API中对此有支持,如果我没记错的话,你需要用你的文件格式的一些属性填充一个结构,然后将它发送到一些库函数。自从我这样做以来已经有一段时间了,但我想说的是,多种音频格式的格式转换并非易事,API 都支持并为您完成。像时间线这样的东西我认为你必须自己发明,除非它是实时回放你之后,它也受到 API 的支持。但这应该不会太难,因为您可以通过 (time * sample requency) 来获取 bufferindex。
【解决方案2】:

如果您专门寻找 Audacity 的功能,它在后台使用 PortAudio(看起来像 MIT 许可证)。也许您可以尝试使用它?

【讨论】:

    【解决方案3】:

    阅读Multimedia support 作为起点,它包含很多信息。以下是摘录:

    在 iphone 上混合音频有 3 种方法:

    • 音频单元框架
      • 多声道混音器 - “让您将多个音频流混合到一个流中”
      • 3D 混合器单元 - “让您混合多个音频流、指定立体声输出平移、控制采样率”
    • OpenAl 用于游戏开发

    还可以查看以下示例:iPhoneMultichannelMixerTest:

    创建了两个输入总线,每个都带有输入音量控制。还提供了整体混音器输出音量控制,并且可以启用或禁用每条总线

    【讨论】:

    • 请注意,我不想播放这些文件(在 iPhone 上),只需对它们进行处理并保存到一个新文件中。 :) 我会检查链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多