在Android中说到音频播放,通常都会想到使用MediaPlayer,今天要介绍的确是AudioTrack。
1、创建AudioTrack对象
AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)
参数1:音频流类型 可取的值有:
AudioManager.STREAM_ALARM;//警告声
AudioManager.STREAM_DTMF;//双音多频
AudioManager.STREAM_MUSIC;//音乐声
AudioManager.STREAM_NOTIFICATION;//通知声
AudioManager.STREAM_RING;//响铃声
AudioManager.STREAM_SYSTEM;//系统声
AudioManager.STREAM_VOICE_CALL;//电话声
参数2:采样率 取值范围>4000<48000
参数3:声道数 可取的值有:
AudioFormat.CHANNEL_OUT_MONO;//单声道
AudioFormat.CHANNEL_OUT_STEREO;//双声道
参数4:采样精度:一个采样点16比特,相当于2个字节
可取的值有:
AudioFormat.ENCODING_PCM_16BIT;//16采样点
AudioFormat.ENCODING_PCM_8BIT;//8采样点
参数5:播放音频的最长样品
参数6:模式:可取的值
AudioTrack.MODE_STREAM;//流模式
AudioTrack.MODE_STATIC;//静态模式
2、在流模式下,如果不确定最小缓冲区大小时,可以调用AudioTrack的静态方法
int getMinBufferSize (int sampleRateInHz, int channelConfig, int audioFormat)来获取最小缓冲区大小。
参数1:采样率 取值范围>4000<48000
参数2:通道数 可取的值有:
AudioFormat.CHANNEL_OUT_MONO;//单声道
AudioFormat.CHANNEL_OUT_STEREO;//双声道
参数3:采样精度
一个采样点16比特,相当于2个字节
可取的值有:
AudioFormat.ENCODING_PCM_16BIT;//16采样点
AudioFormat.ENCODING_PCM_8BIT;//8采样点
int write (byte[] audioData, int offsetInBytes, int sizeInBytes)在流模式下,可以边写边播放。
在静态模式下,只能写一次数据,一次将全部数据写进去。
4、播放
audiotrack.play();
5、暂停,释放资源。
if(audiotrack != null){
audiotrack.stop();
audiotrack.release();
}