天天看點

使用AudioTrack實作聲音播放

這篇文章主要講的是AudioTrack的用法。

AudioTrack 一般用來實作播放原始音頻資料(PCM)

覺得這個類沒有什麼好說的,咱就直接上代碼吧。

步驟一:

配置需要的參數,初始化AudioTrack對象。

使用AudioTrack實作聲音播放

我們需要了解一下這些參數

streamType    這個參數表示使用哪種音頻管理政策      
STREAM_VOCIE_CALL         電話聲音      
STREAM_SYSTEM                系統聲音      
STREAM_RING                      鈴聲       
STREAM_ALARM                  警告聲      
STREAM_NOTIFICATION     通知聲      
sampleRateInHz,     采樣率(我在使用AudioRecord實作聲音采集一文中說明)       
channelConfig,      聲道數(我在使用AudioRecord實作聲音采集一文中說明)       
bufferSizeInBytes,  緩存大小(我在使用AudioRecord實作聲音采集一文中說明)       
mode        播放模式。一種是static方式,另一種是streaming方式。      
static方式:需要一次性将所有的資料都寫入播放緩沖區,适合播放鈴聲,較短的音頻片段。      
streaming方式:按照一定的時間間隔不間斷的寫入音頻資料。(常用這種方式)      
private AudioTrack  audioTrack;
    private int  streamType = AudioManager.STREAM_MUSIC;
    private int  sampleRateInHz = 44100;
    private int  channelConfig = AudioFormat.CHANNEL_OUT_MONO;
    private int  audioFormat = AudioFormat.ENCODING_PCM_16BIT;
    private int  bufferSizeInBytes;
    private int  mode = AudioTrack.MODE_STREAM;
           
bufferSizeInBytes = AudioTrack.getMinBufferSize(sampleRateInHz,channelConfig,audioFormat);

           

步驟二:

還是播放

步驟三:

開啟一個子線程,需要不間斷的向AudioTrack緩沖區 “寫入”資料

步驟四:

釋放資源

int len = -1;
        try {
            while((len = dataInputStream.read(bys)) != -1 ){
                 audioTrack.write(bys,0,len);
            }
            audioTrack.stop();
            audioTrack.release();
        } catch (IOException e) {
            e.printStackTrace();
        }
           

AudioTrack讀取PCM檔案播放聲音。

請多多指教

接下來一篇文章我會将帶來  将PCM格式存儲成WAV格式檔案

繼續閱讀