2011-05-08 10 views
4

으로 음성을 캡처하여 Google 서버에서 음성을 인식하도록 권장합니다. Stephananswer에서 this question으로 제안 된대로 RecognitionListener와 함께 SpeechRecognizer 클래스를 사용합니다. 또한, 내가 좋아하는 RecognitionListener에서 onBufferReceived() 콜백을 사용하여 인식되는 오디오 신호를 캡처하려고 : 오디오의 덩어리가Google 음성 인식 서버

byte[] sig = new byte[500000] ; 
int sigPos = 0 ; 
... 
public void onBufferReceived(byte[] buffer) { 
    System.arraycopy(buffer, 0, sig, sigPos, buffer.length) ; 
    sigPos += buffer.length ; 
} 
... 

이 SpeechRecognizer는 구글 서버에 연결 실패 할 때를 제외하고 잘 작동 것 같다, 위에 언급 된 sig 배열로 복사되지 않으며 HTTP 연결 시간 초과 예외가 발생합니다. SpeechRecognizer는 결국 Google 서버에 연결되고 인식 결과는 완전한 오디오 신호가 수신되었음을 나타냅니다. sig 배열에만 일부 오디오 청크가 없습니다.

누구나 같은 문제가 발생합니까? 솔루션에 대한 힌트가 있습니까? 고맙습니다!

+0

누락 된 청크를 인식하기 위해 원본 오디오 신호를 다시 얻으려면 sig를 어떻게 처리 했습니까? – ComputerEngineer88

답변

1

나는 이것이 안드로이드 버전의 버그 일지라도 인식 서비스의 동작에있어 모순이라고 말할 수 있습니다. 그러나, 문서는,이 메소드가 불려가 스펙에 들어가는 것이 보증되지 않는다고 말하고 있습니다. 내가 지금까지 알아 차 렸던 것은 안드로이드 2.3.4에서 다음과 같다 : 녹음하는 동안 바이트를 얻는다. 그러나 예를 들어 SocketTimeout이라면 잠시 후 서버에 데이터를 다시 보내려고하지만 onBufferReceived을 다시 호출하지는 않는다. 동일한 데이터. 테스트에 사용 된 코드는 게시 할 때 연결 한 코드와 동일합니다.

왜 메서드에서받은 오디오에서 일부 청크가 사라 졌다고 생각합니까? 그것이 단지 몇 개의 덩어리가 누락 되었다면, 그 덩어리가 빠져 있었음에도 인식이 잘 작동 할 수도 있습니다.