凡亿教育-豆豆
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 用Java播放本草纲目,你学废了吗(下)
用Java播放本草纲目,你学废了吗(下)

前文我们已用Clip API来实现Java播放本草纲目,接下来将用 SourceDataLine来实现Java播放本草纲目,希望对小伙伴们有所帮助。
2、SourceDataLine
SourceDataLine API是Java的一个缓冲或流式声音API,属于javax.sound.sampled包,可以播放无法预装到内存中的长声音文件。相比Clip API,SourceDataLine更适合应用在大内存音频文件、流传实时音频文件。
①首先创建一个示例类,从项目的资源文件夹中读取音频文件(我的资源文件夹包含三个不同格式的音频文件,即WAV、MP3和MPEG)。
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(audioFilePath);
②在文件输入流中创建一个AudioInputStream。
AudioInputStream audioStream = AudioSystem.getAudioInputStream(inputStream);
③创建一个DataLine.Info对象。
AudioFormat audioFormat = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, audioFormat);
④由于SourceDataLine,音频数据是分块加载,需要提供缓冲区的大小。
private static final int BUFFER_SIZE = 4096;
⑤在AudioInputStream中读取音频数据,并将其发送到SourceDataLine的播放缓冲区,直到它到达流的末端。
byte[] bufferBytes = new byte[BUFFER_SIZE];
int readBytes = -1;
while ((readBytes = audioStream.read(bufferBytes)) != -1) {
sourceDataLine.write(bufferBytes, 0, readBytes);
}
⑥关闭开放资源
sourceDataLine.drain();
sourceDataLine.close();
audioStream.close();
最后运行代码即可实现Java播放本草纲目音频文件,相比Clip API,SourceDataLine不需要实现任何LineListener,但缺陷是无法指定任意位置播放视频。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论