博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA按顺序播放多个wav音频
阅读量:6075 次
发布时间:2019-06-20

本文共 3065 字,大约阅读时间需要 10 分钟。

用Java按顺序播放多个音频部件,不是同时播放。代码如下:

List
files = new ArrayList
(); files.add("barcode_prefix.wav"); for (char letter : barcode.toCharArray()) { files.add(letter + ".wav"); } files.add("barcode_suffix.wav"); byte[] buffer = new byte[4096]; for (String file : files) { try { AudioInputStream is = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(file)); AudioFormat format = is.getFormat(); SourceDataLine line = AudioSystem.getSourceDataLine(format); line.open(format); line.start(); while (is.available() > 0) { int len = is.read(buffer); line.write(buffer, 0, len); } line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line line.close(); } catch (Exception e) { e.printStackTrace(); } }

这个我在本地播放没有问题,放到服务器上会报错:

java.io.IOException: mark/reset not supported	at java.util.zip.InflaterInputStream.reset(Unknown Source)	at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)	at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)	at com.yulong.mes.winapp.form.quality.ForBatchOperationForm$PlayAudioRunnable.run(ForBatchOperationForm.java:4317)	at java.lang.Thread.run(Unknown Source)

网上说要用BufferedInputStream封装一下。修改下代码确实如此:

List
files = new ArrayList
(); files.add("barcode_prefix.wav"); for (char letter : barcode.toCharArray()) { files.add(letter + ".wav"); } files.add("barcode_suffix.wav"); byte[] buffer = new byte[4096]; for (String file : files) { try { InputStream stream = this.getClass().getResourceAsStream(file); InputStream bufferedIn = new BufferedInputStream(stream); AudioInputStream is = AudioSystem.getAudioInputStream(bufferedIn); AudioFormat format = is.getFormat(); SourceDataLine line = AudioSystem.getSourceDataLine(format); line.open(format); line.start(); while (is.available() > 0) { int len = is.read(buffer); line.write(buffer, 0, len); } line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line line.close(); } catch (Exception e) { e.printStackTrace(); } }

  

转载地址:http://beigx.baihongyu.com/

你可能感兴趣的文章
解决eclipse之ADT与SDK版本不一致问题
查看>>
jQuery 属性操作
查看>>
小甜点,RecyclerView 之 ItemDecoration 讲解及高级特性实践
查看>>
387. 字符串中的第一个唯一字符
查看>>
(转)ORA-01245错误 (2013-04-13 18:37:01)
查看>>
shiro笔记-AuthenticatingRealm和AuthorizingRealm关系
查看>>
内联网
查看>>
从键盘上连续录入一批整数,比较并输出其中的最大值和最小值,当输入数字0时结束循环...
查看>>
mysql中触发器如何监听本身并且改变本身的字段?
查看>>
VBA 高级筛选
查看>>
设置应用图标badge(徽章)
查看>>
洛谷P4891 序列
查看>>
省选前做题记录
查看>>
批量替换行首
查看>>
jenkins对接gitlab和git
查看>>
MANIFEST.MF中的MF是什么意思
查看>>
归并排序与递归
查看>>
CVE-2018-0802漏洞利用
查看>>
根据业务压力测试
查看>>
点分治——树上路径统计
查看>>