iPod 라이브러리 (iphone에도 있음)에서 노래의 BPM을 계산하는 메커니즘을 통합하려고합니다. 웹에서 검색이 작업을 수행하는 데 가장 많이 사용되는 신뢰할 수있는 라이브러리는 soundtouch입니다.이 라이브러리에 대한 경험이 있습니까? iPhone 하드웨어에서 계산이 가능합니까?Soundtouch bpm iPhone
답변
나는 최근하는데 성공 soundtouch 라이브러리의 BPMDetect 클래스의 코드를 사용하고있다. C#에 코드를 번역에 처음 이후, C++에 컴파일 및 최근에 나는 JNI를 통해 안드로이드 응용 프로그램에 C++ 코드를 사용하고있다. 나는 실제로 개발에 익숙하지 않다. iOS 그러나 나는 당신이하려고하는 것이 가능하다고 거의 확신한다.
당신이 soundtouch 소스 코드에서 사용할 필요가있는 파일 만
은 다음과 같습니다C++ 파일
- BPMDetect.cpp
- FIFOSampleBuffer.cpp
- PeakFinder .cpp
헤더 파일
- BPMDetect.h
- FIFOSampleBuffer.h
- FIFOSamplePipe.h
- PeakFinder.h
- soundtouch_config.h
- STTypes.h
적어도 이것들을 작동시키기 위해 사용하는 유일한 것들입니다.
BPMDetect 클래스있어서, 그 전체 파일이 아직 버퍼에로드되지 않는다하더라도 BPM 값을 산출 할 수있어()는 원시 inputSamples 통해 샘플을 접수에. 나는이 중간 값이 전체 파일이로드되면 얻은 것과 중간 값이 다르다는 것을 발견했다. 이것은 내 경험에 의하면 더 정확하다.
희망이 도움이됩니다.
편집 : 그것은 복잡한 과정의 일종 내가 대답을 편집 할거야 주석에 설명이다
.
요점은 네이티브 코드를 사용하려면 Android 앱이 필요하다는 것입니다. 이를 수행하려면 Android NDK 도구 모음을 사용하여 soundtouch 라이브러리에서 위에 나열된 파일을 컴파일해야합니다.
원시 사운드 데이터를 처리 할 수있는 네이티브 코드가 남아 있지만 사운드 파일에서 데이터를 가져와야합니다. 몇 가지 방법을 사용할 수 있습니다. 내가하고있는 방식은 FMOD library for Android을 사용하고 있습니다. 여기에 좋은 예가 있습니다 : FMOD for Android.
void Java_your_package_YourClassName_cPlay(JNIEnv *env, jobject thiz)
{
sound->play();
}
당신이 당신의 기본 다음과 같은 방법으로 방법을 사용하는 안드로이드 응용 프로그램의 경우 : 우호적를 위해
public class Sound {
// Native method declaration
private native void cPlay();
public void play()
{
cPlay();
}
}
당신을 가정 할
는 C 코드에서이 같은 방법을 선언 API를 사용하면 이러한 함수 호출을 중심으로 래퍼를 만들 수 있습니다.
NIST here에서 사용하고 있던 네이티브 C 코드를 넣었습니다.
희망이 도움이됩니다.
안드로이드 앱이 사운드 터치 라이브러리의 오디오 입력 데이터를 처리하는 방법에 대한 예를 제공해 주실 수 있습니까? 감사! – shiami
@ juan.facorro 안드로이드에서 템포를 얻는 것에 대한 지식을 공유 할 수 있습니까? 'soundtouch_config.h '를 찾지 못했습니다. 그러나 주된 문제는 실제로 당신이 요점에서 사용하고있는 FMOD 클래스를 찾을 수 없다는 것입니다. –
@SherifelKhatib이 프로젝트를 작업한지 얼마되지 않았습니다. 다음은 Android에서 FMOD 라이브러리를 사용하는 게시물입니다. [Android 용 FMOD] (http://broadcast.oreilly.com/2011/06/fmod-for-android.html). 템포 감지기를 구현할 때 나는 그 포스트를 가이드로 사용했습니다. 다음 며칠간 응용 프로그램 코드를 사용하여 github 프로젝트를 만들려고 노력할 것입니다. –