我正在使用AudioTrack类在一个适用于Android的应用程序中工作,有时会收到异常“无效的音频缓冲区大小”。由于我打算使用FFT,因此我将缓冲区大小设为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`

最佳答案

我刚刚意识到,您不能使用奇数作为缓冲区大小。尝试调整您的尺寸并执行以下操作:

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


这将使一个奇数偶。

关于android - 您是否曾尝试在Android中使用缓冲区大小为2的幂的Class AudioTrack?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6722422/

10-11 10:38