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);
}
网友评论