Soundtouch bpm iPhone
我正在尝试整合一种机制来计算iPod库(也是在iphone上)歌曲的BPM。 在网上搜索我发现最常用和最可靠的库是做Soundtouch的。任何人都有这个库的经验吗?在计算上可以使它在iPhone硬件上运行?Soundtouch bpm iPhone
使用从BPMDetect类soundtouch库成功地代码我最近一直。最初编译它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。
希望这会有所帮助。
您能否提供一个Android应用程序如何处理soundtouch库的音频输入数据的例子?谢谢! – shiami
@ juan.facorro有没有机会分享你的知识在android上获取节奏?我似乎无法找到'soundtouch_config.h'。但主要问题实际上是我无法找到你在要点中使用的任何FMOD类。 –
@SherifelKhatib我从事这个项目已经有一段时间了。这里有一篇文章在Android上使用FMOD库:[FMOD for Android](http://broadcast.oreilly.com/2011/06/fmod-for-android.html)。在使用速度检测器时,我用这篇文章作为指导。我将尝试在接下来的几天内使用应用程序的代码创建一个github项目。 –