- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JavaSound 体系结构
17.3 音频录制与播放--JavaSound
JavaSound 是一个小巧的低层API ,支持数字音频和MIDI 数据的记录/ 回放。在JDK 1.3.0
之前,JavaSound 是一个标准的Java 扩展API ,但从Java 2 的1.3.0版开始,JavaSound 就被
包含到JDK 之中。由于Java 有着跨平台(操作系统、硬件平台)的特点,基于JavaSound
的音频处 理程序(包括本文的程序)能够在任何实现了Java 1.3或更高版本的系统上运行,
无须加装任何支持软件。
接下来我们将首先讲解 JavaSound 的体系结构、音频输入/输出原理,然后讲解音频各种处
理的方法。
音频的数据格式。
音频的录制。
音频的播放。
音频的保存。
最后通过两个实例程序演练JavaSound 。
录音机程序。
MP3音乐播放器。
17.3.1 JavaSound 体系结构
使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、
音乐编辑等。JavaSound API 又以各种解码和合成器SPI (Service Provider Interface,服务提
供者接口)为基础,实现各种音乐格式的解码与转码。
它们之间的关系如图17-5所示。
图17-5 JavaSound 体系结构
SPI 的作用是以插件(Plug-In )的形式提供自定义的扩展模块,我们只要提供与SPI 兼容的
插件扩展模块,就可以在不改变API 的情况下扩展 音频处理程序的能力。例如,假设有一
个只能播放WAV 文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在
不改动播放程序的任何一行代码 的前提下,为这个播放程序添加播放MP3 的能力。在后文
的MP3音乐播放器程序中我们将演示该模块的安装与使用。
JavaSound API 包含在javax.sound.sampled 和javax.sound.midi 包中,分别用以处理数字音频
simpled-audio 和 MIDI 。SPI 包含在java.sound.sampled.spi 和javax.sound.midi.spi 包中,提
供了第三方的扩展接口。
17.3.2 音频输入/输出原理
17.3.2 音频输入/输出原理
音频的输入和输出需要分别使用类TargetDataLine 和SourceDataLine,分别代表了输入和输
出的设备,它们都实现了 Line 接口。Line 接口用来关闭/打开设备、注册事件监听器,以
及提供一些用来调整声音效果的对象,例如调整音量大小的对象。AudioSystem 在 JavaSound
体系中起着一个工厂(Factory )类的作用,提供了一系列的静态方法,我们通过这些静态
方法来获取JavaSound 系统默认配置 的资源。它们之间的关系如图17-6所示。
在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD 播放器、磁带播
放器等,可以在它们到达TargetDataLine 之前,利用混频器控制输入混频,最后在程序中通
过TargetDataLine 获得数字化的音频输入流。
类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine 的数据进行混频处理,
经处理后的信号可输出到各种输出端口,例如扬 声器、耳机等。SourceDataLine 是一个可
写入音频信号数字流的设备,例如,我们可以从一个 WAV 文件读取内容写入到
SourceDataLine,然后再通过扬声器输出。
其流程图如图17-7所示。
图17-6 类关系图
图17-7 音频输入输入流程图
输入到混频器的信号也可以来源于剪辑(Clip )。剪辑是一个包含一段完整音频数据流的设
备,或者说,剪辑就是一个缓存在内存中的完整音频数据流。在一些要求反复播放音乐片段
的场合,例如游戏的背景音乐,剪辑是很有用的。
17.3.3 音频的数据格式
音频数据--也就是从TargetDataLine 输入或从SourceDataLine 输出的数据,必须符合音频格
式的标准。音频数据的格式选项 由AudioFormat 类封装,主要选项包括:编码方式(可以
是PCM (Pulse
文档评论(0)