「java实现混响」java加音效
今天给各位分享java实现混响的知识,其中也会对java加音效进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
如何实现java中的声音添加,播放等操作。
可以使用Applet组件,主要的代码如下(缺点是能播放WAv格式的,还有其它格式,不过mp3不行,):
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.io.File;
import java.net.MalformedURLException;
//播放音乐按钮
private JButton getPlayButton(){
if(playButton==null){
playButton=new JButton("播放");
playButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(filePath.getText()!=null){
try{
if(audioClip!=null){
audioClip.stop();
}
audioClip=Applet.newAudioClip(new File(filePath.getText()).toURI().toURL());
audioClip.play();//播放
}//只需要添加一个File对象传入文件路径
catch(MalformedURLException ee){ee.printStackTrace();}
}
}
});
}
return playButton;
}
Java中实现播放声音
java不支持播放mp3格式的声间文件,你把它转成au格式的就能播放了
可以看看下面:
Java对多媒体的支持
4.2 图像与声音
其它语言相比较,如果说Java对图形和文本媒体的支持并不占明显优势的话,那么Java对图像与声音媒体的支持真可谓是技高一筹,显示图像与播放声音就如同显示一行文本一样方便。同时,正由于在Java动画中灵活的运用图像和声音媒体,才使得Web页面更具魅力。
4.2.1 图像文件的显示
正如上一节所介绍的,Graphics类中确实提供了不少绘制图形的方法,但如果用它们在applet运行过程中实时地绘制一幅较复杂的图形(例如一条活泼可爱的小狗),就好比是在用斧头和木块去制造航天飞机。因此,对于复杂图形,大部分都事先用专用的绘图软件绘制好,或者是用其它截取图像的工具(如扫描仪、视效卡等)获取图像的数据信息,再将它们按一定的格式存入图像文件。applet运行时,只要找到图像文件存贮的位置,将它装载到内存里,然后在适当的时机将它显示在屏幕上就可以了。
1.图像文件的装载
Java目前所支持的图像文件格式只有两种,它们分别是GIF和JPEG格式(带有.GIF、.JPG、.JPEG后缀名的文件)。因此若是其它格式的图像文件,就先要将它们转换为这两种格式。能转换图像格式的软件有很多,如PhotoStyler等。
Applet类中提供了getImage( )方法用来将准备好的图像文件装载到applet中,但我们必须首先指明图像文件所存贮的位置。由于Java语言是面向网络应用的,因此文件的存贮位置并不局限于本地机器的磁盘目录,而大部分情况是直接存取网络中Web服务器上的图像文件,因而,Java采用URL(Universal Resource Location,统一资源定位器)来定位图像文件的网络位置。因此,Java专门提供了URL类来管理URL信息(关于该类的详细介绍见下一章)。
表示一个URL信息可分为两种形式:
一种称为绝对URL形式,它指明了网络资源的全路径名。如:
绝对URL:“”
另一种称为相对URL形式,分别由基准URL(即base URL)再加上相对于基准URL下的相对URL这两部分组成,例如上面的例子可表示为:
基准URL:“”
相对URL:“images/m1.gif”
现在,我们可以来看一下getImage( )方法的调用格式了:
Image getImage(URL url)
Image getImage(URL url, String name)
我们可以发现,这两种调用格式的返回值都是Image对象。确实,Java特别提供了java.awt.Image类来管理与图像文件有关的信息,因此执行与图像文件有关的操作时不要忘了import这个类。getImage( )方法的第一种调用格式只需一个URL对象作为参数,这便是绝对URL。而后一种格式则带有两个参数,第一个参数给出的URL对象是基准URL,第二个参数是字符串类型,它描述了相对于基准URL下的路径和文件名信息,因此这两个参数的内容综合在一起就构成了一个绝对URL。例如,下面两种写法所返回的结果是一样的:
Image img=getImage(new URL("");
Image img=getImage(new URL(""),"images/m1.gif");
表面看来,好象第一种调用格式较方便一些,但实际上第二种调用格式用得更普遍,因为这种格式更具灵活性。原来,Applet类中提供了两个方法来帮助我们方便地获取基准URL对象,它们的调用格式如下:
URL getDocumentBase( )
URL getCodeBase( )
其中getDocumentBase( )方法返回的基准URL对象代表了包含该applet的HTML文件所处的目录,例如该文件贮存在“”中,则该方法就返回“”路径。而getCodeBase( )方法返回的基准URL对象代表了该applet文件(.class文件)所处的目录。它是根据HTML文件的"APPLET"标记中的CODEBASE属性值计算出来的,若该属性没有设置,则同样返回该HTML文件所处的目录。
好了,现在我们应该可以感受到基准URL的灵活性了吧。只要我们写下语句:
Image img = getImage(getDocumentBase( ),"images/m1.gif");
那么即使整个imgsample目录移到别处任何地方,也可以正确装载图像文件,而采用对于绝对URL形式则需要重新修改applet代码并重新编译。
2. 图像文件的显示
getImage( )方法仅仅是将图像文件从网络上装载进来,交由Image对象管理。那我们样把得到的Image对象中的图像显示在屏幕上呢?这又要回到我们的老朋友Graphics类来了,因为Graphics类提供了一个drawImage( )方法,它能完成将Image对象中的图像示在屏幕的特定位置上,就象显示文本一样方便。drawImage( )方法的调用格式如下:
boolean drawImage(Image img, int x, int y, ImageObserver observer)
其中img参数就是要显示的Image对象。x和y参数是该图像左上角的坐标值。observer参数则是一个ImageObserver接口(interface),它用来跟踪图像文件装载是否已经完成的情况,通常我们都将该参数置为this,即传递本对象的引用去实现这个接口。
除了将图像文件照原样输出以外,drawImage( )方法的另外一种调用格式还能指定图像显示的区域大小:
boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
这种格式比第一种格式多了两个参数width和height,即表示图像显示的宽度和高度。若实际图像的宽度和高度与这两个参数值不一样时,Java系统会自动将它进行缩放,以适合我们所定的矩形区域。
有时,我们为了不使图像因缩放而变形失真,可以将原图的宽和高均按相同的比例进行缩小或放大。那么怎样知道原图的大小呢?只需调用Image类中的两个方法就可以分别得到原图的宽度和高度。它们的调用格式如下:
int getWidth(ImageObserver observer)
int getHeight(ImageObserver observer)
同drawImage( )方法一样,我们通常用this作为observer的参数值。
下面的程序段给出了一个显示图像文件的例子,其显示结果如图4-14所示。
import java.awt.Graphics;
import java.awt.Image;
public class Images extends java.applet.Applet{
Image img;
public void init(){
img=getImage(getCodeBase(),"man.gif");
}
public void paint(Graphics g){
int w=img.getWidth(this);
int h=img.getHeight(this);
g.drawImage(img,20,10,this); //原图
g.drawImage(img,200,10,w/2,h/2,this); //缩小一半
g.drawImage(img,20,200,w*2,h/3,this); //宽扁图
g.drawImage(img,350,10,w/2,h*2,this); //瘦高图
}
}
图4-14 显示图像文件
4.2.2 声音文件的播放
对声音媒体的直接支持可以说是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(); //关闭背景音乐,切记。
}
}
JAVA 实现音频播放
这个程序只要写对了音乐文件的URL地址,例如:new URL("file:/C:/tmp/1/Windows Ding.wav");
就可以播放音乐,除了可以播放.wav格式的音乐,还可以播放.au格式的音乐。
另外,如果你不希望音乐循环播放,你可以去掉audio1.loop();这一语句。
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFrame;
public class D extends JFrame{
D(){
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
URL codebase=null;
try {
codebase = new URL("file:/C:/tmp/1/Windows Ding.wav");
} catch (MalformedURLException e) {
e.printStackTrace();
}
AudioClip audio1=Applet.newAudioClip(codebase);
audio1.loop();
}
public static void main(String[] args) {
new D();
}
}
javacv怎么调用音频录制
Adobe Audition3.0(简称AA),先下载伴奏,打开AA,,点文件,新建,确定。点视图,选多轨,在第一音轨点右键插入音频,找到你的伴奏插入,点第二音轨的R键开启录音状态,点左下的红色圆圈录制就行了,录制完成后双击音轨2的波形,进入编辑视图,这里可以进行人声效果的处理,可以到百度搜索一下相关教程,很多的,如降噪、混响、均衡等都在这里处理,处理完成后返回多轨视图,听一下,如果声音大小与伴奏不协调可以在编辑视图的效果》压限》标准化进程里调节音量。都做好后在多轨视图里点右键混缩到文件里的第一项,就把伴奏和人声混合起来了,点文件》另存,保存成WAV或MP3随便,完成了。
如何用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实现混响和java加音效的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。