我试图在iPod库中集成一种机制来计算歌曲的BPM (也在iphone上)。在网上搜索时,我发现最常用和最可靠的库就是soundtouch.Anyone有这个库的经验?让它在iPhone硬件上运行在计算上是可能的吗?
发布于 2012-01-16 18:20:24
最近,我成功地使用了来自BPMDetect类的soundtouch库的代码。最初是在C++上编译的,后来翻译成C#,最近我通过JNI在Android应用程序上使用了C++代码。我不太熟悉iOS的开发,但我几乎可以肯定,您想要做的事情是可能的。
您应该从soundtouch源代码中使用的唯一文件如下:
C++文件
头文件
至少这些是我唯一需要使用的,才能让它发挥作用。
BPMDetect类通过其方法接收原始示例,它能够计算bpm值,即使整个文件尚未加载到其缓冲区中。我发现,在我的经验中,这些中间值与加载整个文件后获得的值不同,后者更准确。
希望这能有所帮助。
编辑:
这是一个复杂的过程,需要在评论中解释,所以我将编辑答案。
它的要点是,您需要您的android应用程序来使用本机代码。为此,您需要使用Android工具集从soundtouch库编译上面列出的文件。
这将给您留下能够处理原始声音数据的本机代码,但您仍然需要从声音文件中获取数据,我认为这可以通过多种方式实现。我的方法是使用用于Android的FMOD库,这里有一个很好的例子:用于Android的FMOD。
假设您在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代码放在gist 这里中。
希望这能有所帮助。
https://stackoverflow.com/questions/8226261
复制相似问题