欢迎来到天天文库
浏览记录
ID:37861291
大小:987.16 KB
页数:36页
时间:2019-06-01
《java视频音频的处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JavaSound体系结构17.3音频录制与播放--JavaSoundJavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java1.3或更高版本的系统上运行,无须加装任何支持软件。接下来我们将首先讲解JavaSound的体系结构、音频输入/输出原
2、理,然后讲解音频各种处理的方法。音频的数据格式。音频的录制。音频的播放。音频的保存。最后通过两个实例程序演练JavaSound。录音机程序。MP3音乐播放器。17.3.1JavaSound体系结构使用JavaSoundAPI,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、音乐编辑等。JavaSoundAPI又以各种解码和合成器SPI(ServiceProviderInterface,服务提供者接口)为基础,实现各种音乐格式的解码与转码。它们之间的关系如图17-5所示。图17-5JavaSound体系结构SPI的作用是以插件(P
3、lug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。例如,假设有一个只能播放WAV文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放MP3的能力。在后文的MP3音乐播放器程序中我们将演示该模块的安装与使用。JavaSoundAPI包含在javax.sound.sampled和javax.sound.midi包中,分别用以处理数字音频simpled-audio和MIDI。SPI包含在jav
4、a.sound.sampled.spi和javax.sound.midi.spi包中,提供了第三方的扩展接口。17.3.2音频输入/输出原理17.3.2音频输入/输出原理音频的输入和输出需要分别使用类TargetDataLine和SourceDataLine,分别代表了输入和输出的设备,它们都实现了Line接口。Line接口用来关闭/打开设备、注册事件监听器,以及提供一些用来调整声音效果的对象,例如调整音量大小的对象。AudioSystem在JavaSound体系中起着一个工厂(Factory)类的作用,提供了一系列的静态方法,我们通过这些静
5、态方法来获取JavaSound系统默认配置的资源。它们之间的关系如图17-6所示。在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个WA
6、V文件读取内容写入到SourceDataLine,然后再通过扬声器输出。其流程图如图17-7所示。图17-6类关系图图17-7音频输入输入流程图输入到混频器的信号也可以来源于剪辑(Clip)。剪辑是一个包含一段完整音频数据流的设备,或者说,剪辑就是一个缓存在内存中的完整音频数据流。在一些要求反复播放音乐片段的场合,例如游戏的背景音乐,剪辑是很有用的。17.3.3音频的数据格式音频数据--也就是从TargetDataLine输入或从SourceDataLine输出的数据,必须符合音频格式的标准。音频数据的格式选项由AudioFormat类封装,
7、主要选项包括:编码方式(可以是PCM(PulseCodeModulation,脉冲编码调制)、MP3等)、通道数量、取样率、帧速率等。根据不同的参数,AudioFormat提供了3个构造函数publicAudioFormat(AudioFormat.Encodingencoding,floatsampleRate,intsampleSizeInBits,intchannels,intframeSize,floatframeRate,booleanbigEndian);publicAudioFormat(AudioFormat.Encoding
8、encoding,floatsampleRate,intsampleSizeInBits,intchannels,intframeSize,floatframeRa
此文档下载收益归作者所有