【问题标题】:Play Audio (mp3, ogg) from sd card with AudioTrack使用 AudioTrack 从 sd 卡播放音频(mp3、ogg)
【发布时间】:2013-03-04 11:46:47
【问题描述】:

我想用 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();

但它不能正确播放音频文件。它播放的不是原始音频,而是某种噪音。

【问题讨论】:

    标签: android audiotrack


    【解决方案1】:

    从以下链接我发现 AudioTrack 只播放 PCM 音频, http://developer.android.com/guide/topics/media/index.html

    请看一下这段代码。 http://mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/ 这提供了有关如何在 AudioTrack 上播放 MP3 文件的信息。

    希望这对你有帮助。

    【讨论】:

      【解决方案2】:

      AudioTrack 类仅支持 PCM 音频数据,这就是您听到噪音的原因。

      如果您想播放 .mp3 和 .ogg 等压缩音频文件,请使用 MediaPlayerSoundPool
      或者,您可以在应用中解码压缩音频并将生成的 PCM 数据写入 AudioTrack,但这是一项更大的任务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        相关资源
        最近更新 更多