网页中的声音
作者:吴咏炜 来源:未知 添加时间:2006-5-21 10:12:35本文将对两种浏览器实现声音播放的技术作一番初步分析。顺便说一句,文中提到的Netscape浏览器以Communicator 4.0为准,Internet Explorer则以3.0版为准。
一、Microsoft IE中的BGSOUND
BGSOUND的基本格式如下:<BGSOUND SRC=[URL] LOOP=[循环遍数|-1|INFINITE]>
其中,SRC后面跟的是WAV、AIFF、AU或MIDI格式的音频文件地址;LOOP后面跟的是循环播放此背景音的遍数:当LOOP取值为-1或INFINITE时,表示声音将反复循环播放至用户离开此网页时为止。
与下面将要详细介绍的Netscape插件不同,BGSOUND标记格式简单,简便实用,但不能实现复杂的控制。
二、Netscape的LiveAudio
LiveAudio也能播放WAV、AIFF、AU和MIDI这些常见格式的文件,并可由控件(controls)对声音的播放过程作较为复杂的控制。其声音控件的大小由EMBED标记中的WIDTH和HEIGHT参数决定。控件有以下六种不同的类型:(1)Console :含有Play、Pause、Stop按钮和音量控制杆;(2)SmallConsole:含有Play、Stop按钮和音量控制杆,此类控件中的按钮比标准Console的要小;(3)PlayButton:播放声音的按钮;(4)PauseButton:在放音时暂停声音播放(但不卸载声音文件)的按钮;(5)StopButton:停止声音播放并卸载声音文件的按钮;(6)VolumeLever:调整回放音量(系统音量)的控制杆。
这些控件可在一个网页上重复使用多次,可以控制一个或多个声音文件,具体情况则取决于在HTML或JavaScript中是如何使用声音文件的。
应当记住的是,其它小程序(applet)也可以使用这些控制,以实现诸如改变整个系统音量之类的操作。
三、LiveAudio的HTML语法格式
<EMBED SRC=[URL] AUTOSTART=[TRUE|FALSE] LOOP=[TRUE|FALSE|整数]
STARTTIME=[分:秒] ENDTIME=[分:秒] VOLUME=[0-100] WIDTH=[像素数]
HEIGHT=[像素数] ALIGN=[TOP|BOTTOM|CENTER|BASELINE|LEFT|RIGHT
|TEXTTOP|MIDDLE|ABSMIDDLE|ABSBOTTOM] CONTROLS=[CONSOLE|SMALLCONSOLE
|PLAYBUTTON|PAUSEBUTTON|STOPBUTTON|VOLUMELEVER] HIDDEN=[TRUE]
MASTERSOUND NAME=[用于组合各个控制来控制同一声音文件的唯一识别名
]......>
下面对LiveAudio的HTML语法格式作一简要说明:
1.SRC=[URL]:声音源文件地址(URL)。
2.AUTOSTART=[TRUE|FALSE]:设为TRUE将使声音文件在网页载入时自动启动。缺省值为FALSE。
3.LOOP=[TRUE|FALSE|整数]:设为TRUE将使声音一直循环播放,直至用户按下停止按钮或离开此网页时为止;如果设为一整数,则声音将循环播放此整数遍数。
4.STARTTIME=[分:秒]:用STARTTIME来表示声音文件中开始播放的位置。如果想在30秒的位置处开始播放,则可将此数值设为00:30(注意:此功能只能在Windows 95、NT、Macintosh中才能够实现)。
5.ENDTIME=[分:秒]:用ENDTIME来表示声音文件中播放停止的位置。如果想在一分半钟之后停止声音,则可将此数值设为01:30(注意:此功能只能在Windows 95、NT、Macintosh中才能够实现)。
6.VOLUME=[0-100]:这一数值必须介于0到100之间,代表百分比。除非使用了MASTERVOLUME(可参见下面的NAME属性,此时该数值将代表系统音量),否则该属性用于设置所播放的声音音量,缺省值为当前系统音量。
7.WIDTH=[像素数]:这一属性用于确定控件的宽度。对于CONSOLE和SMALLCONSOLE,缺省宽度为144;对于VOLUMELEVER,该宽度是74;对于按钮,其缺省值是37。
8.HEIGHT=[像素数]:这一属性用于确定控件的高度。CONSOLE的缺省高度是60,SMALLCONSOLE的高度是15,VOLUMELEVER的高度是20,按钮的高度则是22。
9.ALIGN=[TOP|BOTTOM|CENTER|BASELINE|LEFT|RIGHT|TEXTTOP|MIDDLE|ABSMIDDLE|ABSBOTTOM]:这一属性告诉Netscape Navigator如何在控制板的周围对齐文本,这和IMG标记中的ALIGN差不多。
10.CONTROLS=[CONSOLE|SMALLCONSOLE|PLAYBUTTON|PAUSEBUTTON|STOPBUTTON|VOLUMELEVER]:这一标记确认作者想使用什么样的控件,其缺省值是CONSOLE。
11.HIDDEN=[TRUE]:如果这一属性出现在EMBED标记中,则应为TRUE,此时控件将不出现,声音作为背景音播放。
12.MASTERSOUND:这一属性用于将各个控制组合到同一NAME组中。这一属性没有定义值(只需出现在EMBED标记中即可),可以告诉LiveAudio哪个文件是真正的声音文件,并让其忽略其它的形式文件(stub file)。形式文件具有最短的长度,只需能激活LiveAudio即可(具有适当的文件扩展名,因而能产生适当的文件类型)。
13.NAME=[用于组合各个控制来控制同一声音文件的唯一识别名]:这一属性设定一组控件的唯一识别名。例如,如果一个网页作者想使用两个嵌入的对象(一个为PLAYBUTTON,另一个为STOPBUTTON)来控制一个声音文件,则两个对象必须使用这一属性来将它们组合在一起。在这种情况下,需要使用MASTERSOUND标记来告诉LiveAudio哪个EMBED标记中真正含有要控制的声音文件,LiveAudio会忽略不含MASTERSOUND标记的EMBED对象。
如果你想用一个VOLUMELEVER来控制多个NAME(即系统音量),则可用VOLUMELEVER作为控件(CONTROLS)来创建一个嵌入对象(EMBED),然后将NAME设为MASTERVOLUME (注意:此功能在Netscape的开发者网页 http://developer.netscape.com/ 上有说明,但本人没有试验成功。)。
四、LiveAudio的滞后载入
LiveAudio提供了在按下播放按钮时才载入声音的功能。这就使得网页设计者可以方便地在一页中嵌入多个声音文件,而不用担心页面载入时会花多少时间。
要实现这一特性,网页设计者必须按如下方式来创建一个文件(以AIFF文件为例,其它声音文件格式也完全类似):
<SCRIPT LANGUAGE=SoundScript>
OnPlay(http://YourURL/YourSound.aif);
</SCRIPT>
这个文件应作为一个声音文件(例如script1.aif)予以保存。如果按下了播放键,则用户在OnPlay函数中定义的声音文件就会被调进来播放。
五、使用LiveAudio的例子
1.在网页中播放背景声音:
<EMBED SRC="mysound.aif" HIDDEN=TRUE>
2.用多个控件(CONTROLS)控制同一声音文件:
<EMBED SRC="mysound.aif" HEIGHT=22 WIDTH=37 CONTROLS=PLAYBUTTON
NAME="MyConsole" MASTERSOUND>
<EMBED SRC="stub1.aif" HEIGHT=22 WIDTH=37 CONTROLS=PAUSEBUTTON
NAME="MyConsole">
<EMBED SRC="stub2.aif" HEIGHT=22 WIDTH=37 CONTROLS=STOPBUTTON
NAME="MyConsole">
<EMBED SRC="stub3.aif" HEIGHT=20 WIDTH=74 CONTROLS=VOLUMELEVER
NAME="MyConsole">
注意:stubx.aif是用类似于echo.>stubx.aif方式创建的形式文件。
3.使用SMALLCONSOLE:
<EMBED SRC="mysound.aif" HEIGHT=15 WIDTH=144 MASTERSOUND
CONTROLS=SMALLCONSOLE>
六、LiveConnect
LiveAudio中应用了LiveConnect技术,可以直接使用JavaScript中的下列函数来控制载入的LiveAudio插件:
1.控制函数(返回值全部为布尔型):
· play('TRUE/FALSE/整数','声音的URL');
·stop();
·pause();
·start_time(int seconds);
·end_time(int seconds);
·setvol(int percent);
·fade_to(int to_percent);
·fade_from_to(int from_percent,int to_percent);
·start_at_beginning() = 忽略 start_time();
·stop_at_end() = 忽略 end_time()。
2.状态指示函数(返回值除*为整型外,其余全部为布尔型):
·IsReady():如果插件实例已载入结束,则返回TRUE;
·IsPlaying():如果声音正在播放,则返回TRUE;
·IsPaused():如果声音被暂停,则返回TRUE;
·GetVolume():把音量值作为一个百分比返回。
七、设计兼容Netscape Navigator和Internet Explorer的网页
对于非MIDI类型声音文件,问题比较简单,Internet Explorer 3.0以上的版本基本上可以正确处理Netscape的EMBED标记,因此可以简单地在网页中加入如下所示的代码:
<EMBED SRC="sample.wav" HIDDEN=TRUE AUTOSTART=TRUE>
(注意:这是播放背景声音而无控件的情况。如果无AUTOSTART=TRUE的话,则IE将不能自动播放声音。)
或
<EMBED SRC="sample.wav" WIDTH=144 HEIGHT=60>
(注意:这是有控件的情况。IE会忽略WIDTH和HEIGHT设置而使用其较为简单的控制界面。)
值得注意的是,此时IE使用其ActiveX控件来处理嵌入对象,因而与Netscape的LiveAudio插件是有不少区别的。除上面提到的两点外,比较重要的区别还包括:IE中LOOP只接受TRUE或FALSE,并把接受到的其它类型的数值也转化成布尔值处理。
对于MIDI文件,情况则要复杂些。实际上,在安装有Netscape Navigator 3.0而没有安装Communicator的机器上,上述方法在IE中也是适用的,IE会自动使用Navigator中的LiveAudio插件。遗憾的是,在其它情况下似乎都不行,IE或者不能找到合适的插件,或者报告插件未正确初始化。这时,就得使用其它办法了。
先说一下属于刚才“其它情况”的IE用户该如何正确浏览嵌入有MIDI文件的页面(因特网上这样的页面还是相当多的)。较为简单的方法是从网上下载合适的ActiveX控件,如LiveUpdate Crescendo (Windows 95用户可在 ftp://ftp.liveupdate.com/plugins/ 处下载并运行c30xie.exe来进行安装)等。另外,可在 http://www.activex.com/ 处找到大量各式各样的ActiveX控件。
当然,本文主要想讨论的还是制作问题。可以使用JavaScript并通过判断用户使用的是何种浏览器而给出不同的代码来解决上述问题。
下面的例子解决了在网页中循环播放背景音乐的问题,在HTML的<HEAD>段中加入如下代码:
<SCRIPT LANGUAGE="JavaScript">
<!--
function BackgroundSound( URL )
{
if( navigator.appName == "Netscape" )
document.write( "" );
else
document.write( "" );
}
// -->
</SCRIPT>
然后,在<BODY>中加入启动代码,如:
<SCRIPT LANGUAGE="JavaScript"><!-
BackgroundSound( "YourSound.mid" );
// --></SCRIPT>
好了,这一段代码在Netscape Navigator和Internet Explorer中都能正常播放音乐了。泡一杯咖啡,坐下来慢慢聆听欣赏美妙动听的音乐吧!如果愿意的话,则还可以将这个小程序做得更复杂一些(例如,使它能够处理重复遍数,而不只是反复不停地播放。)。
站内搜索