Как воспроизвести необработанный аудиопоток?

Я получаю поток аудиоданных (один канал, 16000 Гц, буфер 170 мс) в своем приложении для Android и хочу воспроизвести этот звук. Я обнаружил AudioTrack, но при воспроизведении звука звук становится только громче и неловкий звук.

Мой код пока выглядит так:

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 128000, AudioTrack.MODE_STREAM);
audioTrack.play();

while (true) {
    byte[] buf = new byte[32000];

    inputStream.readFully(buf);
    audioTrack.write(buf, 0, buf.length);
}

Как это исправить?


person user32323    schedule 20.04.2016    source источник


Ответы (1)


обратитесь к этому примеру: размер буфера должен быть тщательно рассчитан на основе ваших данных, не обязательно случайных 32000.

int bufsize = AudioTrack.getMinBufferSize(
    8000, 
    AudioFormat.CHANNEL_CONFIGURATION_STEREO,
    AudioFormat.ENCODING_PCM_16BIT
);
AudioTrack trackplayer = new AudioTrack(
    AudioManager.STREAM_MUSIC, 8000, 
    AudioFormat.CHANNEL_CONFIGURATION_ STEREO,
    AudioFormat.ENCODING_PCM_16BIT, 
    bufsize, 
    AudioTrack.MODE_STREAM
);
trackplayer.play();
trackplayer.write(bytes_pkg, 0, bytes_pkg.length);
trackplayer.stop();
trackplayer.release();
person deepwaterooo    schedule 20.04.2016
comment
Спасибо. Теперь то, что я говорю (например, «Привет»), воспроизводится, но также присутствует чрезвычайно высокий жужжащий звук. Мои произносимые слова по сравнению с гудением очень тихие. Что там может быть не так? - person user32323; 21.04.2016
comment
Убедитесь, что вы соответствуете частоте дискретизации и количеству каналов (моно, стерео?) воспроизводимого звука. - person Aladin Q; 23.04.2016