天天看點

Android左右聲道的控制效果圖源碼AudioTrack對象的構造左右聲道控制封裝使用向左右聲道單獨輸出不同的音頻資料

檢視了<code>AudioTrack</code>的API,提供了<code>play()</code>、<code>pause()</code>、<code>stop()</code>、<code>write()</code>等一系列的方法。

通過<code>write()</code>方法,可以實作将音頻資料發送出去(播放出來)。

有三個構造方法

主要參數有如下幾個

streamType:以什麼形式播放

STREAM_VOICE_CALL

STREAM_SYSTEM

STREAM_RING

STREAM_MUSIC

STREAM_ALARM

STREAM_NOTIFICATION

sampleRateInHz:采樣率

channelConfig:聲道

AudioFormat.CHANNEL_OUT_MONO:輸出單聲道音頻資料

AudioFormat.CHANNEL_OUT_STEREO:輸出雙聲道音頻資料(立體聲)

audioFormat:音頻資料格式

mode:緩沖模式

MODE_STATIC:一次性将音頻載入以後再播放

MODE_STREAM:以流的形式,加載一點就播放一點

把channelConfig的相關參數都看了一遍,沒發現有可以指定向某聲道發送資料的,隻能通過<code>AudioFormat.CHANNEL_OUT_MONO</code>和<code>AudioFormat.CHANNEL_OUT_STEREO</code>選擇是輸出單聲道的音頻資料還是雙聲道的音頻資料。

構造的時候不能選擇指定聲道輸出音頻,但是有這樣一個方法

可以通過把某一個聲道的音量設定到最小,達到隻想某個聲道輸出音頻的效果。

我自己也有點”呵呵“,但是也沒有發現還有别的方法可以實作這樣的效果。

這個方法還有一點小問題,在個别手機上,即使将某個聲道的聲音設定到了最小,也還是會有一點聲音,這個我也還沒有搞清楚為什麼,個人猜測可能和手機硬體有關系。

我這裡的緩沖模式使用的<code>MODE_STREAM</code>的形式,以流的形式播放,因為這個邏輯要稍微複雜一點,尤其是暫停以後再繼續播放的位置。

也是一個很”呵呵“的做法,但是依然還沒有找到更好的方法。

構造兩個<code>AudioTrack</code>對象,分别輸出兩個音頻,一個禁用左聲道,一個禁用右聲道,達到預期效果。

繼續閱讀