参考: http://mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/

http://baike.baidu.com/view/14471.htm

建议下载一个铃声文件(小点的),然后用千千静听,转换成wav格式的。

源码如下:

public class Playmp3Activity extends Activity  {
private final String file="//sdcard//testring.wav";
private final static String tag="22";
static byte[] buffer=null;
AudioTrack at=null;
int pcmlen=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
try {
FileInputStream fis=new FileInputStream(file);
buffer=new byte[1024*1024*2];//2M
int len=fis.read(buffer);
Log.i(tag, "fis len="+len);
Log.i(tag, "0:"+(char)buffer[0]);
pcmlen=0;
pcmlen+=buffer[0x2b];
pcmlen=pcmlen*256+buffer[0x2a];
pcmlen=pcmlen*256+buffer[0x29];
pcmlen=pcmlen*256+buffer[0x28];

int channel=buffer[0x17];
channel=channel*256+buffer[0x16];

int bits=buffer[0x23];
bits=bits*256+buffer[0x22];
Log.i(tag, "pcmlen="+pcmlen+",channel="+channel+",bits="+bits);
at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
channel,
AudioFormat.ENCODING_PCM_16BIT,
pcmlen,
AudioTrack.MODE_STATIC);
at.write(buffer, 0x2C, pcmlen);
Log.i(tag, "write 1...");
at.play();
Log.i(tag, "play 1...");


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
at.release();
}

}

参考:http://mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/http://baike.baidu.com/view/14471.htm建议下载一个铃声文件(小点
介绍音频的采集、编码、生成 文件 、转码等操作,通过 Audio Record 采集音频,生成三种格式的 文件 格式(pcm、 wav 、aac),用 Audio Stack 来 播放 这个音频。 一、PCM 、 WAV 、AAC 的 文件 头介绍 这里简单的介绍一下常见的三种音频格式: PCM :PCM(Pulse Code Modulation—-脉码调制录音)。所谓 PCM 录音就是将声音等模拟信号变成符号化的脉...
```java int sampleRate = 44100; int buffer Size = Audio Trac k.getMin Buffer Size(sampleRate, Audio Format.CHANNEL_OUT_STEREO, Audio Format.ENCODING_PCM_16BIT); Audio Trac k audio Trac k = new Audio Trac k( Audio Manager.STREAM_MUSIC, sampleRate, Audio Format.CHANNEL_OUT_STEREO, Audio Format.ENCODING_PCM_16BIT, buffer Size, Audio Trac k.MODE_STREAM); audio Trac k.play(); byte [] data = null; // 音频数据 while (true) { int byte sWritten = audio Trac k.write(data, 0, data.length); if ( byte sWritten <= 0) { break; audio Trac k.stop(); audio Trac k.release(); 在上面的代码中,我们首先创建了一个 ` Audio Trac k` 实例,然后调用 `play()` 方法开始 播放 音频。然后,我们可以通过循环调用 `write()` 方法不断向 ` Audio Trac k` 实例中写入音频数据,直到音频数据全部 播放 完毕。最后,我们调用 `stop()` 方法停止 播放 并释放 ` Audio Trac k` 实例。 需要注意的是,我们在创建 ` Audio Trac k` 实例时需要提供的参数包括采样率、声道数、采样位数等,这些参数需要根据实际的音频数据进行设置。此外,我们还需要根据实际情况设置音频数据的读取方式,可以 使用 `MODE_STATIC` 或 `MODE_STREAM` 两种模式中的任意一种。在 使用 `MODE_STREAM` 模式时,我们需要在循环中不断调用 `write()` 方法向 ` Audio Trac k` 实例中写入数据。