2011-11-22 5 views
0

iPod 라이브러리 (iphone에도 있음)에서 노래의 BPM을 계산하는 메커니즘을 통합하려고합니다. 웹에서 검색이 작업을 수행하는 데 가장 많이 사용되는 신뢰할 수있는 라이브러리는 soundtouch입니다.이 라이브러리에 대한 경험이 있습니까? iPhone 하드웨어에서 계산이 가능합니까?Soundtouch bpm iPhone

답변

4

나는 최근하는데 성공 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 코드를 넣었습니다.

희망이 도움이됩니다.

+0

안드로이드 앱이 사운드 터치 라이브러리의 오디오 입력 데이터를 처리하는 방법에 대한 예를 제공해 주실 수 있습니까? 감사! – shiami

+0

@ juan.facorro 안드로이드에서 템포를 얻는 것에 대한 지식을 공유 할 수 있습니까? 'soundtouch_config.h '를 찾지 못했습니다. 그러나 주된 문제는 실제로 당신이 요점에서 사용하고있는 FMOD 클래스를 찾을 수 없다는 것입니다. –

+0

@SherifelKhatib이 프로젝트를 작업한지 얼마되지 않았습니다. 다음은 Android에서 FMOD 라이브러리를 사용하는 게시물입니다. [Android 용 FMOD] (http://broadcast.oreilly.com/2011/06/fmod-for-android.html). 템포 감지기를 구현할 때 나는 그 포스트를 가이드로 사용했습니다. 다음 며칠간 응용 프로그램 코드를 사용하여 github 프로젝트를 만들려고 노력할 것입니다. –