使用AudioTrack从音频文件读取字节数组并播放文件

时间:2015-09-04 18:42:19

标签: android bytearray audiotrack

我想将sdcard中的音频文件读入字节数组。并使用此字节数组将文件播放到AudioTrack。

像这样的AudioTrack播放文件

SELECT * FROM courses
LEFT JOIN users u
ON courses.course_students LIKE CONCAT('%i:',u.id,';%')

2 个答案:

答案 0 :(得分:1)

在这种情况下播放音频的最简单方法是阅读" wav"文件。如果你想阅读另一种格式,例如" mp3"你将不得不使用另一个音频播放器类MediaPlayer。其用法示例如下:

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

如果您仍想使用AudioTrack播放,则需要解码器。这可能是一项非常复杂的任务,因此我们将继续进行" wav"文件。

A" 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...

我不确定上面的代码,因为我没有尝试过。

答案 1 :(得分:0)

您可以像这样设置路径

,而不是从音频文件中读取字节数组
MediaPlayer mp = new MediaPlayer();
mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.mp3");
mp.prepare();
mp.start();
相关问题