声音变量的java代码,java 声音
如何用java编程,实现声音特征的提取?
您好,1 双方之间的网络连接
成都创新互联长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为和龙企业提供专业的网站建设、网站设计,和龙网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
Java在这方面有其独特的优势,Java提供了丰富的网络类库的支持,可以轻松编写多种类型的网络通信程序。在我下面的例子中我就使用了TCP/IP协议,通过Java的Socket类进行编程。
2 音频信号的采集和回放以及音频数字信号的编码与解码
在解决这两个问题的时候,在网上很幸运地通过一些文章的介绍,找到了Answer Machine 演示程序的源代码(由of jsresources.org的Florian Bomers 和Matthias Pfisterer编写,网址)。在这个程序代码中,有几个解决我们问题所需要的类,而且作者将这些类封装的很好,我们基本不需要做什么改动,只需要屏蔽其中的调试信息的输出就行了,更可贵的是它还封装了几种常见的音频格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我们下面例子中采用的压缩格式,GSM格式可以将128kbps 的音频数据流 (16bit通过8k Hz的音频采样) 压缩为13kbps 的音频数据流,非常适合语音信号的传送,所以可谓是一石二鸟。
我分析过这几个类的源代码,不得不佩服它的作者,每个类的源代码都很精炼,大家可以自己分析一下。好了下面就给大家讲讲这几个类,并且将它们用到的Java Sound API中的类和函数等一并做个简单介绍,让大家对Java Sound API中常用的类也有个大致的了解。由于Java Sound API中的类比较多。限于篇幅无法对所有用到的类做详尽的解释,以下内容只是简单提及了各个类的用途和使用规范,有关Java Sound API中类的具体介绍请大家访问这里, 查找javax.sound.sampled的相关内容。
以下的提到几个文件是从Answer Machine 演示程序的源代码中提取出来的,由于是开放源代码的程序,大家在使用的时候请注意相关的公共协议。
① AMAudioFormat类(封装在AMAudioFormat.java文件中)
AMAudioFormat类封装了CD、FM、TELEPHONE、GSM这四种质量的音频格式的参数,使用起来也非常简单,这样我们在使用Java Sound API时就不用自己去写那些复杂的代码了,但为了明白Java Sound API的原理,我们需要对它的代码做一下分析。它使用了Java Sound API中的AudioFormat这个类,这个类非常重要,在Java中对任何音频数据的使用都要实现通过它指定所需要使用的音频格式,AudioFormat类有一个嵌套的类AudioFormat.Encoding,实际上大部分对AudioFormat类的使用都是使用的这个嵌套的类。
AMAudioFormat类的重要方法:
名称:getLineAudioFormat
调用格式:getLineAudioFormat(整型音频格式代号)
返回值: 根据传递音频格式代号生成的AudioFormat对象。
说道这里大家可能要问了,那么通过Java Sound API可以直接使用GSM格式吗?答案是比较复杂,但同样有解决的办法,作者在这里使用了另外的开源程序的类库-tritonus的GSM编码解码库。大家需要在这里下载tritonous_share.jar和tritonus_gsm.jar两个文件,并在AMAudioFormat类中引用,这样就完成了GSM格式的设置。需要告诉大家的是在对AMAudioFormat.java这个类进行编译后,我们的程序运行的时候就可以不需要tritonous_share.jar和tritonus_gsm.jar这两个文件的支持了。
② AudioCapture类(封装在AudioCapture.java文件中)
AudioCapture类封装了从音频硬件捕获音频数据并自动编码为GSM音频压缩数据的过程,并且通过它的getAudioInputStream()方法提供给我们一个音频数据输入流,我们就可以直接将这个流发送到网络中。
AudioCapture 类的重要方法:
名称:getAudioInputStream
调用格式:getAudioInputStream()
返回值:AudioInputStream对象
AudioCapture 类使用了Java Sound API中的AudioInputStream、AudioFormat、AudioSystem这几个类和TargetDataLine、LineListener接口。除了AudioFormat类我再简单介绍一下其他的类:
AudioInputStream 类是带有特殊音频格式和长度的InputStream类,它有两个构造方法,分别是AudioInputStream(InputStream stream, AudioFormat format,long length)和AudioInputStream(TargetData -Line line)。
TargetDataLine 接口是DataLine接口的一种,通过它就可以直接从音频硬件获取数据了,它有几个常用的方法,分别是:open(AudioFormat format)、void open(AudioFormat format, int bufferSize)、int read(byte[] b, int off, int len)。
AudioSystem 类是Java标准音频系统的入口点,在AudioSystem 类中使用他的getLine() 方法创建TargetDataLine对象。
LineListener接口用来对线路状态改变的时间进行监听,他的重要的方法是update(LineEvent event)方法。
③ AudioPlayStream类(封装在AudioPlayStream.java文件中)
AudioPlayStream类与AudioCapture类刚好相反,它封装了GSM压缩音频数据的解码和音频信号的回放过程,提供给我们一个音频信号输出流。AudioCapture类用到的Java Sound API中的类它也基本都用到了,只是它使用了SourceDataLine接口而不是TargetDataLine接口
④ Debug类(封装在Debug.java文件中)
Debug类主要用来在调试时输出讯息,代码很少,后来我把其中输出信息的语句都屏蔽了,对程序运行没有影响。
为了方便使用以上的几个类,我们需要对它们进行编译和打包,编译时需要设置相关的编译环境,以下是我们需要用到的命令行
set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar
javac am*.java amaudio*.java
jar cmf packagingmanifest.mf am.jar am*.class
amaudio*.class
说明一下,我将以上提到的Java源码文件放在了am目录下,编译之后可以得到一个8k的am.jar文件,我们下一步所需要做的就是在我们的程序中引用这个包。
怎样将java程序变成可以再电脑上直接运行的程序,java项目里面包含有声音文件,压缩的时候出错
应该是在DOS下运行不是DOC吧
配置JDK环境变量的问题:
首先像安装其他软件一样安装jdk,如安装目录为 D:\Program Files\Java\jdk1.6.0,下面依据这个目录进行环境配置:
1、右击“我的电脑”的“属性”,弹出对话框,点击“环境变量”,弹出对话框,在系统变量中,我们进行配置
2、配置系统变量:
(1)点击“新建”按扭,配置JAVA_HOME系统变量,如下:
变量值需要根据自己的jdk的安装路径而定,因为我的jdk安装在 D:\Program Files\Java\jdk1.6.0下,所以,此处变量名为JAVA_HOME,变量值为: D:\Program Files\Java\jdk1.6.0,完了后,“确定”。
(2)配置classpath变量,点击“新建”按扭,配置classpath系统变量,如下:
classpath=,;%JAVA_HOME%\dt.jar; %JAVA_HOME%\lib\tools.jar;
要注意的是这里classpath的值中前面有英文输入法下的,;(逗号和分号),结尾还有;(分号)
配置path变量,一般的下面都已经存在path变量,直接在里面添加就可以了。
(3)找到path变量,点击“编辑”,在变量值的最后面添加下面的值:
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
到这里,环境变量配置成功。
验证配置成功否,直接在cmd下输入java或javac,有许多行文字弹出就是配置成功了!
如文件保存在D:\hello.java (注意不要隐藏文件后缀名)
打开命令提示符窗口,键入下面的命令
d: 回车
javac hello.java 回车
java hello 回车
java中声名变量与常量的问题?
static 声明为静态。声明为静态的变量被所有此类的对象共用,意思就是当对象A对age做了修改,那么对象B的age的值也是A所修改后的值。
声明常量就要加final,final修饰的变量不能被修改。final指的是‘最终的’意思的。
因为你在下面对age=22;重新斌了值。age是静态变量。为通用的变量。
java中的调用系统声音的函数是什么
java中的调用系统声音的函数是Toolkit.getDefaultToolkit().beep();
try {
FileInputStream fileau = new FileInputStream("sound.wav");
AudioStream as = new AudioStream(fileau);
AudioPlayer.player.start(as);
}
catch (IOException ie) { }
基本类库的播放器 支持的格式不多 有wav,midi等等
不支持mp3和wma
新闻名称:声音变量的java代码,java 声音
标题URL:http://hbruida.cn/article/hccihi.html