2014-09-29 7 views
1

샘플 배열에서 wav 파일을 생성 중입니다. 파형을 복사하고 시작하면 "딸깍"소리가납니다. 저는 여기에 주기적으로 (44100 Hz에서 16 비트 부호있는 스테레오 PCM) 소리가 나지 다음 사인파 복사 간단한 예입니다 : 여기PCM 샘플 중단으로 인해 클릭

int c, counter = 0; 
short *wavdat = malloc(numberOfSamples * 2); 
for(c = 0; c < numberOfSamples * 2; c += 2){ 
    counter++; 
    if(counter % 10000 < 5000){ 
     wavdat[c] = sinf(counter * .1f) * 16000; 
     wavdat[c+1] = wavdat[c]; 
    }else{ 
     wavdat[c] = wavdat[c+1] = 0; 
    } 
} 

은 WAV는 점에서 확대, 대담에 보이는 무엇을 어디 사인파가 차단된다

enter image description here

끝에 날카로운 스파이크는 내가 듣는 클릭 소리의 원인이 될 것으로 보인다. 왜 소리가 순간적으로 멈추는 대신 클릭 소리가 나는 이유는 무엇입니까? 클릭 소리가 들리지 않으면 어떻게 소리를 멈출 수 있습니까? 정확한 시간에 샘플을 복사하지 않아야하므로 페이드 아웃 할 수 있는지 잘 모르겠습니다.

이 문제는 훨씬 복잡한 파형 (예 : 음성 클립 중지)에서도 발생합니다. 사람이 관심이 있다면

여기에 녹음 된 사운드 파일입니다 : http://clyp.it/yc2mpqni

+0

모든 코드를 전달할 가능성이 있습니까? 전체 웨이브 파일이 어떻게 만들어 졌는지 궁금합니다. – plafratt

+1

나는 wav 글쓰기 코드를 직접 작성하지 않았다. 여기에 간단한 C++ 함수가있다. http://ltheory.com/blog/writeWav.txt – user3124047

+0

그래, 고마워. – plafratt

답변

2

PCM 파형의 급격한 스파이크는 실제로 클릭입니다.

미리 복사 할 샘플의 수를 알면 조기에 페이드 아웃을 시작할 수 있습니다. 0.05 초 이상의 선형 컷오프 슬로프가 좋은 출발점입니다.

+0

클릭을 피할 수있는 유일한 방법 인 것 같습니다. 감사! – user3124047

0

는 제로 크로싱 지점에서 시료를 중지합니다. 그것은 스파이크를 제거합니다.

+3

제로 크로싱에서의 절단은 피크에서의 절단보다 훨씬 뛰어나지 만, 여전히 불필요한 잡음을 전달할 수 있습니다. –