先新建输入流对象,然后创建源数据行,
然后根据路径获取数据流,并获取文件格式,
然后利用源数据行创建数据行对象,
用音频系统类获取匹配的数据行对象,用指定格式打开数据行,
然后读写数据行,最后清空并关闭数据行对象。
@Override
public void run() {
byte[] auBuffer = new byte[1024 * 128];
do {
AudioInputStream audioInputStream = null; // 新建的音频输入流对象
SourceDataLine auline = null; // 混频器源数据行
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile); // 从文件中获取数据流
AudioFormat format = audioInputStream.getFormat(); // 获取文件格式
// 利用数据行类型和音频格式创建数据行对象
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
// 利用音频系统类获取指定对象中匹配的行对象
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format); // 用指定格式打开数据行
auline.start();
int byteCount = 0;
while (byteCount != -1) {
byteCount = audioInputStream.read(auBuffer, 0, auBuffer.length); // 从数据流中读出128KB数据
if (byteCount >= 0) {
auline.write(auBuffer, 0, byteCount); // 将数据写入数据行
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
} finally {
auline.drain(); // 清空数据行
auline.close(); // 关闭数据行
}
} while (circulate);
}