Play Audio (mp3, ogg) from sd card with AudioTrack

霸气de小男生 提交于 2020-01-12 08:27:35

问题


I want to play audio file from SD card with AudioTrack. I've tried with this code:

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();

But it doesn't play audio file properly. Instead of original audio it plays some kind noise sound.


回答1:


From the following link i have found that AudioTrack only plays PCM audio, http://developer.android.com/guide/topics/media/index.html

And Please have a look on this code. http://mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/ this is provided the information about how to Play an MP3 file on an AudioTrack.

Hope this helps u .




回答2:


The AudioTrack class only supports PCM audio data, that's why you're hearing noise.

Use MediaPlayer or SoundPool if you want to play compressed audio files like .mp3 and .ogg.
Alternatively you could decode the compressed audio in your app and write the resulting PCM data to an AudioTrack, but that's a much bigger task.



来源:https://stackoverflow.com/questions/15200812/play-audio-mp3-ogg-from-sd-card-with-audiotrack

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!