「java声音解析」java解析音频中的文字

博主:adminadmin 2022-11-30 21:49:06 70

本篇文章给大家谈谈java声音解析,以及java解析音频中的文字对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java如何播放声音

对声音媒体的直接支持可以说是Java的一大特色,尤其是在动画中配上声音效果,就可以使人在视觉上和听觉上均得到美的享受,那才叫过瘾。Java中播放声音文件与显示图像文件一样方便,同样只需要先将声音文件装载进来,然后播放就行了。

Java目前支持的声音文件只有一种格式,那就是SUN公司的AU格式(.AU文件),也称为u-law格式。由于AU格式的声音仅有8KHz的采样频率且不支持立体声效果,所以音质不算太好。唯一的好处就是AU声音文件的尺寸比其它格式小,有利于网上传输。一般,我们较熟悉的大都是WAV格式的声音文件,因此必须先将它们转换为AU格式(可以选用Goldwave软件来进行这种格式转换)。

声音文件准备好以后,就可以考虑将它装载进来并播放。在Applet类中提供的play( )方法可以将声音文件的装载与播放一并完成,其调用格式如下:

void play(URL url)

void play(URL url, String name)

可见,play( )方法的调用格式与getImage( )方法是完全一样的,也采用URL来定位声音文件。例如,某声音文件audio.au与applet文件存放在同一目录下,可以这样写:

play(getCodeBase( ),"audio.au");

一旦play( )方法装载了该声音文件,就立即播放。如果找不到指定URL下的声音文件,play( )方法不返回出错信息,只是听不到想听的声音而已。

由于play( )方法只能将声音播放一遍,若想循环播放某声音作为背景音乐,就需要用到功能更强大的AudioClip类,它能更有效地管理声音的播放操作。因为它被定义在java.applet程序包中,所以使用该类的话,不要忘了在程序头部加上:

import java.applet.AudioClip;

为了得到AudioClip对象,我们可以调用Applet类中的getAudioClip( )方法。它能装载指定URL的声音文件,并返回一个AudioClip对象,其调用格式如下:

AudioClip getAudioClip(URL url)

AudioClip getAudioClip(URL url, String name)

得到AudioClip对象以后,就可以调用AudioClip类中所提供的各种方法来操作其中的声音数据,这些方法如表4-4所示。

如果getAudioClip( )方法没有找到所指定的声音文件,就会返回null值。所以,在调用表4-4中所列的方法前,应该先检查一下得到的AudioClip对象不是null,因为在null对象上调用上述方法将导致出错。

如果需要的话,我们还可以在applet中同时装载几个声音文件来一起播放,到时候,这些声音将混合在一起,就象二重奏一样。另外还有一点要说明的是,如果我们使用AudioClip对象的loop( )方法来重复播放背景音乐时,千万不要忘记在适当的时候调用AudioClip对象的stop( )方法来结束放音,否则的话,即使用户离开这一Web页面,该声音也不会停止,这无疑将会惹恼用户。因此,一般我们都在applet的stop( )方法中添上停止播放的代码。

例如,下面这段程序将播放两段声音,一段是连续播放的背景音乐,另一段是讲话录音。

import java.applet.AudioClip;

public class Audios extends java.applet.Applet{

AudioClip bgmusic,speak;

public void init(){

bgmusic=getAudioClip(getDocumentBase(),"space.au");

speak=getAudioClip(getDocumentBase(),"intro.au");

}

public void start(){

if(bgmusic!=null)

bgmusic.loop();

if(speak!=null)

speak.play();

}

public void stop(){

if(bgmusic!=null)

bgmusic.stop(); //关闭背景音乐,切记。

}

}

package com.hongyuan.test;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;

import

javax.sound.sampled.AudioInputStream;

import

javax.sound.sampled.AudioSystem;

import

javax.sound.sampled.DataLine;

import

javax.sound.sampled.LineUnavailableException;

import

javax.sound.sampled.SourceDataLine;

import

javax.sound.sampled.UnsupportedAudioFileException;

public class MusicTest {

public static final String MUSIC_FILE = "相逢一笑.wav";

public static void main(String[] args) throws

LineUnavailableException,

UnsupportedAudioFileException, IOException {

// 获取音频输入流

AudioInputStream audioInputStream =

AudioSystem

.getAudioInputStream(new File(MUSIC_FILE));

//

获取音频编码对象

AudioFormat audioFormat = audioInputStream.getFormat();

// 设置数据输入

DataLine.Info dataLineInfo = new

DataLine.Info(SourceDataLine.class,

audioFormat,

AudioSystem.NOT_SPECIFIED);

SourceDataLine sourceDataLine =

(SourceDataLine)

AudioSystem

.getLine(dataLineInfo);

sourceDataLine.open(audioFormat);

sourceDataLine.start();

/*

* 从输入流中读取数据发送到混音器

*/

int count;

byte tempBuffer[]

= new byte[1024];

while ((count = audioInputStream.read(tempBuffer, 0,

tempBuffer.length)) != -1) {

if (count 0)

{

sourceDataLine.write(tempBuffer, 0, count);

}

}

//

清空数据缓冲,并关闭输入

sourceDataLine.drain();

sourceDataLine.close();

}

}

java关于播放声音的代码的解释

playCycle(String s)这个是单曲重复播放;play(String s)这个是单曲播放。

/******* part one start *******/

//获取媒体文件流

AudioInputStream ais = AudioSystem.getAudioInputStream(new File(fileurl));

//获取文件格式

AudioFormat aif = ais.getFormat();

//这个类不知道是什么,没用过,在这里应该是对媒体流处理的一个类

SourceDataLine sdl = null;

//这个貌似通过媒体格式,获取媒体文件的信息

DataLine.Info info = new DataLine.Info(SourceDataLine.class,aif);

//通过媒体文件的信息初始化处理媒体文件的类

sdl = (SourceDataLine)AudioSystem.getLine(info);

//媒体工具类 打开媒体流

sdl.open(aif);

//媒体工具(播放器)开启

sdl.start();

/******* part one end *******/

/******* part two start ********/

int nByte = 0;

byte[] buffer = new byte[128];

//媒体工具类(播放器类)对媒体流进行写入处理,此时应该会有音乐响起吧

while(nByte != -1){

nByte = ais.read(buffer,0,128);

if(nByte = 0){

int oByte = sdl.write(buffer, 0, nByte);

//System.out.println(oByte);

}

}

//媒体流结束,并关闭这个媒体工具类

sdl.stop();

/******* part two end********/

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

您好,1 双方之间的网络连接

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如何实现从视频中提取音频??????

1.你可以播放视频,然后java软件录制。

2.研究视频的编码格式,提取视频中包含的声音信息。java编码提取。没中视频格式都要具体分析。

3.有视频处理软件,直接提取。

java 声音处理

用SUN官方的JMF可以做到,官方也有例子 你直接去下载看DEMO即可

JMF 提供的模型可大致分为七类

* 数据源(Data source)

* 截取设备(Capture Device,包括视频和音频截取设备)

* 播放器(Player)

* 处理器(Processor)

* 数据池(DataSink)

* 数据格式(Format)

* 管理器(Manager)

代码不贴了,百度一下

关于java声音解析和java解析音频中的文字的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。