2013-10-11 2 views
0

음성으로 모든 단어를 자동으로 녹음하고 추출 할 수있는 소프트웨어를 개발 중입니다. 나는 그것을 해결하기 위해 portaudio 라이브러리를 사용했다. 그러나 소리 감지에 매달 렸습니다. 나는 무음의 값을 0으로 설정 했으므로 0 인 샘플이 있으면 소리의 시작점이나 종료점이어야합니다. 그러나 내가 그것을 실행했을 때, 프로그램은 많은 단어를 만들었습니다. Portaudio에서 읽은 값은 원시 데이터이므로 처리 할 수 ​​없기 때문에 생각합니다. 내가 맞습니까? 어떻게 해결할 수 있습니까? 그런데 C++로 코딩하고 있습니다 : D원시 사운드 파일의 사운드를 어떻게 찾을 수 있습니까?

답변

1

PCM 스트림에서 신호의 존재를 감지하기 위해이를 감지 할 수 있습니다. dprogramz이 말했듯이 사운드 카드의 노이즈 플로어는 완벽하지 않으므로 마이크가 연결되지 않은 상태에서도 약간의 노이즈 신호가 녹음됩니다.

해결책은 VOX 또는 VAD 알고리즘을 사용하여 음성의 존재를 감지하는 것입니다. VOX는 까다 롭습니다. 대부분의 소비자 급 전자 제품에서 노이즈 플로어는 신호에 비해 인간의 귀에 "침묵"할만큼 충분히 낮기 때문입니다. 이것은 노이즈 플로어와 신호 간의 진폭 차이가 미미할 수 있음을 의미합니다. 사운드 카드에 AGC가 켜져 있으면 노이즈 플로어가 움직일 수 있기 때문에 사운드 카드에 AGC가 켜져 있으면이 작업이 훨씬 어려워 질 수 있습니다. VOX는 소비자 용 장비에서 성공적으로 구현 될 수 있습니다. 임계 값을 설정하는 데 더 많은 노력이 필요합니다. 최적으로 수행되면 임계 값은 스트림이 활성화되어있는 동안 주기적으로 계산됩니다.

이 작업을 수행하는 경우 VAD 알고리즘을 구현할 것입니다. 귀하의 목소리가 귀하의 목소리를 탐지하는 것이므로, 귀하가 사용하는 장비에 상관없이 신뢰할 수있는 결과를 제공해야합니다.

0

RAW 값이기 때문에 생각하지 않습니다. RAW 사운드 파일은 빈도 및 볼륨 정보 비트 스트림입니다.

그러나 값은 거의 0이됩니다. 마이크가 소량의 전기적 잡음을 발생시키는 것을 고려해야합니다. 마이크의 "유휴 (idle)"dB를 알아 내십시오 (마이크에 말하지 않을 때 레벨 테스트). 그런 다음 시작/끝을 감지하기 위해 무음 임계 값 (특정 샘플 수에 대해 특정 dB 레벨 이하)을 설정해야합니다. 0 값을 감지하려고하면 거의 불가능할 것입니다.

+0

녹음을 위해 무 지향성 마이크로를 사용 했으므로 침묵의 값이 0이라고 생각합니다 (Audacity에서 다시 녹음하여 그것을 열어 보았습니다) – user2530847

관련 문제