3

我正在尝试在 iOS 应用程序中实现节拍检测。我找到了一个相当简单的框架,叫做 SoundTouch 并尝试根据

iOS SoundTouch 框架 BPM 检测示例

不幸的是,我的以下努力似乎都没有奏效,目前处于僵局状态,因此我在 Stackoverflow 上发帖。

我采取了以下步骤:

  1. 创建基于单视图的项目
  2. 导入了
  3. 将 mainViewController.m 重命名为 ViewController.mm 以使其与 c++ 兼容
  4. 指示 ViewController 的 UIViewController 类符合 AVFoundationPlayerDelegate 协议。
  5. 复制/粘贴解决方案@MrHappyAsthma 发布到他的问题
  6. 重构

    player =[[AVAudioPlayer alloc] initWithData:data error:NULL];
    

    AVAudioPlayer *player =[[AVAudioPlayer alloc] initWithData:data error:NULL];

现在编译器抱怨:

soundtouch::SAMPLETYPE sampleBuffer[len]; (use of undeclared variable soundtouch)

soundtouch::BPMDetect BPM(player.numberOfChannels, [[player.settings valueForKey:@"AVSampleRateKey"] longValue]); (use of undeclared variable soundtouch)

BPM.inputSamples(sampleBuffer, len/player.numberOfChannels); (use of undeclared variable BPM)

NSLog(@"Beats Per Minute = %f", BPM.getBpm()); (use of undeclared variable BPM)

我认为我对 C++ 的了解不应该是这样,并且应该声明/初始化对象 soundtouch 和 BPM。

谢谢各位!

4

1 回答 1

4

您需要执行以下操作才能编译项目:

  1. 添加#import <SoundTouch/BPMDetect.h>到您的ViewController.mm;

  2. 将 AVFoundation 框架添加到您的目标(见图);

  3. 如图所示设置语言设置(具体来说,使用 GNU C++ libstdc++)。

我没有尝试运行该程序,但它至少可以构建。

在此处输入图像描述 在此处输入图像描述

于 2014-06-02T21:09:15.400 回答