Android音頻播放AudioTrack

在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採樣點

  3、向AudioTrack中寫入流數據。

int write (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes)
   在流模式下,可以邊寫邊播放。

   在靜態模式下,只能寫一次數據,一次將全部數據寫進去。

  4、播放

   audiotrack.play();

  5、暫停,釋放資源。

   if(audiotrack != null){
       audiotrack.stop();
       audiotrack.release();
   }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章