【问题标题】:How to use aubio framework in iOS?如何在 iOS 中使用 aubio 框架?
【发布时间】:2014-02-13 16:14:21
【问题描述】:

我正在尝试在 iOS 中检测音频文件的节拍、音高、起始和快速傅立叶变换 (FFT),我发现 aubio 提供这些功能,iOS framework 也可用。

到目前为止,我使用The Amazing Audio Engine 来接收Core AudioAudioBufferList 的音频数据,如下所示:

id<AEAudioReceiver> receiver = [AEBlockAudioReceiver audioReceiverWithBlock:
                               ^(void                     *source,
                                 const AudioTimeStamp     *time,
                                 UInt32                    frames,
                                 AudioBufferList          *audio) {
    // I don't know how to use audio library.
}];

我可以从这个AudioBufferList 使用aubio 检测节拍、音高、起始和快速傅里叶变换 (FFT) 吗?如何? 如果我走错了路,请给我任何建议?

【问题讨论】:

  • 嗨!我有同样的问题 - 你找到这个任务的解决方案了吗?
  • @xZenon 不,我没有。对不起。

标签: ios audio core-audio aubio audiobufferlist


【解决方案1】:

更新 所以看起来 Aubio 的 Cocoa Pod 不是最新的,在我的 Podfile 中,我使用这段代码将 Aubio 添加到我的 Xcode 工作区:

pod 'aubio-iOS-SDK', '~> 0.4'

这将安装 Aubio 0.4.1,这不是最新的。一般来说,为 Aubio 查找文档有点晦涩难懂,您需要将多个 Internet 搜索结果拼凑成一个可行的解决方案。

对于 iOS,它更加晦涩难懂,如果你转到 Aubio downloads page,你会发现 iOS 的版本为 0.4.2,滚动到底部,即比 Aubio Cocoa Pod 更高的版本。然而,here,我在 cmets 中发现了一个更高版本的 iOS Aubio 模块,0.4.3,这里可以直接下载到可能是最新的 iOS 的 Aubio:

https://aubio.org/bin/tmp/aubio-0.4.3~const.iosuniversal_framework.zip

如果您使用的是我在原始答案中提到的 Swift,您仍然需要对 aubio.h 的桥接头引用

原始答案 用于 aubio 的 CocoaPod 确实使在 Swift 中引用 aubio 库变得简单。这是iOS的Aubio CocoaPod:

https://cocoapods.org/pods/aubio-iOS-SDK

安装后,请注意,在 Swift 中,您不会编写:

import aubio 

在 Swift 文件的顶部。

您需要确保添加一个目标 C 桥接头以将 aubio C 库公开给 Swift,在该桥接头中您编写以下内容:

#import <aubio/aubio.h>

现在 Swift 将可以访问 aubio 库/框架。

【讨论】:

  • 嗨@brian-ogden,你能打开一个关于这个的错误报告吗? import aubio 在 swift 中应该可以正常工作。欢呼
  • 更一般的说明:抱怨 stackoverflow 缺少文档不太可能改善它。非常感谢打开一个关于它的新问题:github.com/aubio/aubio/issues/new
【解决方案2】:

看看aubio download页面,我相信他们已经将它编译成iOS框架,你可以直接导入到你的Xcode中。

参考:http://aubio.org/download#ios

【讨论】:

    【解决方案3】:

    我的解决方案是将音频缓冲区写入文件,然后将文件发送到 aubio。每当您获得新的音频缓冲区时,您可以追加到文件(如果您想分析目前为止的整个内容),或者如果您只对增量片段感兴趣,则只需覆盖。

    【讨论】:

    • 你用什么将音频缓冲区写入文件?一个 AvAssetWriter,或者两个 AvAssetWriter,或者带有 CMSampleBufferRef 的 AVCaptureAudioDataOutput 或 AVCaptureSession 委托,或者您在哪里使用 Amazing Audio Engine 写入文件?
    • 您是否因此受到了明显的性能影响?通常你在内存中做这种事情,但 aubio 似乎只有一个基于文件的输入机制?
    【解决方案4】:

    download page 中有一个编译框架可用于 iOS。

    您已将库拖放到您的项目中,请确保您也有以下框架:

    • Accelerate.framework
    • AudioToolbox.framework

    现在,如果您下载 Aubio 的源代码,您将拥有一个示例文件夹。在那里,您将找到用 C 编写的用于检测节拍、音高、起始(还有 FFT)的代码,由于 ObjC 是 C 的超集,因此也可以在您的项目中使用。

    【讨论】:

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