2011-07-17 3 views
1

Android用の1つのアプリケーションでAudioTrackクラスを使用していますが、「無効なオーディオバッファサイズ」という例外が発生することがあります。私はFFTを使うつもりであるので、バッファサイズを2の累乗にして、それ以来、この例外を得ることがあります。理由は何ですか?AndroidでクラスAudioTrackを2倍のバッファサイズで試しましたか?

おかげで、 ダニエル

私のコードは非常に単純です:

private void playTrack(short []buffer){ 
     try{ 
      Log.i(TAG,"Play track, Buffer size: "+buffer.length); 
      AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
        mAudioIn.getFrequency(), 
        mAudioIn.getChannelConfig(), 
        mAudioIn.getAudioEncoding(), 
        buffer.length, 
        AudioTrack.MODE_STREAM); 
      audioTrack.play(); 

      audioTrack.write(buffer, 0, buffer.length); 
     }catch(Throwable t){ 
      Log.e(TAG,"Play track, something's wrong: "+t.getMessage()+ " When buffer size is:"+buffer.length); 
     } 

    }`enter code here` 

答えて

0

は2の累乗に戻った最小サイズまでのラウンド後、

_audioTrackSize = android.media.AudioTrack.getMinBufferSize(
      audioSampleRate, AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
      AudioFormat.ENCODING_PCM_16BIT); 

とのようなものを呼び出して試してみてください。

2

私が気づいたのは、バッファサイズとして奇数を使うことはできません。あなたのサイズを取って、次のようなことをしてみてください。

if (size % 2 == 1) 
    size++;` 

これは奇数を偶数にします。

+0

はい、バッファサイズはフレームサイズの倍数である必要があります。しかし、ドキュメントは決して "フレーム"が何であるか説明しません。 – Curtis

関連する問題