【问题标题】:How to play back raw audio stream?如何播放原始音频流?
【发布时间】:2016-04-20 17:37:04
【问题描述】:

我在我的 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);
}

如何解决这个问题?

【问题讨论】:

    标签: java android audio encoding audiotrack


    【解决方案1】:

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

    【讨论】:

    • 谢谢。现在我说的东西(例如“你好”)被播放了,但也有极高的嗡嗡声。我的口语与嗡嗡声相比非常安静。那里可能有什么问题?
    • 确保与您正在播放的声音的采样率和声道数(单声道、立体声?)相匹配。
    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多