从SD卡使用AudioTrack播放音频(mp3, ogg)

6

我想使用AudioTrack从SD卡播放音频文件。我已经尝试了以下代码:

int minBufferSize = AudioTrack.getMinBufferSize(8000,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT);
        int bufferSize = 512;
        AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
                AudioTrack.MODE_STREAM);

        int i = 0;
        byte[] s = new byte[bufferSize];

        FileInputStream fin = new FileInputStream(path);
        DataInputStream dis = new DataInputStream(fin);

        at.play();
        while ((i = dis.read(s, 0, bufferSize)) > -1)
        {
            at.write(s, 0, i);

        }
        at.stop();
        at.release();
        dis.close();
        fin.close();

但是它无法正确播放音频文件。它播放的不是原始音频,而是一些噪音声音。

2个回答

9

3
音轨类只支持PCM音频数据,这就是为什么你听到噪音的原因。
如果您想播放像.mp3和.ogg这样的压缩音频文件,请使用MediaPlayerSoundPool
或者您可以在应用程序中解码压缩音频,并将生成的PCM数据写入音轨,但这是一项更大的任务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接