2015-09-04 104 views

回答

1

路徑的最簡單方法在這樣的播放音頻方案是讀取「wav」文件。如果您想要讀取另一種格式,例如「mp3」,則必須使用另一個類似MediaPlayer的音頻播放器。其用法示例如下:

String filePath = Environment.getExternalStorageDirectory()+"/yourfolderName/yourfile.mp3"; 
mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(filePath); 
mediaPlayer.prepare(); 
mediaPlayer.start(); 

如果您仍然想使用AudioTrack進行播放,那麼您需要一個解碼器。這可能是一項非常複雜的任務,因此我們將繼續使用「wav」文件。

「wav」文件的頭部像其他格式,如「mp3」。

爲了做到這一點,你必須閱讀標題。您必須找出文件的採樣率,位深度和通道配置。您可以通過研究瞭解如何從標題中獲得這些內容。我不知道,如果你真的想讀「WAV」文件,所以不能在頭提供進一步細節,但你可以檢查了這一點:

Wave format

如果你只是知道採樣率,比特深度和通道配置,那麼你可以繞過標題。它通常佔用文件的前44個字節,然後是原始PCM數據。您可以使用BufferedReader來讀取這些數據。

String filePath = Environment.getExternalStorageDirectory()+"/yourfolderName/yourfile.wav"; 
BufferedReader br = new BufferedReader(new FileReader(filePath)); 
File mFile = new File(filePath); 
long fLength = mFile.length(); 
char[fLength - 44] buffer; 
br.Read(buffer, 44, fLength - 44); 
br.close(); 
// Additional tasks... 

我不確定上面的代碼,因爲我沒有嘗試它。

+0

你應該保存你的記錄在WAV格式。檢查了這一點:[鏈接](http://stackoverflow.com/questions/5245497/how-to-record-wav-format-file-in-android)你可以加載它然後它的頻率。你想要一個代碼示例嗎? – mtpc1486

+0

是的兄弟,如果您提供代碼示例,它會很棒,謝謝 –

+0

這是用於錄製來自麥克風的音頻,然後將其保存到文件中:[link](http://www.edumobile.org/android/audio-recording -in-WAV格式的功能於Android的編程/)。還檢查了這一點:[鏈接](http://stackoverflow.com/questions/3925030/using-audiotrack-in-android-to-play-a-wav-file)。對不起,沒有給出一個完整的例子。使用'BufferedReader'來讀取文件的內容。在我的答案的最後一個代碼示例中,有一個名爲'buffer'的char數組。使用'AudioTrack'的'Write'功能將該緩衝區寫入'AudioTrack'。使用'SetPlaybackRate'函數來改變頻率。 – mtpc1486

0

而不是從音頻文件讀取字節數組的播放文件,你可以這樣設置

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.mp3"); 
mp.prepare(); 
mp.start(); 
+0

小心使用mp3授權! – Soley

+0

@Salivan你是什麼意思? :D –

+0

@AjayShrestha實際上我想用audiotrack來播放文件,因爲在音軌中我可以改變頻率,因此我可以將一個聲音改爲另一個。我正在開發語音轉換器應用程序 –