我如何使用AudioTrack播放mp3文件并寻求定位

时间:2016-07-19 10:49:29

标签: android android-mediaplayer audiotrack

Iam尝试开发一个应用程序,我可以将音乐文件(mp3)的速度设置为1x,1.5x,2x,2.5x像这样。但MediaPlayer不支持此功能,除非它是23 api。我如何使用AudioTrack播放这个mp3文件并寻求定位。下面的代码给了我“zzzzzzz”的声音。

public void playAudio(){
        int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
        int bufferSize = 512;
        audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
        String filepath = Environment.getExternalStorageDirectory().getAbsolutePath();

        int i = 0;
        byte[] s = new byte[bufferSize];
        try {
            final String path= Environment.getExternalStorageDirectory().getAbsolutePath() + "/folioreader/audio"+".mp3";
            FileInputStream fin = new FileInputStream(path);
            DataInputStream dis = new DataInputStream(fin);

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

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

        } catch (FileNotFoundException e) {
            // TODO
            e.printStackTrace();
        } catch (IOException e) {
            // TODO
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:0)

AudioTrack可以播放未压缩音频(WAV)而不是任何压缩音频(MP3或AAC等)。您需要调用MediaCodec进行解码,然后使用Audio Track播放音频。请参阅这些链接,https://developer.android.com/reference/android/media/AudioTrack.htmlhttps://developer.android.com/reference/android/media/MediaCodec.html

为了更快地播放,请提供与所需速度成比例的采样率。对于前者以2倍速率播放8kHz音频,在AudioTrack中给出16kHz等等。这是粗暴的方式。