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

  1. List<String> files = new ArrayList<String>();
  2. files.add("barcode_prefix.wav");
  3. for (char letter : barcode.toCharArray())
  4. {
  5. files.add(letter + ".wav");
  6. }
  7. files.add("barcode_suffix.wav");
  8.  
  9. byte[] buffer = new byte[4096];
  10. for (String file : files)
  11. {
  12. try
  13. {
  14. AudioInputStream is = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(file));
  15. AudioFormat format = is.getFormat();
  16. SourceDataLine line = AudioSystem.getSourceDataLine(format);
  17. line.open(format);
  18. line.start();
  19. while (is.available() > 0)
  20. {
  21. int len = is.read(buffer);
  22. line.write(buffer, 0, len);
  23. }
  24. line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line
  25. line.close();
  26. }
  27. catch (Exception e)
  28. {
  29. e.printStackTrace();
  30. }
  31. }

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

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

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

  1. List<String> files = new ArrayList<String>();
  2. files.add("barcode_prefix.wav");
  3. for (char letter : barcode.toCharArray())
  4. {
  5. files.add(letter + ".wav");
  6. }
  7. files.add("barcode_suffix.wav");
  8.  
  9. byte[] buffer = new byte[4096];
  10. for (String file : files)
  11. {
  12. try
  13. {
  14. InputStream stream = this.getClass().getResourceAsStream(file);
  15. InputStream bufferedIn = new BufferedInputStream(stream);
  16.  
  17. AudioInputStream is = AudioSystem.getAudioInputStream(bufferedIn);
  18. AudioFormat format = is.getFormat();
  19. SourceDataLine line = AudioSystem.getSourceDataLine(format);
  20. line.open(format);
  21. line.start();
  22. while (is.available() > 0)
  23. {
  24. int len = is.read(buffer);
  25. line.write(buffer, 0, len);
  26. }
  27. line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line
  28. line.close();
  29. }
  30. catch (Exception e)
  31. {
  32. e.printStackTrace();
  33. }
  34. }

  

JAVA按顺序播放多个wav音频的更多相关文章

  1. WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)

    刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. D ...

  2. S3C2416裸机开发系列19_Fatfs播放录像wav音频文件

    S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩    1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...

  3. 用 Qt 的 QAudioOutput 类播放 WAV 音频文件

    用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...

  4. 使用WaveOut API播放WAV音频文件(解决卡顿)

    虽然waveout已经过时,但是其api简单,有些时候也还是需要用到. 其实还是自己上msdn查阅相应api最靠谱,waveout也有提供暂停.设置音量等接口的,这里给个链接,需要的可以自己查找: h ...

  5. java swing 音乐播放器-乐乐音乐

    乐乐音乐1.0(本地版) 乐乐音乐是基于musique 开源播放器开发的java swing音乐播放器,实现了mp3.flac.ape.wav等多种音频格式的播放和ksc歌词的解析.制作和显示. 完成 ...

  6. C语言解析WAV音频文件

    C语言解析WAV音频文件 代码地址: Github : https://github.com/CasterWx/c-wave-master 目录 前言 了解WAV音频文件 什么是二进制文件 WAV的二 ...

  7. HTML5 audio 如何实现播放多个MP3音频

    <audio>标签是HTML5中的新标签,定义声音用于嵌入音频内容,比如音乐或其他音频流.用的比较多音频格式是.mp3. <audio>标签常用属性如下表 属性 值 描述 au ...

  8. Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件

    原文 Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件 第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Win ...

  9. Windows Phone 8初学者开发—第20部分:录制Wav音频文件

    原文 Windows Phone 8初学者开发—第20部分:录制Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develop ...

随机推荐

  1. 配置ssh免密登录

    安装ssh sudo apt-get install ssh 产生密钥:ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa (rsa为ssh的加密方式 ...

  2. virtualbox 中centOS在不能ssh

    这个重要跟虚拟机的网络设置有关系.废话不多说. 针对一个网卡的形式.可以如下进行配置 1.网络-- 连接方式还选择“网络地址转换(NAT)” 其他不变,展开高级,设置端口转发  主机IP设为本机IP, ...

  3. Rail_UVa514_栈

    /* https://vjudge.net/problem/UVA-514 */ #include "pch.h" #include<iostream> #includ ...

  4. 本地仓库有jar包maven依然报错的原因

    本地Maven仓库有所需jar包依然报错,missing……………… 既然有这个jar包为什么还会报错呢? 找到本地仓库后发现里面有一个_remote.repositories文件 问题在_remot ...

  5. Mac重要目录

    App最喜欢的几个目录 Mac和Windows操作系统有一个很大的不同,大部分App是没有安装程序的,一般下载下来就是一个dmg文件,解开之后直接将App拖到应用程序目录下就可以了,所以给人感觉卸载也 ...

  6. [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆

    Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...

  7. ActiveMQ 中的链表

    ActiveMQ 中的消息在内存中时,以链表形式保存,以 PendingList 表示,每一个消息是 PendingNode. PendingList 主要有2种实现:OrderedPendingLi ...

  8. redis的文件事件

    redis的文件事件:即与io相关的事件. /* File event structure */ typedef struct aeFileEvent { int mask; /* one of AE ...

  9. Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  10. Qt画笔实现折线图

    参考:https://www.cnblogs.com/lsgxeva/p/7821550.html效果图: void BrokenLine::paintEvent(QPaintEvent *event ...