Soundtouch bpm iPhone

问题描述:

我正在尝试整合一种机制来计算iPod库(也是在iphone上)歌曲的BPM。 在网上搜索我发现最常用和最可靠的库是做Soundtouch的。任何人都有这个库的经验吗?在计算上可以使它在iPhone硬件上运行?Soundtouch bpm iPhone

使用从BPMDetectsoundtouch库成功地代码我最近一直。最初编译它C++,后来的代码转换为C#,最近我一直在使用通过JNI的的Android应用C++代码。我对iOS的开发并不十分熟悉,但我几乎可以肯定,你可能正在尝试做什么。

,则应该从soundtouch源代码使用的唯一文件如下:

C++文件

  • BPMDetect.cpp
  • FIFOSampleBuffer.cpp
  • PeakFinder .cpp

头文件

  • BPMDetect.h
  • FIFOSampleBuffer.h
  • FIFOSamplePipe.h
  • PeakFinder.h
  • soundtouch_config.h
  • STTypes.h

至少这些是我不得不使用的唯一工具。

BPMDetect类通过其inputSamples()方法,它能够计算即使当整个文件尚未加载到其缓冲器中的BPM值的临危原始样本。我发现这些中间值与整个文件加载后获得的中间值不同,根据我的经验,这更准确。

希望这会有所帮助。

编辑:

这是一种复杂的过程,以在注释中说明,所以我要编辑答案。

它的要点是你需要你的android应用程序来使用本地代码。为此,您需要使用Android NDK工具箱从soundtouch库中编译上面列出的文件。

这会给你留下原生代码,能够处理原始声音数据,但你仍然需要从声音文件中获取数据,我认为你可以采用几种方法。我这样做的方式是使用FMOD library for Android,下面是一个很好的例子:FMOD for Android

假如你宣布你的C代码,像这样的方法:

void Java_your_package_YourClassName_cPlay(JNIEnv *env, jobject thiz) 
{ 
    sound->play(); 
} 

在您使用以下方式你的本地方法的Android应用:

public class Sound { 
    // Native method declaration 
    private native void cPlay(); 

    public void play() 
    { 
     cPlay(); 
    } 
} 

为了有一个更友好与你一起工作的API可以创建这些函数调用的包装器。

我把我在使用的原生C代码here

希望这会有所帮助。

+0

您能否提供一个Android应用程序如何处理soundtouch库的音频输入数据的例子?谢谢! – shiami

+0

@ juan.facorro有没有机会分享你的知识在android上获取节奏?我似乎无法找到'soundtouch_config.h'。但主要问题实际上是我无法找到你在要点中使用的任何FMOD类。 –

+0

@SherifelKhatib我从事这个项目已经有一段时间了。这里有一篇文章在Android上使用FMOD库:[FMOD for Android](http://broadcast.oreilly.com/2011/06/fmod-for-android.html)。在使用速度检测器时,我用这篇文章作为指导。我将尝试在接下来的几天内使用应用程序的代码创建一个github项目。 –