2013-07-30 2 views
2

나는 온라인 시각적 인 중국 색조 ​​도우미 종류를 개발 중이다. 이것은 HPS Algorithm으로 피치 검출을하는 것을 포함합니다. 그러나이 알고리즘의 성능은 들어오는 스펙트로 그램의 해상도에 의해 제한됩니다. 지금까지 Analyzer 노드를 사용해 왔지만 audiocontext의 샘플 속도를 설정할 수 없기 때문에 불필요하게 높은 최고 주파수 (샘플러 레이트/2 = 약 24 kHz 인 반면 사람의 음성은 약 3.4 kHz까지 올라갑니다)를 얻습니다. 스펙트로 그램. 따라서 1024의 스펙트로 그램 해상도 (웹 오디오 API에서 허용되는 최대 FFT 크기가 2048이므로)를 사용하면 음성 입력을 분석 할 때 동적 범위의 일부만 활용할 수 있습니다.Web Audio API에서 음성 입력을 처리 할 때 전체 스펙트로 그램 해상도를 어떻게 활용할 수 있습니까?

이 문제를 해결하기 위해 더 많은 컨트롤을 얻기 위해 DSP.js에있는 FFT로 분석 한 버퍼를 수집하기 위해 scriptProcessorNode를 사용하려고했지만 성능이 현저히 떨어지는 접근 방식과 비슷합니다 분석기 노드. 아무도이 문제를 해결하는 방법에 대한 제안이 있습니까? 내 설정에 대한 자세한 내용은 development blog에서 확인할 수 있습니다.

답변

1

아마도 asm.js에서 FFT 코드를 구현해 볼 수 있습니다. 나는 이것이 크롬과 파이어 폭스 모두에서 상당히 중요한 성능 향상을 보았을 것으로 생각한다. 왜냐하면 이것은 정확히 asm이 정말로 좋은 점이다.

궁극적으로 나는 이것을 프로파일 링해야한다고 생각합니다. 원하는 빈만으로 FFT를 구현하는 것이 더 좋습니까? 아니면 고해상도의 AnalyserNode를 사용해야하며 필요없는 것을 버리십시오. 대답은 측정에 있습니다.

즉, 매우 차선의 FFT 구현이라 할지라도 단일 입력에 대한 실시간 분석을 위해서는 여전히 빠르다고 할 수 있습니다. 쇼 스톱 퍼포먼스 문제가 생기면 나는 놀라게 될 것입니다.

+0

감사합니다. 지금 조금 더 실험하고 있습니다. 이제 requestanimationframe을 사용하여 FFT 변환과 버퍼링, 윈도우 잉 및 변환을 사용하는 제 3 자 자바 스크립트 DSP 메소드 간의 간격을 설정합니다. 초당 60 회의 업데이트를 유지하는 데 어려움이 있습니다. 그래서 나는 asm.js와 DSP를 일반적으로 읽는 동안 분석 노드를 고수 할 것이라고 생각합니다. 그러나 샘플 API를 변경하거나 Audio API 자체 내에서 fft 크기로 2048보다 높을 수 있다면 정말 좋을 것입니다. – torno

관련 문제