在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();
}