2013-08-10 2 views
0

아주 작은 (1-3 초 길이) 사운드 효과를 감지하려고합니다. 현재 루프백 기술을 사용하여 FMod를 사용하여 다른 프로그램에서 재생되는 사운드를 캡처하고 있습니다.C + +에서 작은 사운드 효과 감지

Ive는 지난 몇 일 동안 조사한 결과, 약 50 개의 데이터베이스에 대해 캡처 된 사운드 효과를 비교할 수 있습니다. 각 바이너리 바이트를 비교하면 작업량이 약간 변할 수 있다는 점을 알고 있습니다. 사운드는 매번 캡처되는 정확한 오디오 파일입니다. 따라서 피처 피스트는 매번 거의 죽어야합니다.

적어도 10-90 초의 오디오를 녹음해야하므로 이미 지문 인식 라이브러리를 사용할 수 없습니다.

소리가 너무 작고 숫자가 적기 때문에 간단한 솔루션을 알고있는 전문가가있을 것입니다. FFT를 사용하고 주파수 등의 일부를 비교하려고했지만 키스 FFT를 사용할 수 없습니다. libocary는 절대적으로 DOCS가 없기 때문에 작동합니다.

또한 채널을 분할하는 기능을 만들었습니다. 여기

int SeperateChannels(FMOD::Sound *sound) 
{ 
    byte *ptr1, *ptr2; 
    unsigned int lenbytes, len1, len2; 

    sound->getLength(&lenbytes, FMOD_TIMEUNIT_PCMBYTES); 
    sound->lock(0, lenbytes, (void**)&ptr1, (void**)&ptr2, &len1, &len2); 

    byte *bufferLeft = new byte[(lenbytes/2)]; 
    byte *bufferRight = new byte[(lenbytes/2)]; 

    for(int i = 0; i < lenbytes; i += 4) 
    { 
     bufferLeft[i] = ptr1[i]; 
     bufferLeft[i+1] = ptr1[i+1]; 

     bufferRight[i] = ptr1[i+2]; 
     bufferRight[i+1] = ptr1[i+3]; 
    } 

    // Kiss FFT???? 

    return 1; 
} 

어떤 도움도 크게 부 풀립니다. -Que

+0

2 ~ 3 초 사운드 데이터는 얼마나 많은 메모리를 소비합니까 ?? – innosam

+0

여기에 어떤 질문이 있습니까? –

+0

@OliCharlesworth 오디오 기능을 맞추는 것이 문제인 것처럼 보입니다. 샘플의 노이즈에 대한 우려가있어 기계 학습 및 오디오 패턴 매칭과 관련하여 좋은 솔루션이 상대적으로 복잡 할 것이라는 강한 느낌을 받았습니다. 나는 CompVis 만 했으므로 오디오 세계에서 어떤 일을하는지 모르지만 나는 그것들이 유사하다고 상상할 것이다. 그러나 나는 '질문'이 온통 여기에있는 것처럼 느낀다. 공동 감정). – user

답변

2

미리 정의 된 사운드 세트 중 어떤 것이 녹음되었는지를 결정하는 것이 문제라면 두 가지 옵션을 생각해 볼 수 있습니다. 데이터베이스의 모든 사운드에 녹음 내용을 "비교"하거나 사운드의 일반적인 특성 (일반적으로 오디오 분석 문헌의 "디스크립터"라고 함)을 기반으로 한 "조회". 설명자에 대해서는 spectral centroid과 같은 것을 생각하고 있습니다.

"비교"의 경우 correlation을 사용하여 시간 도메인에서이 작업을 수행하거나 스펙트럼 크기 차이를 계산하여 주파수 도메인에서 수행 할 수 있습니다. 시간 도메인 비교를 위해 사운드 시작 위치를 모르기 때문에 여러 오프셋에서 상관 관계를 수행해야합니다. 주파수 영역의 경우 원시 FFT 데이터를 일종의 스펙트럼 엔벨로프 (예 : 겹쳐진 (프레임 된) 프레임 집합의 크기 스펙트럼의 평균을 취합니다.

"조회"의 경우 설명자 집합을 계산하고 코퍼스 및 후보 입력에서 계산 한 다음 입력에 대해 계산 한 설명자와 가장 가까운 코퍼스 요소를 찾습니다. 또한 일련의 프레임에 대해 수행 할 수 있습니다. 시간 영역 "비교"사례에 대해 수행 한 것과 동일한 종류의 상관 분석을 수행하지만 각 샘플의 차이를 계산하는 대신 각 설명 자의 차이를 계산합니다. 이는 단일 디스크립터를 사용하는 것보다 진화하는 사운드를 비교하는 데 더 효과적입니다.

FFT를 사용하려는 경우 FFT를 적용하는 방법뿐 아니라 크기 스펙트럼을 계산하고 처리중인 데이터 구조에 대해 몇 가지 아이디어를 얻는 방법도 알아야합니다. 결과를 얻으려면 FFT를 수행하는 것 이상의 단계가 필요합니다. 매칭을 최적화 할 수있는 방법이 많이 있습니다. 특히 사운드 세트가 고정되어있는 경우 (그룹 테스트 접근법을 생각해 봅니다) 특히 그렇습니다.

더 간단한 방법으로는 DTMF touch tone 디코딩이 수행 된 방법을 살펴볼 수 있습니다. 소스 사운드의 사전 분석을 수행하면 각 사운드를 지문 채취하는 데 사용할 수있는 중첩되지 않는 주파수 세트를 결정할 수 있습니다.

모든 경우에 나는 왼쪽 및 오른쪽 채널을 합산하여 모노로이 작업을 수행합니다. 스테레오는 입력이 출력과 동일한 패닝을 가지고 있지 않다면 많이 줄 수 없습니다.

+0

감사합니다. 그래, 기본적으로 내가 필요한 것은, 약 50 개의 다른 소리의 데이터베이스/디렉토리에 사운드 효과를 녹음했습니다. 핑거 프린팅은 또한 좋은 방법이지만, 나는이 지긋 지긋한 키스 FFT를 작동시키지 않습니다. 문서가 없기 때문에 다른 fft 라이브러리로 전환하는 것이 가장 좋습니다. – qZanity

+0

@qZanity try [ooura] (http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html). FFTW는 다른 명백한 옵션입니다. –