问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用java编程,实现声音特征的提取?

发布网友 发布时间:2022-04-26 00:03

我来回答

1个回答

热心网友 时间:2023-10-20 08:22

您好,1 双方之间的网络连接
  Java在这方面有其独特的优势,Java提供了丰富的网络类库的支持,可以轻松编写多种类型的网络通信程序。在我下面的例子中我就使用了TCP/IP协议,通过Java的Socket类进行编程。
  2 音频信号的采集和回放以及音频数字信号的编码与解码
  在解决这两个问题的时候,在网上很幸运地通过一些文章的介绍,找到了Answer Machine 演示程序的源代码(由of jsresources.org的Florian Bomers 和Matthias Pfisterer编写,网址http://www.jsresources.org/apps/am.html)。在这个程序代码中,有几个解决我们问题所需要的类,而且作者将这些类封装的很好,我们基本不需要做什么改动,只需要屏蔽其中的调试信息的输出就行了,更可贵的是它还封装了几种常见的音频格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我们下面例子中采用的压缩格式,GSM格式可以将128kbps 的音频数据流 (16bit通过8k Hz的音频采样) 压缩为13kbps 的音频数据流,非常适合语音信号的传送,所以可谓是一石二鸟。
  我分析过这几个类的源代码,不得不佩服它的作者,每个类的源代码都很精炼,大家可以自己分析一下。好了下面就给大家讲讲这几个类,并且将它们用到的Java Sound API中的类和函数等一并做个简单介绍,让大家对Java Sound API中常用的类也有个大致的了解。由于Java Sound API中的类比较多。限于篇幅无法对所有用到的类做详尽的解释,以下内容只是简单提及了各个类的用途和使用规范,有关Java Sound API中类的具体介绍请大家访问这里http://java.sun.com/j2se/1.4.2/docs/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编码解码库。大家需要在这里www.tritonus.org/plugins.html下载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文件,我们下一步所需要做的就是在我们的程序中引用这个包。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 如何用java编程,实现声音特征的提取? java如何实现从视频中提取音频??? java如何实现从视频中提取音频??? 求解,JAVA语言多人语音聊天怎么解决混音问 java关于处理音频文件的问题! java实现 mp3格式转换wav java关于处理音频文件的问题 用Java录音,该怎么处理 java 声音处理 被别人绑定后会被封吗? 过期一年的奶粉能喝吗 袋装的牛奶粉,已经到保质期了,还能喝吗? 过期一个月的奶粉,还能食用么 没有开封的奶粉过期两年多还能喝吗 奶粉过期了大人还能喝吗? 实习生变成正式员工? 如何界定实习生与正式职工 实习生与正式员工有何差别! 实习生有机会成为正式员工吗? 实习员工和正式员工是否承担相同处罚 使用Java语言能编写音频和视频解码器吗?如果能需要哪些知识?列举一下。谢谢 使用Java语言能编写音频和视频解码器吗?如果能需要哪些知识?列举一下。谢谢 java中如何对arm音频文件进行FFT转换? java中如何对arm音频文件进行FFT转换? java音频文件的读写 java音频文件的读写 java处理声音文件过大怎么办 java处理声音文件过大怎么办 JAVA程序中如何插入音频文件? JAVA程序中如何插入音频文件? 海鲜菇汤怎么做好吃 用JAVA怎样捕获音频输出数据 用JAVA怎样捕获音频输出数据 海鲜菇汤的做法大全 海鲜菇虾汤的做法大全 形容孤单寂寞的诗 冬瓜海鲜菇汤的做法 形容一个人孤单寂寞的诗词 海鲜菇怎么打汤 形容一个人孤寂的诗句