java - 如何播放原始音频流?

标签 java android audio encoding audiotrack

我在我的 android 应用程序中接收到音频数据流(一个 channel ,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);
}

如何解决这个问题?

最佳答案

引用这个例子: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();

关于java - 如何播放原始音频流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751233/

相关文章:

java - 传递参数时获取 java.lang.NullPointerException

android - 如何为糖 ORM 查询做日期条件

java - 使用日历在每个午夜重置计算的步数

algorithm - 数据到音频并返回。使用源代码进行调制/解调

android - Superpowered API - SuperpoweredDecoder::decode 不为文件末尾返回 0

java - JLabel 的新产品线?

java - 即使更新到 2.3.12 也无法解决 Struts2 NotSerializableException

java - struts2文件上传丢失参数

android - 单击通知时应用程序未恢复

iphone - 如何通过Apple设备的内部扬声器路由音频,而避免戴耳机?