我想用AudioTrack从SD卡播放音频文件。我试过这段代码:
int minBufferSize = AudioTrack.getMinBufferSize(8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
int bufferSize = 512;
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
AudioTrack.MODE_STREAM);
int i = 0;
byte[] s = new byte[bufferSize];
FileInputStream fin = new FileInputStream(path);
DataInputStream dis = new DataInputStream(fin);
at.play();
while ((i = dis.read(s, 0, bufferSize)) > -1)
{
at.write(s, 0, i);
}
at.stop();
at.release();
dis.close();
fin.close();
但它无法正常播放音频文件。它不是原始音频,而是播放某种噪音。
答案 0 :(得分:5)
从以下链接我发现AudioTrack只播放PCM音频, http://developer.android.com/guide/topics/media/index.html
请看一下这段代码。 http://mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/ 这提供了有关如何在AudioTrack上播放MP3文件的信息。
希望这有助于你。
答案 1 :(得分:2)
AudioTrack类仅支持PCM音频数据,这就是您听到噪音的原因。
如果要播放.mp3和.ogg等压缩音频文件,请使用MediaPlayer或SoundPool。
或者,您可以解码应用程序中的压缩音频并将生成的PCM数据写入AudioTrack,但这是一项更大的任务。