美文网首页
Android音频接口MediaPlayer,SoundPool

Android音频接口MediaPlayer,SoundPool

作者: Erich_Godsen | 来源:发表于2020-11-24 22:22 被阅读0次

Android提供了三套音频播放的API,分别是MediaPlayer,SoundPool,AudioTrack,适用场景如下:

MediaPlayer

适合在后台长时间播放本地音乐文件或者在线等流媒体文件,它的封装层次比较高,使用方式也比较简单

SoundPool

适合播放比较短的音频片段,比如游戏声音,按键声音,铃声片段等,并且可以同时播放多个音频

AudioTrack

适合低延时的播放,是更加底层的API,提供了非常强大的控制能力,适合流媒体播放等场景,由于其属于底层API,所以需要结合解码器来使用
其使用方法如下:

 public AudioTrack createAudioTrack(int sampleRate, int channels) {
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
        int channelConfig;
        if (channels == 1) {//单声道
            channelConfig = android.media.AudioFormat.CHANNEL_OUT_MONO;
        } else if (channels == 2) {//立体声,即双声道
            channelConfig = android.media.AudioFormat.CHANNEL_OUT_STEREO;
        } else {
            channelConfig = android.media.AudioFormat.CHANNEL_OUT_STEREO;
        }

        int bufferSizeInBytes = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
        //第一个参数:声音的类型,有以下几种
        //STREAM_VOICE_CALL:电话声音
        //STREAM_SYSTEM:系统声音
        //STREAM_RING:铃声
        //STREAM_MUSIC:音乐声
        //STREAM_ALARM:警告声
        //STREAM_NOTIFICATION:通知声
        //第二个参数:采样频率,可选:8000,16000,22050,24000,32000,44100,48000等
        //第三个参数:声道数
        //第四个参数:采样格式,AudioFormat.ENCODING_PCM_16BIT,AudioFormat.ENCODING_PCM_8BIT
        //第五个参数:其配置AudioTrack内部的音频缓冲区大小,最好通过getMinBufferSize来计算
        //第六个参数:播放模式,MODE_STATIC需要一次性将所有的数据都写入播放缓冲区,简单高效,通常用于铃声,系统提示音的播放,MODE_STREAM需要按照一定的时间间隔不间断的写入音频数据,理论上可以用于任何音频场景,通常用来播放流媒体音频
        return new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat,
                bufferSizeInBytes, AudioTrack.MODE_STREAM);
    }

相关文章

网友评论

      本文标题:Android音频接口MediaPlayer,SoundPool

      本文链接:https://www.haomeiwen.com/subject/ufgwiktx.html