Вы пробовали Class AudioTrack в Android с размером буфера, равным степени двойки? - PullRequest
1 голос
/ 17 июля 2011

Я работаю в одном приложении для Android с классом AudioTrack, и иногда я получаю исключение «Неверный размер аудио буфера».Поскольку я планирую использовать FFT, я делаю размер буфера степенью двойки, и с тех пор иногда получаю это исключение.Есть идеи, почему это так?

Спасибо, Даниэль

Мой код очень прост:

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`

Ответы [ 2 ]

3 голосов
/ 03 мая 2014

Я только что понял, вы не можете использовать нечетное число в качестве размера буфера.Попробуйте взять свой размер и сделать что-то вроде этого:

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

Это сделает нечетное число четным

0 голосов
/ 20 декабря 2011

Попробуйте вызвать что-то вроде

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

и затем округлите возвращенный минимальный размер до степени, равной двум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...