2014-04-09 1 views
1

저는 라이브 speex 오디오 스트림을 재생하는 Android 앱을 개발 중입니다. 그래서 나는 jspeex library을 사용했다.
오디오 스트림은 11khz, 16 비트입니다. 다음 내가했을 로이드 측에서는
:Jspeex로 안드로이드로 오디오를 디코딩하면 고르지 못한 소리가납니다.

SpeexDecoder decoder = new SpeexDecoder(); 
decoder.init(1, 11025,1, true); 
decoder.processData(subdata, 0, subdata.length); 
byte[] decoded_data = new byte[decoder.getProcessedDataByteSize()]; 
int result= decoder.getProcessedData(decoded_data, 0); 

이 Audiotrack 의해 재생되는 데이터를 디코딩 된 오디오의 일부를 클리핑된다.
또한 디코더를 nb 모드 (첫 번째 매개 변수를 0으로 설정)로 설정하면 음질이 나빠집니다. 내 코드에 매개 변수 구성 실수가 있는지 궁금합니다.
도움, 조언 부탁드립니다.
미리 감사드립니다.

답변

1

특정 장치에 대해 샘플링 속도와 버퍼 크기를 최적화 된 방식으로 설정해야합니다. 예를 들어, 당신은 당신의 버퍼에 가장 적합한 크기를 얻기 위해 AudioRecord.getMinBufferSize()를 사용할 수 있습니다

int sampleRate = 11025; //try also different standard sampleRate 
    int bufferSize = AudioRecord.getMinBufferSize(sampleRate, 
         AudioFormat.CHANNEL_CONFIGURATION_MONO, 
         AudioFormat.ENCODING_PCM_16BIT); 

당신의 Audiotrack가 너무 작거나 오디오 결함을 경험하게 될 것입니다 너무 큰 버퍼가있는 경우. here을보고이 값들 (sampleRatebufferSize)을 가지고 놀아 보시기 바랍니다.

+0

들어오는 오디오가 11KHz이기 때문에 11025를 설정했습니다. 또한 다른 표준 주파수와 버퍼 크기로 시도했습니다. 그러나 품질이 향상되지 않습니다. –

관련 문제