参考:
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` 实例中写入数据。