一、android平台上的音频播放
Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack。简单来说,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源; SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频; 而 AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体和VoIP 语音电话等场景。
MediaPlayer播放音频介绍过了,这里介绍使用AudioTrack播放音频。实际上MediaPlayer也是调用MediaExtractor将音视频分离后再调用AudioDecoder进行解密,解码后的音频数据流再交给AudioTrack进行播放。因此AudioTrack支持PCM格式播放。
二、AudioTrack 的工作流程
(1) 配置参数,初始化内部的音频播放缓冲区
(2) 开始播放
(3) 需要一个线程,不断地向 AudioTrack 的缓冲区“写入”音频数据,注意,这个过程一定要及时,否则就会出现“underrun”的错误,该错误在音频开发中比较常见,意味着应用层没有及时地“送入”音频数据,导致内部的音频播放缓冲区为空。
(4)停止播放,释放资源
三、AudioTrack类的主要方法
方法 | 描述 |
---|---|
AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode) |
构造函数 |
static int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) |
计算最小缓冲区大小,参数同构造函数中三个参数。 |
void play() |
开始播放 |