라이브 오디오 입력에서 휘파람, 팝 및 기타 소리를 감지하려면 어떻게해야합니까?


9

나는 SO에 대한 많은 질문을 읽었으며 솔직히 그들 각각은 그것에 대해 특별한 방법을 설명하지 않습니다. 어떤 사람들은 "FFT"라고 말하고 어떤 사람들은 "제로 크로싱"이라고 말합니다. 그러나 저는 디지털 오디오 입력이 특정 주파수에 대한 진폭의 배열로 구성되어 있다는 것을 이해하기까지했습니다. 그 너머.

이제 나이키 스트 정리, 주파수, 진폭, 푸리에 시리즈 등을 알고 있으며, 2 학년 전 대학 프로그램에서 2 ~ 3 년 전에 그렇게했습니다. 그러나 당시 우리는 실제로 푸리에의 실제 사용법을 많이 배웠지 않았으며, 주제를 통과하기에 충분한 학습 이상의 주제에 대해 더 깊이 파고 들지 않았습니다. 하지만 이제는 모든 것을 사용해야합니다.

감지하려는 소리의 스냅 샷은 다음과 같습니다.

독특한 손가락 스냅 및 전등 스위치 켜기 / 끄기 그래프

분명히 소리에는 고유 한 그래프가 있습니다. 그래프에서 독특한 뾰족한 선에 대한 고유 한 특성을 추출하는 방법을 이해하고 싶습니다. 진폭, 주파수 등이 얼마나 많은지, 그리고 얼마나 많은 시간 동안-그것은 사소한 것이지만 추측합니다.

모호하지 않은 간단한 명령 목록을 단계별로 원합니다. 이해할 수없는 용어를 Google에 표시 할 수 있습니다.

아마도 이것처럼? -

  1. 입력 오디오 데이터 가져 오기

  2. 플롯 크로마토 그램

  3. 무소음 환경에서 감지하려는 소리에 대한 스펙트럼 그래프를 가져옵니다.

  4. 그래프를 연구하십시오-그 소리의 독특한 특성을 그려라

  5. (4)의 사운드 특성을 사용하여 라이브 오디오 피드의 특정 특성을 감지 할 수있는 기능을 만드십시오.

  6. 일치하는 것이 있으면 작업이 완료된 것입니다.

  7. 허위 부정을 제거하기 위해 알고리즘을 연마하십시오.

내가 혼란스러워하는 곳은-약 3,4,5는 어떻게합니까? 특히 3과 4. 사용자가 나중에 사용할 제스처 입력으로 사운드를 녹음 할 수있는 소프트웨어를 만들고 있기 때문에 시스템에서 사운드를 녹음하고 라이브 오디오와 일치시킬 수 있기를 원합니다. 그 소리 제스처를 감지하는 피드. 예를 들어 기침, 손가락 찰칵, 휘파람 또는 박수. 또는 자음 또는 또는 또는 라고 말합니다 . 거의 모든 소리.ABXZ

나는 사용자가 꽤 환경에서 몸짓으로 저장하고 싶은 소리를 녹음하도록 생각하고있었습니다. 그리고 사용자는 조용한 시간 패딩 사이에서만 소리를냅니다 . 녹화 시작 및 종료시 3 초

말하자면, 처음 3 초 동안, 시스템은 현재 입력이 정상적인 조용한 배경음임을 확립 할 것입니다. 그리고 그래프의 갑작스런 변화는 소리 입력 시작입니다. 그리고 때 정지, 녹화는 또 다른 3 초에 대한 후행 계속할 것 조용한 시간 패딩을 . 이것은 사용자가 수동으로 수행합니다. 그런 다음 그래프의 급격한 변화가 지속 된 부분 (패딩 시간 사이)의 특성 만 자동으로 저장합니다.

따라서 해당 부분의 특성은 해당 사운드의 제스처 데이터로 저장되어 나중에 라이브 오디오 피드에서 특정 사운드를 감지하는 데 사용됩니다.

문제는이 모든 것을 평범한 영어로 생각하고 있다는 것입니다. 내 코드에서 효율적으로 구현하려면 수학과 물리학을 생각해야합니다. 내 코드에서 무엇을 작성하고 어디에서 코드를 작성해야하는지에 대한 단서가 없습니다.

이게 길면 미안 해요


