AudioTrack是Android中用于播放音频的类,它提供了两种写入模式:WRITE_BLOCKING(阻塞模式)和WRITE_NON_BLOCKING(非阻塞模式)。这两种模式的区别在于写入数据时的行为。
下面是一个使用WRITE_BLOCKING模式的示例代码:
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, bufferSize, AudioTrack.MODE_STREAM);
audioTrack.play();
while (isPlaying) {
byte[] buffer = // 获取音频数据的缓冲区
int bytesWritten = audioTrack.write(buffer, 0, bufferSize);
// 处理写入的数据并继续填充缓冲区
}
下面是一个使用WRITE_NON_BLOCKING模式的示例代码:
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, bufferSize, AudioTrack.MODE_STREAM);
audioTrack.play();
while (isPlaying) {
byte[] buffer = // 获取音频数据的缓冲区
int bytesWritten = audioTrack.write(buffer, 0, bufferSize, AudioTrack.WRITE_NON_BLOCKING);
if (bytesWritten < 0) {
// 处理写入错误
} else {
// 处理写入的数据并继续填充缓冲区
}
}
需要注意的是,在WRITE_NON_BLOCKING模式下,你需要检查write()方法的返回值,以处理写入错误或者缓冲区已满的情况。
总结: