从脚本之家上看到的一段音频播放代码

亲测将wav文件放到project文件下将9420.wav换成对用文件名即可播放

播放完毕后程序自动停止

 1 package someOrdinaryThoughts;
 2
 3 //public File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,那么结果是空抽象路径名。
 4 import java.io.File;
 5 //当发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作生成的异常的通用类。
 6 import java.io.IOException;
 7 //是在声音流中指定特定数据安排的类。通过检查以音频格式存储的信息,可以发现在二进制声音数据中解释位的方式。
 8 import javax.sound.sampled.AudioFormat;
 9 //音频输入流是具有指定音频格式和长度的输入流。长度用示例帧表示,不用字节表示。提供几种方法,用于从流读取一定数量的字节,或未指定数量的字节。音频输入流跟踪所读取的最后一个字节。可以跳过任意数量的字节以到达稍后的读取位置。音频输入流可支持标记。设置标记时,会记住当前位置,以便可以稍后返回到该位置。
10 import javax.sound.sampled.AudioInputStream;
11 //AudioSystem 类充当取样音频系统资源的入口点。此类允许查询和访问安装在系统上的混频器。
12 import javax.sound.sampled.AudioSystem;
13 //DataLine 将与介质相关的功能添加到其超接口 Line。此功能包括一些传输控制方法,这些方法可以启动、停止、消耗和刷新通过数据行传入的音频数据。
14 import javax.sound.sampled.DataLine;
15 //LineUnavailableException 是指示某一行因为不可用而无法打开的异常。此情况通常在请求的行已由另一个应用程序使用时发生
16 import javax.sound.sampled.LineUnavailableException;
17 //源数据行是可以写入数据的数据行。它充当其混频器的源。应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标(它可表示声卡上的音频输出设备)。
18 import javax.sound.sampled.SourceDataLine;
19 //UnsupportedAudioFileException 是指示因为文件没有包含可识别文件类型和格式的有效数据而致使操作失败的异常。
20 import javax.sound.sampled.UnsupportedAudioFileException;
21
22 public class MusicTest {
23     public static final String MUSIC_FILE = "9420.wav";//将文件的路径转化为字符串
24     //throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
25     public static void main(String[] args) throws LineUnavailableException,UnsupportedAudioFileException, IOException {
26
27         // 获取音频输入流,从提供的 File 获得音频输入流
28         AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(MUSIC_FILE));//这里新建了一个File类型的对象指向我们的文件
29         // 获取音频编码对象
30         AudioFormat audioFormat = audioInputStream.getFormat();//获得此音频输入流中声音数据的音频格式。
31
32         // 设置数据输入
33         DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,audioFormat, AudioSystem.NOT_SPECIFIED);// AudioSystem.NOT_SPECIFIED代表未知数字值的整数。
34         SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); //获得与指定 Line.Info 对象中的描述匹配的行。
35         sourceDataLine.open(audioFormat);//打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
36         sourceDataLine.start();//javax.sound.sampled.DataLine 继承的方法
37
38         /*
39          * 从输入流中读取数据发送到混音器
40          */
41         int count;
42         byte tempBuffer[] = new byte[1024];
43         //从音频输入流读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。利用while在输入结束前一直进行数据传入操作
44         while ((count = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) {
45             if (count > 0) {
46                 sourceDataLine.write(tempBuffer, 0, count);//通过此源数据行将音频数据写入混频器。
47             }
48         }
49
50         // 清空数据缓冲,并关闭输入
51         sourceDataLine.drain();//通过在清空数据行的内部缓冲区之前继续数据 I/O,排空数据行中的列队数据。
52         sourceDataLine.close();//关闭行,指示可以释放的该行使用的所有系统资源。如果此操作成功,则将行标记为 closed,并给行的侦听器指派一个 CLOSE 事件。
53     }
54 }

原文地址:https://www.cnblogs.com/peng-free/p/9017225.html

时间: 2024-10-07 05:28:48

从脚本之家上看到的一段音频播放代码的相关文章

脚本之家上UC×××手机客户端

UC×××手机客户端款功能非常全面的掌上购彩APP,给用户提供存取方便.彩种全面的手机×××.UC×××网手机版包括当前最热门的足球竞猜.篮球竞猜.北京单场.×××.重庆×××等等各种×××的玩法. UC×××手机客户端功能特色介绍: 更稳定:实力站点,致力于打造一个公平.诚信.共赢的娱乐平台 更便捷:7X24小时服务随时随地 轻松畅玩 更优秀:平台会员稳定增长,至今已拥有超过85万的会员,累计为用户兑换现金超680万元人民币 更安全:实力保障 让你安心游戏 UC×××手机客户端给我们更稳定.更

酷播云上传视频后如何获取播放代码

第1步:登录酷播云管理平台后,点击[视频列表],点选一个视频,右侧就会显示该视频的一些操作,如下图,依次分别为"设定视频参数区块"."设定播放参数区块"."视频代码区块". 第2步:找到右侧的"视频代码区块",复制代码后,就可以将该视频添加到您的网页中,或您网站后台中.详细操作可参考[用户调用视频代码]. 调用视频代码的提示说明: 第1种:多终端 (推荐使用,该代码可自动兼容微信.手机.PC.平板.智能电视终端) <sc

全球最新独角兽榜单出炉 中国公司33家上榜!

全球最新独角兽榜单出炉 中国公司33家上榜! 华股财经2016-09-09 13:39:24阅读(1893)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 全球最新独角兽榜单出炉,中国公司33家上榜!最产独角兽的领域竟是电商.软件服务--(附榜单) 转眼已近2016年最后一季,从去年下半年开始的全球资本寒冬仍在持续.受到英国脱欧.美国大选.中国经济增速下滑.美联储加息等一系列因素影响,全球投资机构普遍对市场持观望态度. Uber.滴

MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/BashShell?spm=5176.100239.blogcont5028.4.kFcLtR 还有关于fir指令的一

玩转html5(二)----用canvas结合脚本在画布上画简单的图(html5又一强大功能)

在html5中可以使用canvas标签在画布上画图,先直接上代码,这篇文章先简单介绍一下canvas的使用方法,简单画几个圆,矩形,三角形,写字. 在代码中均给出了注释,在这里特别强调的一点是:使用canvas画图时有时候必须beginPath和colsePath,但有时不需要,为了防止出现问题,可以在每次重新画一个图时重新开启路径,画完后关闭路径. 这些代码是在猎豹浏览器上实现的,有些浏览器可能不支持. <!DOCTYPE html> <meta charset="utf-8

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上

如果移动端访问不佳,可以访问我的个人博客 用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门 还有关于fir指令的一些介绍可以去这里查看,传送门 第一步安装fir-cil fir-cli 使用 Ruby 构建, 无需编译, 只要

脚本之家发现突然关闭

今天突然发现脚本之家网站被停掉了,我该笑呢还是哭呢! 脚本之家发现突然关闭

执行sh脚本文件下载Github上的代码(雷霄骅的ffmpeg示例代码)

   今天想重新学习下ffmpeg,于是又来到了雷晓骅的博客,先下载了他的所有代码,这里记录一下在Windows上使用sh脚本下载GitHub上代码的过程. CygWin(最后并没有用到)    可以在Windows系统上使用Unix终端的工具,在运行Windows的同时也可以使用vi,bash,tar等Unix下的工具. 使用CygWin执行sh脚本提示'\r'未找到的命令,因为在dos/window下按一次回车键实际上输入的是"回车(CR)"和"换行(LF)",