1
호기심으로, 그 스펙트로 그램은 휴대 전화 나 태블릿에서 만들어 졌습니까? 그렇다면 앱 이름을 알려주십시오. 정말 멋지다. 귀하의 질문과 관련하여 귀하의 응용 프로그램은 격리 된 단어 인식을 수행하는 주제 / 작업과 유사하다고 생각합니다. 인터넷 검색을 통해 많은 아이디어와 영감을 얻을 수 있습니다. 어려운 부분은 제한된 상대적 작은 제스처 집합에서 제스처를 인식하는 것이 아니라 제스처가 아닌 것을 걸러내는 것입니다.
niaren 2015 년

이 앱은 play.google.com/store/apps/… 입니다. 의견을 보내 주셔서 감사합니다. 그러나 나는 당신이 단어를 감지하지 않고 휘파람, 팝, 박수 등과 같은 소리 (지금은 조금 이상)를 감지하는 방법을 알려주기를 원합니다. 저는 파이썬에서 일하고 있습니다.
bad_keypoints

1
불행히도 이런 종류의 것은 여전히 ​​연구 분야입니다. 나는이 특정 문제를 해결하는 사람을 모른다.
Bjorn Roche

답변:


2

음성 인식 기술을 사용하는 것이 좋은 출발일 수 있다는 의견 중 하나에 동의하지만, 이러한 소리는 다르며 분류에 대한 연구를 한 사람을 알지 못합니다 (Nathan이 인용 한 논문은 음성을 구별하는 것으로 보입니다) 그리고 소음), 누군가 누군가가 모순되는 것을 제시하지 않는 한, 당신은 당신 자신의 기술을 발명해야 할 것이며, 많은 학습과 많은 노력이 필요합니다. 내가 할 수있는 최선은 당신을 시작하는 것입니다.

우선, 누군가 마법의 공식을 만들 수 있다고 기대하지 마십시오. 소리에서 소리가 무엇인지에 대한 방정식은 없습니다. 사람과 컴퓨터는 소리가 무엇인지에 대한 교육 된 추측을하기 위해 데이터를 통합하여 학습해야합니다. 사람들이 자신의 답변에서 "FFT 사용"또는 "제로 크로싱 사용"이라고 말하는 이유는 음성 인식 및 관련 알고리즘에 사용되는 기본 DSP 빌딩 블록이기 때문입니다. 그러나 FFT와 제로 크로싱 속도는 일반적으로 사운드를 설명하는 매개 변수 집합을 만드는 첫 번째 단계 일뿐입니다. 그런 다음 이러한 매개 변수를 통계적으로 분석하여 (일부 마술 기능을 통하지 않음) 가장 속하는 카테고리를 결정합니다. 내가 가장 가능성이 높다고 말한 것에 주목하라 : 심지어 최고의 음성 탐지 (그리고 인간의 뇌)까지!

따라서 찾을 수있는 일부 매개 변수는 다음과 같습니다.

  • 제로 크로싱 속도
  • 주파수 중심
  • envelope (이것은 실제로 공격 시간을 포함하여 일련의 매개 변수입니다)
  • 스펙트럼 봉투
  • 짝수 / 홀수 고조파 균형
  • 보이시
  • 기본 피치

사운드를 구별 할 수 있다고 생각되는 매개 변수 세트가 있으면이를 통계적으로 분류해야합니다. 은닉 마르코프 모델 은 종종 연설에 사용됩니다. 로지스틱 회귀 분석, K- 평균을 살펴볼 수도 있으며 다른 선택이있을 것이라고 확신하지만 HMM이 시도되고 사실이라고 생각합니다.


귀하의 답변은 좋지만 기본적으로 사용자 자신의 소리를 나중에 내 소프트웨어를 사용하기 위해 만드는 소리와 일치시키는 지 묻습니다. 유사성 같은 것. 사용자가 다른 유형의 사운드 A, B 및 C를 만든다고 가정하면 이러한 사운드의 특성은 각각 C_A, C_B 및 C_C로 저장됩니다.
bad_keypoints

이 기법은 여전히 ​​동일합니다. 1. 측정 할 매개 변수를 파악하고, 2. 측정하고, 3. 통계를 사용하여 각 소리의 차이점을 알아 봅니다. 4. 해당 데이터를 사용하여 분류합니다.
Bjorn Roche

