使用soundtouch库在iOS中进行BPM检测

时间:2014-05-27 15:42:42

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

我正在尝试在iOS应用程序中实现beatdetection。我发现了一个名为SoundTouch的相当简单的框架,并尝试根据

实现这一点

iOS SoundTouch framework BPM Detection example

不幸的是,以下所有努力似乎都无法正常工作,而且我目前处于死锁状态,因此我发布了Stackoverflow。

我采取了以下步骤:

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

    player =[[AVAudioPlayer alloc] initWithData:data error:NULL];
    
  8.     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。

    谢谢大家!

1 个答案:

答案 0 :(得分:4)

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

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

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

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

  4. 我没有尝试过运行程序,但它至少构建了。

    enter image description here enter image description here