2009-10-13 1 views
0

혼자서 시작/비트 감지 알고리즘을 가지고 놀고 있습니다. 내 입력은 .wav 파일이고 내 출력은 .wav 파일입니다. float [] 배열의 청크로 전체 파형에 액세스 할 수 있습니다.온셋 탐지 디버깅을 위해 파형에 "틱틱 틱"을 추가합니다.

내 알고리즘을 디버그하고 평가하는 좋은 방법을 생각해 내는데 어려움이 있습니다. 필자의 입력과 출력이 모두 청각 적이기 때문에 디버깅 기능이 청각 적이기 만하다면 가장 좋을 것이라고 생각했습니다. 시작 지점에서 .wav 파일에 "틱"또는 "삐"소리를 추가합니다.

누구든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 이상적으로는, 몇 백 또는 수천 개의 샘플을 실행하는 것이 간단한 for-loop 일 것입니다.

+1

무엇이 문제입니까? 발병을 발견하거나 클릭/삐 소리를 추가 하시겠습니까? – innaM

답변

1
float * sample = first sample where beep is to be mixed in 
float const beep_duration = desired beep duration in seconds 
float const sample_rate = sampling rate in samples per second 
float const frequency = desired beep frequency, Hz 
float const PI = 3.1415926.. 
float const volume = desired beep volume 
for(int index = 0; index < (int)(beep_duration * sample_rate); index++) 
{ 
    sample[index] += 
     sin(float(index) * 2.f * PI * sample_rate/frequency) * volume; 
} 
+0

니스. 15 자. 15 자. –

+0

감사합니다. 이것은 훌륭하고 단순하며 완벽하게 작동했습니다. 두 가지 후속 질문, 괜찮 으면. 1) 2.f 표기; 나는 전에 이것을 본 적이 없다. 2.0f는 나를 놀라게하지 않았지만, 2.f는 나에게 새로운 것이다. 이 부분이 C++ 구문 또는 C 구문의 일부입니까? 2) 당신의 의견으로는 "더 정확한"것입니다 : 비트의 시작 부분에서 시작하는 신호음을 삽입하거나, 비트의 중간 점이 비트와 정렬되도록 신호음을 삽입하십시오. – psa

+0

(1) 부동 소수점 숫자는 임의의 소수 부분이 오는 마침표와 마침표입니다 (http://msdn.microsoft.com/en-us/library/tfh6f0w2(VS.71).aspx). 그래서 2. 유효한 문법이지만 double을 반환합니다. (2)이 목적은 디버깅이므로 알고리즘이 고장 났을 때 귀가 쉽게 말할 수있는 것이 더 정확합니다;) – moonshadow

1

불쌍한 사람의 답 : 진드기 또는 경고음을 찾은 다음 각각의 원하는 순간에 원래 파형과 혼합하십시오. 삐 소리의 지속 시간 동안 삑 소리와 입력 파형의 평균을 간단하게 혼합합니다.

0

표본에서 틱 (tick)을 삽입하려는 위치를 찾아냅니다 (틱의 길이를 포함하여 범위가 아닌 점임). 파형의 해당 부분을 FFT으로 가져갑니다. "진드기"사운드에 대해 원하는 주파수 구성 요소를 주파수 도메인 표현에 추가합니다 (가장 단순한 것은 단일 주파수 톤임). 결과에 대해 역 FFT를 수행하면 원래 신호와 혼합 된 톤을 얻게됩니다. 나는 생각한다. (내가이 일을한지 얼마되지 않았다.)

관련 문제