iPhone 上的实时音高转换

Posted

技术标签:

【中文标题】iPhone 上的实时音高转换【英文标题】:Real-time Pitch Shifting on the iPhone 【发布时间】:2010-11-09 04:28:52 【问题描述】:

我正在编写一个儿童 iPhone 应用程序,我需要能够使用 Core Audio 改变声音样本的音高。有没有人有任何示例代码,我可以看看这是在哪里完成的。应用商店中有很多音乐和游戏应用可以做到这一点,所以我知道我不是第一个。但是,我找不到任何这样做的例子。

【问题讨论】:

【参考方案1】:

您可以使用 dsp 维度中的dirac-2 在 iphone 上进行音高转换。引用:-

“DIRAC2 既可以作为商业对象库提供无限采样率和锁相多通道支持,也可以作为免费的单通道 44​​.1/48kHz LE 版本。”

【讨论】:

我在尝试 dirac3 时的体验很糟糕,因为它的libDIRAC_ios4-fat.a 在 dirac2 上可能没有太大不同。我就是无法使用它——在构建过程的链接部分有太多错误。相反,I've used openAL 取得了巨大成功。 对我来说很好。您可能忘记将加速框架添加到您的项目中(它在自述文件中) DIRAC 是完美的,但带有 AL_PITCH 的 OpenAL 也会改变声音的长度,这并不理想。 DIRAC 现在是第 3 版。它的库包括 iPhone Demo 项目。 @Cawas 我发现我必须删除 arm64 和 armv7s 作为有效架构并关闭 build active arch 才能在我的项目中使用它。 jednorog.sneakyness.com/image/2K213w1y2P2u 确保您还包括所有必需的框架 jednorog.sneakyness.com/image/0v2n0R3n3t0o @Sneakyness 如果没有 arm64 支持,您现在无法提交应用程序。由于Dirac3不支持arm64,所以不能提交应用吧?【参考方案2】:

使用soundtouch开源项目改变音高

这是链接:http://www.surina.net/soundtouch/

在项目中添加 soundtouch 后,您必须将输入声音文件路径、输出声音文件路径和音高变化作为输入。

由于处理声音需要更多时间,因此最好修改soundtouch,以便在录制语音时直接提供数据进行处理。它将使您的应用程序变得更好。

【讨论】:

我会试一试。谢谢阿尼尔! L. @Anil : 我没有 iOS API 我想要一个关于如何做到这一点的链接。花了一整天的时间试图找出如何将 Soundtouch 添加到我的 iOS 项目中 @Anil 请你提供一个链接或sn-p,说明如何使它工作你在回答中提到的:(真的很绝望。谢谢【参考方案3】:

我知道对于提出问题的人来说为时已晚,但对于正在寻找相同问题解决方案的任何其他人来说,这确实是一个有价值的链接(正如我发现的那样)。

所以这里我们有最新的 DIRAC3,它有自己的 audio player 类,这些类将处理 运行时音高和速度(探索天知道还有什么)转变。运行示例并为此获得热烈的掌声。

【讨论】:

【参考方案4】:

试试 Dirac - 这是目前最好的技术,可在 Win、Linux、MacOS X 和 iOS 上使用。我们在所有产品中都使用了它(还有一些其他产品也在使用它,在 App Store 上搜索“Capo”)。它们现在处于第 3 版,与以前的版本相比,性能有了巨大的提升。希望这会有所帮助。

【讨论】:

【参考方案5】:

见:Related question

您需要对音高进行多少控制...您能预先计算所有不同的声音吗? 如果答案是肯定的,那么您可以选择正确的声音并播放它们。

您还可以将音频转换器服务与 AVAudioPlayer 结合使用,这将允许您重新采样音频(这将有效地重新调整它们,尽管它们会改变持续时间)。

或者,正如相关问题所指出的,您可以使用 OpenAL 和 AL_PITCH

【讨论】:

@Leachy 只是想知道...... openAL 怎么能不帮助你而 DIRAC 呢?对我来说完全相反,狄拉克被证明是无用的! :o

以上是关于iPhone 上的实时音高转换的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 上的数字识别是不是可以实时进行?

如何在 iphone sdk 中同时进行输出音频电平测量和音高变化

如何在 iPhone 上使用音频单元

iPhone 上的实时录音/分析

我们可以将实时应用程序转换为 iphone 中的 InApp 应用程序吗? [关闭]

使用 Swift 使用 AVAudioEngine 实时进行音高转换