【发布时间】:2015-09-05 04:05:43
【问题描述】:
我想将 sdcard 中的音频文件读入字节数组。并使用此字节数组将文件播放到 AudioTrack 中。
喜欢AudioTrack这样播放文件
track.play();
track.write(byte_Arr,0,byte_Arr.length);
【问题讨论】:
标签: android bytearray audiotrack
我想将 sdcard 中的音频文件读入字节数组。并使用此字节数组将文件播放到 AudioTrack 中。
喜欢AudioTrack这样播放文件
track.play();
track.write(byte_Arr,0,byte_Arr.length);
【问题讨论】:
标签: android bytearray audiotrack
在这种情况下播放音频的最简单方法是读取“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();
【讨论】: