2015-09-04 68 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来播放文件,因为在音轨中我可以改变频率,因此我可以将一个声音改为另一个。我正在开发语音转换器应用程序 –