【问题标题】:BPM detection in iOS using soundtouch libraryiOS 中使用 soundtouch 库的 BPM 检测
【发布时间】:2014-07-16 14:47:23
【问题描述】:

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

iOS SoundTouch framework BPM Detection example

不幸的是,我的以下努力似乎都没有奏效,目前处于死锁状态,因此我在 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。

谢谢各位!

【问题讨论】:

  • 您似乎没有包含声音触摸标头——尽管您说您包含...您不能再发布一些代码吗?甚至你的整个项目……
  • 感谢您的努力!
  • @AlexvanRijs:别忘了奖励赏金(绿色勾下的小蓝框!)

标签: c++ ios objective-c soundtouch beat-detection


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这似乎行得通!你有这个项目集的架构是什么?我有 armv64 armv7 和 armv7s。它不会建立在 armv64 上,所以我删除了那个
  • 我没有触及架构设置,我假设它只是为当前平台构建(调试模式),所以我没有收到错误。可能问题在于没有为 arm64 构建声音触摸......
  • 嗨 Sergio,当编译和运行代码时,程序存在于 EXC_BAD_ACCESS 上:soundtouch::SAMPLETYPE sampleBuffer[len]。这个错误的原因可能是什么。它仅在 iphone 上运行时发生。在模拟器中运行时不会崩溃,但 BPM 始终为 0。
  • @AlexvanRijs bpm 在 soundtouch 中总是返回 0。请告诉我如何解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2012-02-03
  • 2013-09-17
  • 2010-10-14
相关资源
最近更新 更多