AudioTrack是Android中的一個類,它允許播放原始音頻樣本。利用該類能夠播放使用AudioRecord捕獲的音頻,而他們並不能使用mediaPlayer對象來播放。
為了構造一個AudioTrack對象,需要傳入一系列的配置變量來描述待播放的音頻。
第一個參數是流類型。可能的值定義為AudioManager類中的常量。在示例中將使用AudioManager.STREAM_MUSIC,這是用於正常播放音樂的音頻流。
第二個參數是將要播放的音頻數據的采樣率,以赫茲為單位。在示例中,采用11025Hz的采樣率來捕獲音頻,因此咋播放時需要指定相同的值。
第三個參數是通道配置。可能的值與構造AudioRecord對象時使用的值相同,他們定義為AudioFormat類中的常量。他們的名稱解釋了其作用。
AudioFormat.CHANNEL_CONFIGURATION_MONO 單通道
AudioFormat.CHANNEL_CONFIGURATION_STEREO 雙通道
AudioFormat.CHANNEL_CONFIGURATION_INVALID 錯誤的音頻通道掩碼
AudioFormat.CHANNEL_CONFIGURATION_DEFAULT 默認通道
第四個參數是音頻格式,可能的值與構造AudioRecord對象時使用的值相同,他們定義為AudioFormat類中的常量。使用的值應匹配待傳入的音頻的值。
AudioFormat.ENCODING_DEFAULT
AudioFormat.ENCODING_INVALID
AudioFormat.ENCODING_PCM_16BIT
AudioFormat.ENCODING_PCM_8BIT
第五個參數是將對象中用於存儲音頻的緩沖區大小。為了確定使用最小的緩沖區大小,可以調用getMinBufferSize方法,同時傳入采樣率、通道配置和音頻格式。
1 private int frequency=11025; 2 private int channelConfiguration=AudioFormat.CHANNEL_CONFIGURATION_MONO; 3 private int audioEncoding=AudioFormat.ENCODING_PCM_16BIT;
4 private int bufferSize=AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding)
最后一個參數是模式。可能的值定義為AudioTrack類中的常量。
AudioTrack.MODE_STATIC:在播放發生之前將所有的音頻數據轉移到AudioTrack對象。
AudioTrack.MODE_STREAM:在播放的同時將音頻數據持續的轉移到AudioTrack對象。
下面是AudioTrack配置:
1 AudioTrack audioRtack=new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, bufferSize, AudioTrack.MODE_STREAM);
一旦構造了AudioTrack,就需要打開音頻源,將音頻數據讀取到緩存中,並將它傳遞給AudioTrack對象。
根據一個包含了正確格式(11025Hz、16位、單聲道)的原始PCM數據的文件,可以構造DataInputStream。
1 DataInputStream dis=new DataInputStream(new FileInputStream(recordingFile));
然后可以調用AudioTrack對象上的play方法,並開始從DataInputStream寫入音頻。
1 audioRtack.play(); 2 try { 3 while(isPlaying&&dis.available()>0){ 4 int i=0; 5 while(dis.available()>0&&i<audiodata.length){ 6 audiodata[i]=dis.readShort(); 7 i++; 8 } 9 audioRtack.write(audiodata, 0, audiodata.length); 10 } 11 } catch (IOException e) { 12 e.printStackTrace(); 13 } 14 try { 15 dis.close(); 16 } catch (IOException e) { 17 e.printStackTrace(); 18 }
以上內容涵蓋了使用AudioTrack播放由AudioRecord錄制的音頻文件的基本知識。