AudioTrack播放音频
AudioTrack播放音频的基本步骤如下:
- 初始化AudioTrack对象: 创建一个
AudioTrack
构造函数所需的配置对象,如AudioAttributes
和AudioFormat
。 - 创建AudioTrack实例: 使用配置对象初始化
AudioTrack
。 - 准备音频数据: 将音频数据加载到一个字节缓冲区中。
- 写入音频数据到AudioTrack: 使用
write()
方法将音频数据写入AudioTrack
。 - 播放音频: 调用
play()
方法开始播放。 - 释放资源: 音频播放完成后,使用
release()
方法释放资源。
示例:
public class AudioPlayExample {
public static void playAudio(Context context, String audioFilePath) {
try {
// 1. 初始化AudioTrack对象
// 1.1 音频属性
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
// 1.2 音频格式
AudioFormat audioFormat = new AudioFormat.Builder()
.setSampleRate(44100) // 采样率
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) // 声道数
.setEncoding(AudioFormat.ENCODING_PCM_16BIT) // 位深
.build();
// 2. 创建AudioTrack实例
int minBufSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
this.mAudioTrack = new AudioTrack.Builder()
.setAudioAttributes(attributes)
.setAudioFormat(audioFormat)
.setBufferSizeInBytes(minBufSize)
.setTransferMode(AudioTrack.MODE_STREAM)
.build();
// 3. 准备音频数据
File audioFile = new File(audioFilePath);
FileInputStream fis = new FileInputStream(audioFile);
byte[] buffer = new byte[1024];
int read;
while ((read = fis.read(buffer)) != -1) {
// 4. 写入音频数据
audioTrack.write(buffer, 0, read);
}
// 5. 播放音频
audioTrack.play();
// 等待音频播放完成
audioTrack.waitForEndOfStream();
// 6. 释放资源
audioTrack.release();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
MediaPlayer播放音频
MediaPlayer播放音频的基本步骤如下:
- 创建MediaPlayer实例: 创建一个
MediaPlayer
对象。 - 设置数据源: 使用
setDataSource()
方法设置音频文件的路径。 - 准备MediaPlayer: 调用
prepare()
方法准备播放。这将加载媒体的元数据。 - 播放音频: 调用
start()
方法开始播放音频。 - 释放资源: 音频播放完成后,调用
release()
方法释放MediaPlayer
资源。 - 处理异常: 在播放过程中,可能会遇到各种异常情况,需要使用try-catch块来处理。
public class AudioPlayExample {
private MediaPlayer mediaPlayer;
public void playAudio(String audioFilePath) {
try {
// 1. 创建MediaPlayer实例
mediaPlayer = new MediaPlayer();
// 2. 设置数据源
Uri uri = Uri.parse(audioFilePath);
mediaPlayer.setDataSource(uri.getPath());
// 3. 准备MediaPlayer
mediaPlayer.prepare();
// 4. 播放音频
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopAudio() {
if (mediaPlayer != null) {
// 5. 释放资源
mediaPlayer.stop();
// 6. 处理异常
mediaPlayer.release();
}
}
}