📄 java声音技术.htm
字号:
<P align=left>对MIDI的支持 </FONT></P>
<UL>
<LI><FONT face=宋体 size=3>
<P align=left>MIDI消息-交换消息(打开音符,关闭音符,诸如此类)
</FONT></P>
<LI><FONT face=宋体 size=3>
<P align=left>合成-从MIDI数据装入乐器并产生声音。 </FONT></P>
<LI><FONT face=宋体 size=3>
<P align=left>序列化-装入一个MIDI序列,开始和停止播放,以及调整节奏。
</FONT></P></LI></UL><FONT face=宋体 size=3>
<P align=left>工具 </FONT></P>
<UL>
<LI><FONT face=宋体 size=3>
<P align=left>件输入输出-读写通用音频文件例如WAV,AIFF及MIDI
</FONT></P>
<LI><FONT face=宋体 size=3>
<P
align=left>置-查询系统来获得组件和设备的信息;安装或取消编码、文件分析器和设备等。
</FONT></P></LI></UL><FONT face=宋体 size=3>
<DIV align=left>
<P><B><FONT color=#666699>数字化音频</FONT></B></P>
<P>通道<BR><BR>Kara Kytle, JAVA声音
API主管工程师和系统设计师说:"Channel是音频管道中的基本功能部件"。实现Channel界面的类代表着该"管道"的一个元素,例如硬件设备,一个声音合成器,或者是一个单音频流。<BR><BR>InputChannel和
OutputChannel继承了Channel,分别用于读入被捕获的数据和为播放写数据。子界面Clip支持对预装入的音频数据循环播放和重新定位。Device表示任何用于捕获、播放或混和音频的硬件或软件设备。<BR><BR>该界面的层次结构如下图所示。参考包javax.media.sound.sampled。</P>
<P align=center></P>
<P align=left>当一个Channel打开时,它为自己保留了系统资源
,并且当它结束时,这些资源被释放给其他的应用程序和对象使用。用isOpen()方法可以查询Channel是打开还是关闭的。数据的处理通常由子界面方法比如read()方法来启动,这部分在InputChannel界面说明描述
(请看JAVA声音
API的说明书)。<BR><BR>处理方法使Channel处于负责输入或输出音频数据的状态。用isActive方法可以识别Channel是否处于这种状态。通过调用pause()方法可以使通道处于暂停状态,此状态可以通过isPaused()方法判别。当通道被暂停时,有三种选择:保留数据(缺省),用flush()方法丢弃内部缓冲器中的数据,或用drain()方法使内部缓存中的数据被立即处理。<BR><BR>对象事先可以注册,这样每当通道状态改变时它都可以收到通告信息。该注册对象必须实现Channel.Listener界面,该界面仅包含一个方法update()。当Channel打开、结束、启动、及停止时,该方法都将被调用。当Channel开始或停止活动以及开始或停止捕获数据时,会产生start或stop事件。</P>
<P><B><FONT
color=#666699>输入通道</FONT></B><BR><BR>InputChannel是被捕获的音频数据的源头。该界面提供了方法,可从
InputChannel缓冲器读取被捕获的数据,并判断当前可读的数据量。如果应用程序试图读过多的数据,该读方法阻塞,直到所需读取数据达到为止。
</P>
<P><FONT
color=#666699><B>输出通道</B></FONT><BR><BR>OutputChannel接收用于播放的音频数据。这接口提供方法,将要播放的数据写入OutputChannel的缓冲区,并能判断该通道不间断可接收的数据量。如果应用程序试图写过量的数据,该读方法阻塞,直到有足够数据为止。
</P>
<P><B><FONT
color=#666699>剪贴</FONT></B><BR><BR>Clip接口表示一个特殊的通道,它可以在播放之前先装入音频数据。由于数据是预装入的,而不是流入的,所以clip可以支持持续查询、循环播放、以及重新定位播放。
</P>
<P><B><FONT
color=#666699>设备</FONT></B><BR><BR>Device界面为表示音频设备的类提供方法。音频设备可以是共享的也可是独占的系统资源,它可以是基于硬件的,也可基于软件的,还可是同时基于两者的。它能被重复地打开和关闭,它能时常说明它的内在特性及支持的音频格式。同时,它也提供信息对象来描述设备。<BR><BR>JAVA声音
API进一步描述三种设备子界面:<BR><BR><B>InputDevice</B><BR>InputDevice界面提供一个方法getInputChannel来获得一个InputChannel对象,从中捕获可读的音频数据。<BR><BR><B>OutputDevice</B><BR>OutputDevice界面提供一个方法getOutputChannel来获得一个OutputChannel对象,音频数据可以写入该输出通道,并予播放。<BR><BR><B>Mixer</B><BR>Mixer支持多个InputChannel和/或Clip。
另外,它提供了查询方法,从中可得到它所支持的通道数量,它也提供了支持同步暂停和唤醒多个通道播放的方法。</P>
<P><B><FONT
color=#666699>控件</FONT></B><BR><BR>通道和音频端口
(比如扬声器和麦克风)一般能支持一组控件比如增益和定位。通过将它的类作为参数传给getControl()方法,JAVA声音
API的通道对象和端口对象可以获得一个特别的控件。</P>
<P>编码器<BR>Codecs可以对音频数据编码和解码,允许在不同格式和编码之间转换。JAVA声音
API通过AudioSystem类中的方法为这些转换提供了高级接口。如果给了一个特殊的音频流,应用程序会查询音频系统来找到相应的转换,从而得到指定格式的音频流。</P>
<P><B>文件和流</B><BR><BR>音频流是与音频数据格式和数据长度相关的输入流,文件流是与文件类型和数据长度相关的输入流。JAVA声音
API在AudioSystem类中为音频文件和音频流之间的转换提供了接口。</P>
<P><B><FONT
color=#666699>查询和访问安装组件</FONT></B><BR><BR>AudioSystem类充当到采样音频系统资源入口的角色。该类允许程序员查询和访问输入设备、输出设备以及安装好的混音设备。另外,AudioSystem包含许多在不同音频数据格式间转换的方法。它也提供一些方法,使得在不需要对设备直接操作的情况下,直接获得输入通道或输出通道。</P>
<P><B><FONT
color=#666699>系统配置-服务提供者界面(SPI)</FONT></B><BR><BR>对采样音频系统的配置是由javax.media.sound.sampled.spi包来完成的。通过
AudioConfig类的方法,可以在系统中安装或卸载设备,并且可以建立起缺省状态。服务提供者可以希望提供和安装他们自己的编码器和分析器。这个包提供了完成这种功能的机制。<BR><BR>下面的图描述了音频输入和输出的功能流。</P>
<P align=center><BR></P>
<P align=left><B><FONT
color=#666699>MIDI</FONT></B><BR><BR>javax.media.sound.MIDI程序包描述了
MIDI事件传送、合成、以及序列化的界面。下面介绍该程序包中所用到的主要概念。</P>
<P><B><FONT
color=#666699>传送</FONT></B><BR><BR>基本的MIDI传送界面是
MidiDevice。所有设备为列出其所支持的模式和查询当前模式提供了方法。设备支持监听器,可以监听各种事件如打开和关闭事件,并且有一个信息对象来描述设备状态。
<BR><BR>通常,设备是MIDI事件的传送器或接收器之一。传送器界面提供了一些方法来设置和查询接收器,该接收器接收由该传送器发送出的MIDI事件。接收器为接收MIDI事件提供方法。
<BR><BR>基本的
MidiEvent对象是通过一个消息说明事件类型、数据长度、以及状态。它也为涉及MIDI计时的设备例如音序器提供准确的计时信号。</P>
<P><B><FONT
color=#666699>合成器</FONT></B><BR><BR>合成器界面是一种生成声音的特殊类型的接收器。它也提供一些方法来管理声音库和乐器。另外,合成器可以支持一组全局的非-MIDI控件例如增益和定位。它也提供对一组MIDI通道的访问,实际上,声音就是通过这些通道产生的。<BR><BR>MidiChannel界面提供一组方法来表达公用的MIDI声音消息例如
noteON,
noteOff以及controlChange。还支持对当前通道状态的查询。</P>
<P><B><FONT
color=#666699>序列化</FONT></B><BR><BR>Sequencer界面继承了MidiDevice,它提供了完成基本MIDI序列化操作的方法。音序器可以装载和播放一个序列,查询和设置节奏,并且控制主从同步方式。一个应用程序还可以通过注册使得音序器在处理设备单元和控制器事件时通知自己。</P>
<P><B><FONT
color=#666699>文件和序列化</FONT></B><BR><BR>序列化对象代表一个来自一个或多个磁道的MIDI序列以及相关的计时信息。一个磁道对象包含一系列加上时间标记的MIDI事件。<BR><BR>JAVA声音
API在 MidiSystem类中为在MIDI文件和序列化对象之间转换提供了高级的接口。</P>
<P><B><FONT
color=#666699>查询和访问已经安装了的组件</FONT></B><BR><BR>MidiSystem类充当MIDI音乐系统入口的角色。它提供相关设备的信息并对之进行访问,这些设备包括传送器,接收器,合成器,以及音序器。它也提供了对SoundBank对象的访问。
</P>
<P><B><FONT
color=#666699>系统配置-服务提供者接口(SPI)</FONT></B><BR><BR>MIDI系统的配置由javax.media.sound.midi.spi包来完成的。通过MidiConfig类的方法,设备可以安装到系统中或从中卸载,并且可以建立起缺省状态。服务提供者可以希望提供和安装他们自己的文件和声音库分析器。该SPI程序包中包括了完成这种功能的机制。<BR><BR>现在让我们看看能用这些类和方法做什么。请仔细检查一下。
</P>
<P><B><FONT
color=#666699>ToySynth应用程序</FONT></B></P>
<P align=center></P>
<P>ToySynth应用程序试验了早期对JAVA声音
API存取的方式,主要是通过提供一系列设备设置,包括MIDI通道选择、音量控制、立体声定位、回声处理、以及其他选项。通过敲击键盘就可以演奏使用指定设备的乐曲,而这些设备又都是通过JAVA声音引擎来实现的。</P>
<P>完整的ToySynth.java代码样本。</P>
<P><A
href="http://www.java.sun.com/products/java-media/sound/"
target=_new>下载JAVA声音
API</A>的同时可以得到示范应用程序及其源代码。</P>
<P><B><FONT color=#666699>JAVA声音
API的市场目标</FONT></B></P>
<P>JAVA声音
API为各种各样的应用程序提供了声音支持。下面列举一些可能的应用。<BR><BR><B>通信框架</B></FONT></P></DIV>
<P>通过计算机召开远程会议<BR>在计算机上实现电话功能
<BR><BR><B>内容发布系统</B><BR>音乐<BR>信息流<BR>媒体传播<BR><BR><B>交互式应用程序</B><BR>游戏<BR>WEB站点<BR>产生动态内容<BR><BR><B>工具集</B><BR>内容产生<BR>各种工具</P><FONT
face=宋体 size=3>
<DIV align=left>
<P><B><FONT
color=#666699>在此基础上我们能做什么?</FONT></B></P>
<P>JAVA 2通过 AudioClip界面来访问JAVA声音音频引擎。随着1.0
API的发布,我们所曾经探索的应用领域,就将提供给各地的开发人员使用。<BR><BR>"现在,我们通过在JAVA2平台中加入真实声音的支持,启动了计算机桌面多媒体市场。以后,我们将看见我们的JAVA声音API技术广泛应用于专业人员、普通用户以及国际互连网上的音频应用",
Michael Bundschuh说。 <BR><BR>电影和录音带公司通过使用JAVA声音
API技术可以获得专业质量音频效果。在JAVA声音引擎中实现支持24位音频和多通道配置将鼓励专业人员开发出高级的声音编辑和播放应用程序。<BR>根据
Kara
Kytle所说,对更多的音频数据类型例如MP3的支持已经被提到议事日程。"另一个议程是从外部设备对MIDI数据进行捕获。这将很快实现。"她说。
<BR><BR>"JAVA声音
API技术已经可以很好地适用于通过WEB的音频播放。"Bundschuh说。"但是我们总是跟踪最新的技术,并且开发象MP3这样的技术,同时还要保护音乐文件的安全传送。我们计划在JAVA声音
API今后的版本中提供对上述技术的支持"。
<BR>随着最近市场的发展,象播放基于WEB音乐上的竞争策略一样,大家都已经把发展数字化声音放在中心的位置。新的媒体技术不断涌现,声音将扮演核心的角色。JAVA声音
1.0 API将适时地加入到新的关键应用程序开发行列中来。</P>
<P><B><FONT
color=#666699>现可以得到ToySynth.java程序代码</FONT></B><BR><BR>该程序通过图形形象地表示出一个合成器的样子,通过鼠标去按合成器上的键来演奏乐曲。你可以通过声音设置以及其他选项去改变声音的基调。好好玩吧。</P>
<P><B><FONT
color=#666699>相关URLs</FONT></B><BR><BR>JAVA声音
API - 说明,下载信息,相关数据表,常见问题解答 <BR><A
href="http://www.java.sun.com/products/java-media/sound/"
target=_new>http://www.java.sun.com/products/java-media/sound/</A></P>
<P>Beatnik<BR><A href="http://www.beatnik.com/"
target=_new>http://www.beatnik.com/</A></P>
<P>JAVA Media Framework API (JMF)<BR><A
href="http://www.java.sun.com/products/"
target=_new>http://www.java.sun.com/products/</A></P>
<P>Java 3D API<BR><A
href="http://www.java.sun.com/products/java-media/3D/"
target=_new>http://www.java.sun.com/products/java-media/3D/</A></FONT></FONT></P></DIV></TD></TR></TBODY></TABLE></FONT></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD></TD>
<TD align=top>
<P align=center><!------------------- global links footer ---------><BR><BR><FONT
face=宋体 size=2></P>
<P align=center></FONT> </P></TD></TR></TBODY></TABLE>
<P align=center><BR><FONT face=宋体 color=#333333
size=2>欢迎与我们联系:<A
href="mailto:webmaster@prc.sun.com">webmaster@prc.sun.com</A><BR>版权所有
1997-1998 Sun(中国)公司,北京南礼士路66号建威大厦16层<BR>All rights
reserved.<A
href="http://www.cnjavaclub.com/java/share/text/SMICopyright.html">Legal
Terms</A></FONT><!--------------------- end copyright notice -------------------></P></DD></DL><BR>
<P></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!-- 页面内容结束 -->
<DIV align=center>
<SCRIPT language=JavaScript src="JAVA声音技术.files/in_footer.js"></SCRIPT>
<SCRIPT language=JavaScript id=scriptcount name="scriptcount"></SCRIPT>
</DIV><!--搜索:JAVA声音技术--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -