AudioTrack 和 MediaPlayer 都可以播放聲音,主要差別是 AudioTrack 沒有 decode 的能力,只能播放 PCM。 ## 底層原理 每一個 audio stream 對應著一個 AudioTrack 類的一個實例,每個 AudioTrack 會在建立時會註冊到 AudioFlinger 中,由 AudioFlinger 把所有的 AudioTrack 進行混合(Mixer),然後輸送到 AudioHardware中 進行播放,目前 Android 同時最多可以創建32個音頻流,也就是說,Mixer 最多會同時處理32個 AudioTrack 的資料。 ## 建立 AudioTrack 物件 ```kotlin const val SAMPLE_RATE = 44100 const val CHANNEL_OUT_FORMAT = AudioFormat.CHANNEL_OUT_STEREO const val AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT var audioBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_OUT_FORMAT, AUDIO_FORMAT) audioTrack = AudioTrack( AudioManager.STREAM_MUSIC, SAMPLE_RATE, CHANNEL_OUT_FORMAT, AUDIO_FORMAT, audioBufferSize, AudioTrack.MODE_STREAM) audioTrack?.play() ```