如何在iOS中使用aubio框架?

如何在iOS中使用aubio框架?,ios,audio,core-audio,aubio,audiobufferlist,Ios,Audio,Core Audio,Aubio,Audiobufferlist,我试图在iOS中检测音频文件的节拍、基音、起始和快速傅立叶变换(FFT),我发现它提供了这些功能,而且也可用 到目前为止,我使用的是从核心音频的音频缓冲列表接收音频数据,如下所示: id<AEAudioReceiver> receiver = [AEBlockAudioReceiver audioReceiverWithBlock: ^(void *source,

我试图在iOS中检测音频文件的节拍、基音、起始和快速傅立叶变换(FFT),我发现它提供了这些功能,而且也可用

到目前为止,我使用的是从
核心音频
音频缓冲列表
接收音频数据,如下所示:

id<AEAudioReceiver> receiver = [AEBlockAudioReceiver audioReceiverWithBlock:
                               ^(void                     *source,
                                 const AudioTimeStamp     *time,
                                 UInt32                    frames,
                                 AudioBufferList          *audio) {
    // I don't know how to use audio library.
}];
来自此
音频缓冲列表的
id以及如何使用?
如果我走错了方向,请给我一些建议?

看看这个页面,我相信他们已经把它编译成了iOS框架,你可以直接导入你的Xcode


参考资料:

中有一个可与iOS一起使用的已编译框架

如果已将库拖放到项目中,请确保还具有以下框架:

  • 加速框架
  • AudioToolbox.framework

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

我的解决方案是将音频缓冲区写入一个文件,然后将该文件发送到aubio。每当你得到一个新的音频缓冲区时,你可以将其附加到文件中(如果你想分析到目前为止的全部内容),或者如果你只对增量部分感兴趣,就直接覆盖它。

更新 看起来Aubio的Cocoa Pod不是最新版本,在我的Pod文件中,我使用以下代码将Aubio添加到我的Xcode工作区:

pod 'aubio-iOS-SDK', '~> 0.4'
这将安装Aubio 0.4.1,但它不是最新版本。一般来说,为Aubio查找文档是一个有点晦涩的过程,您可以将多个internet搜索结果拼凑到一个工作解决方案中

对于iOS来说,它甚至更加模糊,如果你转到,你会发现iOS的版本是0.4.2,滚动到底部,这是比Aubio Cocoa Pod更高的版本。然而,在我的评论中,我发现了一个新的iOS Aubio模块0.4.3,下面是最新的iOS Aubio的直接下载:

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

原始答案 aubio的CocoaPod使得在Swift中引用aubio库变得非常简单。以下是iOS的Aubio CocoaPod:

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

import aubio 
在Swift文件的顶部

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

#import <aubio/aubio.h>
#导入

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

Hi!我也有同样的问题-你找到这个任务的解决方案了吗?@xZenon不,我没有。对不起,你用什么把音频缓冲区写入文件?一个AvAssetWriter,或者两个AvAssetWriter,或者带有CMSampleBufferRef的AVCaptureAudioDataOutput或AVCaptureSession委托,或者您使用惊人的音频引擎写入文件的位置?您是否因此受到明显的性能影响?通常你在内存中做这种事情,但aubio似乎只有一个基于文件的输入机制?嗨@brian ogden,你能打开一个关于这个的错误报告吗导入aubio
应正常工作。cheerson更一般地说:抱怨stackoverflow缺少文档不太可能改善它。如能就这一问题发表新见解,我们将不胜感激: