我想從sdcard讀取音頻文件爲字節數組。並使用此字節數組將文件播放到AudioTrack中。使用AudioTrack從音頻文件讀取字節數組並播放文件
像AudioTrack這樣
track.play();
track.write(byte_Arr,0,byte_Arr.length);
我想從sdcard讀取音頻文件爲字節數組。並使用此字節數組將文件播放到AudioTrack中。使用AudioTrack從音頻文件讀取字節數組並播放文件
像AudioTrack這樣
track.play();
track.write(byte_Arr,0,byte_Arr.length);
路徑的最簡單方法在這樣的播放音頻方案是讀取「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」文件,所以不能在頭提供進一步細節,但你可以檢查了這一點:
如果你只是知道採樣率,比特深度和通道配置,那麼你可以繞過標題。它通常佔用文件的前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...
我不確定上面的代碼,因爲我沒有嘗試它。
而不是從音頻文件讀取字節數組的播放文件,你可以這樣設置
MediaPlayer mp = new MediaPlayer();
mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.mp3");
mp.prepare();
mp.start();
小心使用mp3授權! – Soley
@Salivan你是什麼意思? :D –
@AjayShrestha實際上我想用audiotrack來播放文件,因爲在音軌中我可以改變頻率,因此我可以將一個聲音改爲另一個。我正在開發語音轉換器應用程序 –
你應該保存你的記錄在WAV格式。檢查了這一點:[鏈接](http://stackoverflow.com/questions/5245497/how-to-record-wav-format-file-in-android)你可以加載它然後它的頻率。你想要一個代碼示例嗎? – mtpc1486
是的兄弟,如果您提供代碼示例,它會很棒,謝謝 –
這是用於錄製來自麥克風的音頻,然後將其保存到文件中:[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