AudioTrack介绍
音频播放声音分为MediaPlayer和AudioTrack两种方案的。MediaPlayer可以播放多种格式的声音文件,例如MP3,WAV,OGG,AAC,MIDI等。然而AudioTrack只能播放PCM数据流。当然两者之间还是有紧密的联系,MediaPlayer在播放音频时,在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,最后由AudioFlinger进行混音,传递音频给硬件播放出来。利用AudioTrack播放只是跳过Mediaplayer的解码部分而已。
下面是应用调用AudioTrack播放的例子
AudioTrack audio = new AudioTrack(AudioManager.STREAM_MUSIC, // 指定流的类型
32000, // 设置音频数据的采样率 32k,如果是44.1k就是44100
AudioFormat.CHANNEL_OUT_STEREO, // 设置输出声道为双声道立体声,而CHANNEL_OUT_MONO类型是单声道
AudioFormat.ENCODING_PCM_16BIT, // 设置音频数据块是8位还是16位,这里设置为16位。
AudioTrack.MODE_STREAM // 设置模式类型);
byte[] buffer = new buffer[4096];
audio.write(buffer, 0, 4096);
audio.play(); // 启动音频设备,下面就可以真正开始音频数据的播放了
//关闭并释放资源
audio.stop();
audio.release();
音频流的类型
在AudioTrack构造函数中,会接触到AudioManager.STREAM_MUSIC这个参数。它的含义与Android系统对音频流的管理和分类有关。Android将系统的声音分为好几种流类型,下面是几个常见的:
STREAM_MUSIC:用于音乐播放的音频流。
STREAM_SYSTEM:用于系统声音的音频流。
STREAM_RING:用于电话铃声的音频流。
STREAM_VOICE_CALL:用于电话通话的音频流。
STREAM_ALARM:用于警报的音频流。
STREAM_NOTIFICATION:用于通知的音频流。
STREAM_BLUETOOTH_SCO:用于连接到蓝牙电话时的手机音频流。