如何播放原始音频流?

时间:2016-04-20 17:37:05

标签: java android audio encoding audiotrack

我在Android应用程序中收到一串音频数据(一个频道,16000Hz,170ms缓冲区),我想播放这个音频。 我发现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);
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

参考这个例子:buf size需要根据你的数据仔细计算,不一定是随机的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();