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

Read byte array from audio file and play file using AudioTrack

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

喜欢AudioTrack这样播放文件

   track.play();                       
   track.write(byte_Arr,0,byte_Arr.length);

您可以这样设置路径,而不是从音频文件中读取字节数组

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

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

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

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

一个 "wav" 文件有一个 header 像其他格式一样 "mp3".

为此,您必须阅读 header。您必须找出文件的采样率、位深度和通道配置。您可以通过研究了解如何从 header 中获取这些信息。我不确定您是否真的想阅读 "wav" 文件,因此不提供有关 header 的更多详细信息,但您可以检查一下:

Wave format

如果您只知道采样率、位深度和通道配置,那么您可以绕过 header。它通常占据文件的前 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...

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