【问题标题】:How to develop an iphone app with reverb functionality?如何开发具有混响功能的 iphone 应用程序?
【发布时间】:2011-06-12 14:39:31
【问题描述】:

我正在开发一个 iPhone 应用程序(如音频处理)。我必须给音频一些效果。 如果是desktop app,有很多选择。我们可以得到很好的例子和完整的项目,比如大胆。但我想为 iPhone 开发。

我有一个带有混响选项的应用程序; (看看下面的链接)。只是我看了"video",我没有在我的 iPhone 设备上测试这个应用程序。
http://www.appstorehq.com/reverb-iphone-89870/app

我的问题是;如何开发具有混响功能的应用程序?有任何文件吗?如果是,请与我们分享。

注意:我们可以使用 AudioUnit 来开发具有混响功能的应用程序(我不清楚这一点。)。

编辑:我不喜欢使用任何第三方库。

如果有人知道这方面的知识,请与我们分享。

谢谢。

【问题讨论】:

  • 到目前为止你写了什么代码?您最好的选择可能是从 AudioUnit 文档开始,然后逐步进行。
  • 我在 Objective-C 中使用 C++ 代码。你有混响的样本吗?
  • OpenAL 在 iPhone 上也很容易使用,所以如果你有现有的算法可以处理原始样本,那么它们应该很容易使用。
  • 有没有好的例子的文档?
  • 我也必须在我的 iPad 应用程序中实现相同的东西,但没有得到它。这有什么成功吗?

标签: iphone audio signal-processing core-audio


【解决方案1】:

如果您的目标是 ios5,您可以只使用效果音频单元的音频单元子类型 kAudioUnitSubType_Reverb2。

reverb unit

AudioComponentDescription auEffectUnitDescription;
    auEffectUnitDescription.componentType = kAudioUnitType_Effect;
    auEffectUnitDescription.componentSubType = kAudioUnitSubType_Reverb2;
    auEffectUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;

AUGraphAddNode(
                              processingGraph,
                              &auEffectUnitDescription,
                              &auEffectNode), 

如果您无法在 remoteio 回调中编写自己的混响代码。一个简单的延迟可能更容易做到,听起来也很相似。

【讨论】:

    【解决方案2】:

    iOS 5.0 带来了对 OpenAL 的原生支持,因此现在变得容易多了——您不必自己编写算法代码。它还带来了对各种混响空间的支持:

    • 小房间
    • 中型房间
    • 大房间(2 种配置)
    • 中厅(3 种配置)
    • 大礼堂(2 种配置)
    • 盘子
    • 中型室
    • 大房间
    • 大教堂

    我建议你试试 ObjectAL 包装器,它已经对混响效果有很好的支持: https://github.com/kstenerud/ObjectAL-for-iPhone

    从此存储库中获取源代码,加载“ObjectAL.xcodeproj”并在任何 iOS 5.0 设备上运行 ObjectALDemo 目标(也应该在模拟器上工作)。这将为您提供一个良好的起点和对混响效果的能力的感觉。

    如果您仍然不使用任何 3rd 方库,您可以从 ObjectAL 中获取相关部分。在以下源文件(及其相应的头文件)中查找与混响相关的代码:

    祝你的项目好运!

    【讨论】:

      【解决方案3】:

      这是我之前给出的答案,但我相信它在这里是相关的。我同意其他人的观点,并说如果你想正确地做到这一点,你将不得不更加熟悉核心音频。

      我强烈推荐这个core-audio book. 它会教你如何正确地做这件事,并会为你省去很多挫败感。

      关于音频效果的章节尚未出版,但如果它与本书的其余部分一样,则值得等待。

      编辑

      您很可能需要使用音频效果(音频单元的一种形式)来执行此操作。

      【讨论】:

        【解决方案4】:

        你需要学习一些 DSP 级别的编码,DSP 食谱书还可以,还有其他的。但基本上你需要熟悉处理频域中的音频信号和诸如 FFT 之类的东西。一旦你有了它,实现混响滤波器应该是直截了当的。

        【讨论】:

        【解决方案5】:

        AU 是一个很好的起点。

        编写您自己的混响 AU,其中包含混响实现。有很多方法可以实现混响。中/长卷积混响对手机的要求很高,但诸如 FDN(反馈延迟网络)之类的东西不需要大量内存或 CPU。

        如果您熟悉音频编程和优化,这两种实现都很容易实现。困难的部分实际上是制作一个听起来非常好并且性能很好的。

        如果您无法编写最佳的低级代码,或者您(目前)不了解基本的音频信号处理,那么您将有一些障碍需要克服——在这种情况下,这可能是一条漫长的道路。

        【讨论】:

          【解决方案6】:

          不好,我尝试了音频单元方法,尽管它在文档中,但苹果工程师“尚未”实现。每次调用该函数设置混响属性时,您只会获得失败状态代码。您必须实现自己的混响效果。尝试阅读一些 DSP 书籍,您可能会找到线索。

          【讨论】:

          • 这个功能有开源的吗?
          • 如果你足够努力地找到它们应该会有......顺便说一下,你知道混响效果“不是”对于iphone中的所有歌曲都是干净的,即一些失真会发生,这可能是由 iphone 中的 DAC 引起的。这就是为什么混响 iphone 应用程序为您提供了一个三频均衡器,以最大限度地减少失真 :)。这不容易,祝你好运
          【解决方案7】:

          在 iOS 文档中搜索“混响”会生成一个指向 Core Audio Overview 的链接,该链接将混响称为“效果单元”。也许这值得进一步研究?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多