이것이 기본적으로 내가 생각한 것입니다. 그러나 나는 당신이 제공 한 좋은 긴 목록에서 어떤 매개 변수를 사용하여 소리를 구별하기 위해 표시해야한다고 생각합니다.
bad_keypoints

1
솔직히 말해서, 나는 많은 샘플 데이터와 아마도 내가 준 것보다 더 많은 매개 변수없이 다양한 환경에서 손가락 스냅 및 전등 스위치와 같은 것을 구별 할 수 있다는 것에 대해 매우 비관적이지만 잘못 되었기를 바랍니다. 시간이 걸리더라도 결과를 다시보고하십시오.
Bjorn Roche

또한 music-dsp 메일 링리스트 ( music.columbia.edu/cmc/music-dsp )의 일부 사람들에게 다른 제안이있을 수 있습니다.
Bjorn Roche

0

엔트로피 기반 엔드 포인팅 에서이 종이를 사용 하여 전화 통화에서 이러한 종류의 소리를 무시하려고 할 때 컴퓨터 음성 인식에 사용했습니다. 캡쳐하려는 소리가 음성 인 경우 엔트로피는 음악에서 잘 작동 할 수 있습니다. 유용하지 않습니다.


0

Bjorn의 권장 사항은 매우 좋지만 추가 정보를 제공하고 싶습니다. 당신의 설명에서, 이것은 음색 식별 문제와 매우 흡사합니다. 컴퓨터 음악의 맥락에서이 분야에 대한 연구가 있습니다 (다른 악기를 식별하는 것이 할 수 있고 스냅과 박수의 차이를 말하는 것은 소리의 음색 때문입니다). 윌리엄 브렌트이 영역에서 일부 연구를 수행하고 (자신의 페이지에서 timbreID를 찾으십시오) Pure Data에서 사용할 소프트웨어를 작성했습니다. 각 상황에서 특정 이벤트를 찾고 있으므로 발병 감지를 통해 자동 세분화를 수행하는 것이 좋습니다. 이미 STFT를 수행하고 있으므로 발병 결정에 너무 많은 추가 작업이 필요하지 않습니다 (스펙트럼 플럭스 발병 감지 참조). 시스템 개요는 다음과 같습니다.

훈련

  • 적절한 기능 결정 (예 : 제로 크로싱 속도, 스펙트럼 중심, MFCC)
  • 발병 감지
  • 입력 오디오 (제스처 녹음)에서 이러한 기능을 계산합니다.
  • 기능 계산 데이터베이스를 유지하십시오. 이것이 감독 또는 훈련되지 않은 교육 상황인지 확인해야합니다. 예를 들어, 사용자가 스냅이 "사운드 1"이고 박수가 "사운드 2"임을 미리 지정하거나 시스템이 훈련 후이를 클러스터링하려고 시도합니까?

분류

  • 실시간 발병 감지 및 수신 오디오의 기능 계산
  • 거리 메트릭 (유클리드 거리 또는 다른 Lp 거리)을 사용하여 가장 가까운 이웃 또는 K- 최근 접 이웃 분류를 수행하여 데이터베이스에서 "가장 가까운"사운드를 결정하십시오.

타악기 음색 식별에 관한문서 는 유용 할 수 있습니다. 들어오는 소리와 저자의 분류 방법을 계산하는 잠재적 인 기능에 대한 정의를 설명합니다. 이것은 타악기 소리에 대해서는 잘 작동하지만 음성 (여러 음절)과 같은 경우에는 효과가 없을 수 있습니다.이 경우 HMM 방법이 더 적합합니다. 마찬가지로, 발병 감지의 정확도는 원하는 사운드 유형에 따라 다릅니다.

특히 스냅 스위치와 조명 스위치가 염려되는 경우 두 사운드를 정확하게 구별 할 수있는 기능을 파악하는 데 시간을 투자하십시오.


들어오는 오디오 데이터의 갑작스러운 변화를 감지하여 시작을 감지 할 것입니다. 작동합니다. 저장할 제스처의 시작과 끝을 감지했습니다.
bad_keypoints 2016 년

네, 대부분 작동합니다. 내가 Spectral Flux를 제안한 유일한 이유는 어쨌든 STFT를 복용 할 것이기 때문입니다. 꽤 조용한 환경을 원한다면 기본 진폭 임계 값이 충분할 것입니다.
greatscott 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.