JAVA按顺序播放多个wav音频
用Java按顺序播放多个音频部件,不是同时播放。代码如下:
- List<String> files = new ArrayList<String>();
- 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<String> files = new ArrayList<String>();
- 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();
- }
- }
JAVA按顺序播放多个wav音频的更多相关文章
- WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)
刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. D ...
- S3C2416裸机开发系列19_Fatfs播放录像wav音频文件
S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩 1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...
- 用 Qt 的 QAudioOutput 类播放 WAV 音频文件
用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...
- 使用WaveOut API播放WAV音频文件(解决卡顿)
虽然waveout已经过时,但是其api简单,有些时候也还是需要用到. 其实还是自己上msdn查阅相应api最靠谱,waveout也有提供暂停.设置音量等接口的,这里给个链接,需要的可以自己查找: h ...
- java swing 音乐播放器-乐乐音乐
乐乐音乐1.0(本地版) 乐乐音乐是基于musique 开源播放器开发的java swing音乐播放器,实现了mp3.flac.ape.wav等多种音频格式的播放和ksc歌词的解析.制作和显示. 完成 ...
- C语言解析WAV音频文件
C语言解析WAV音频文件 代码地址: Github : https://github.com/CasterWx/c-wave-master 目录 前言 了解WAV音频文件 什么是二进制文件 WAV的二 ...
- HTML5 audio 如何实现播放多个MP3音频
<audio>标签是HTML5中的新标签,定义声音用于嵌入音频内容,比如音乐或其他音频流.用的比较多音频格式是.mp3. <audio>标签常用属性如下表 属性 值 描述 au ...
- Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件
原文 Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件 第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Win ...
- Windows Phone 8初学者开发—第20部分:录制Wav音频文件
原文 Windows Phone 8初学者开发—第20部分:录制Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develop ...
随机推荐
- 配置ssh免密登录
安装ssh sudo apt-get install ssh 产生密钥:ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa (rsa为ssh的加密方式 ...
- virtualbox 中centOS在不能ssh
这个重要跟虚拟机的网络设置有关系.废话不多说. 针对一个网卡的形式.可以如下进行配置 1.网络-- 连接方式还选择“网络地址转换(NAT)” 其他不变,展开高级,设置端口转发 主机IP设为本机IP, ...
- Rail_UVa514_栈
/* https://vjudge.net/problem/UVA-514 */ #include "pch.h" #include<iostream> #includ ...
- 本地仓库有jar包maven依然报错的原因
本地Maven仓库有所需jar包依然报错,missing……………… 既然有这个jar包为什么还会报错呢? 找到本地仓库后发现里面有一个_remote.repositories文件 问题在_remot ...
- Mac重要目录
App最喜欢的几个目录 Mac和Windows操作系统有一个很大的不同,大部分App是没有安装程序的,一般下载下来就是一个dmg文件,解开之后直接将App拖到应用程序目录下就可以了,所以给人感觉卸载也 ...
- [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆
Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...
- ActiveMQ 中的链表
ActiveMQ 中的消息在内存中时,以链表形式保存,以 PendingList 表示,每一个消息是 PendingNode. PendingList 主要有2种实现:OrderedPendingLi ...
- redis的文件事件
redis的文件事件:即与io相关的事件. /* File event structure */ typedef struct aeFileEvent { int mask; /* one of AE ...
- Python3组播通信编程实现教程(发送者+接收者)
一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...
- Qt画笔实现折线图
参考:https://www.cnblogs.com/lsgxeva/p/7821550.html效果图: void BrokenLine::paintEvent(QPaintEvent *event ...