VRML---第四章第三部分(声音效果)

        在VRML中用来添加声音的节点有音频剪辑AudioClip节点、MovieTexture节点和声音Sound节点。
      其中AudioClip节点和MovieTexture节点用来创建声源,Sound节点用来指定声音的播放方式。AudioClip节点和MovieTexture节点是Sound节点source域的域值,用于创建声源,具体引入声音文件。
     VRML所支持的声音文件有WAV,MIDI和MPEG-1文件,而可以通过AudioClip节点引用的声音有WAV文件和MIDE文件。MPEG-1是通过MovieTexture节点来引用的。
     需要播放电影的发音效果时,只需要通过Sound节点source域的域值,引入电影文件为电影纹理图像产生同步的伴音即可。

声音节点

    声音Sound声音节点在VRML世界中创建专场声场和声音发射器,它用来指定声源的各种参数,确定声源的位置和声音的立体化表现。
    
     声音可以位于局部坐标系中的任何一个点,并以球面或椭球的模式发射出声音。
     声音传播的范围及传播的强度被限制在两个椭球体内,浏览者在VRML场景里移动时,这两个椭圆球表示由一个声音发射器发出的声音在音量上的变化和声音传播的范围。





       
     
      当浏览者位于最小范围椭圆球中时,听到的该声音发射器发出的声音强度最大,且处处相等;
       当浏览者位于最小范围椭圆球和最大范围椭圆球之间时,离声音发射器越远,听到的该发射器发出的声音强度越小,直到最大范围椭圆球边缘处时,声音强度变为零。
        当浏览者位于最小范围椭圆球和最大范围椭圆球之间时,离声音发射器越远,听到的该发射器发出的声音强度越小,直到最大范围椭圆球边缘处时,声音强度变为零。

语法:

Sound{

     #source域的域值用于设定声源。其域值就是用来创建声源的AudioClip节点或MovieTexture节点。该域的默认值为NULL,表示没有

     #声源引入,即没有声音可播放。

  exposedField SFNode   source     NULL

#location域的域值用于设定声音发射器位置的三维坐标。该域的默认值为0.0 0.0 0.0,即坐标系的原点。

  exposedField  SFVec3  location    0.0 0.0 0.0

#direction域的域值用于设定声音发射器的空间朝向,即规定声音发射器所指的方向,声音发射器将以这个方向发射声音。该域的默认#值为0.0 0.0 1.0,即指向坐标系的Z轴正方向。

  exposedField  SFVec3f direction   0.0 0.0 1.0

#intensity域的域值用于设定声音发射器发射声音的强度,即音量。该域值在0.0到1.0范围内变化。1.0表示音量最大,为声音文件建立

#时的全音量;0.0表示静音。当intensity域的域值大于1.0时,会使该声音失真。

  exposedField SFFloat   intensity  1.0

#maxBack、maxFront、minBack、minFront域的域值用于设定从声音发射器所在位置沿direction域所指定方向的前后最大、最小直线距离

  exposedField SFFloat  maxBack  10.0

  exposedField SFFloat  maxFront  10.0

  exposedField SFFloat  minBack   1.0

  exposedField SFFloat  minFront  1.0

#priority域的域值用于设定声音的优先级。该域的取值范围为0.0到1.0。1.0表示最高的优先级,0.0最低。priority域的默认值为0.0。

  exposedField SFFloat   priority    0.0

#spatialize域的域值用于设定是否实现声音立体化,即是否将声音经过立体化数字处理。

  exposedField SFBool  spatialize   TRUE

}

     音频文件一般应与VRML文件在同一位置。

音频剪辑节点

   音频剪辑AudioClip节点在VRML文件中并不能作为独立的节点,它们只是创建了声源,而要想播放出声音,需要通过Sound节点来实现。
    AudioClip节点在VRML中描述了一个声源,指定了其他需要声源的节点可以引用的声音文件的位置及播放的各种参数。
        AudioClip 音响剪辑节点只能出现在 Sound 节点中的 source 域中。只能播放 wav midi 文件。
语法:

AudioClip{

#url的是声音文件名,包括扩展名。从第一个文件开始,按文件优先级依次查找。

  exposedField MFString url              [ ]

#description域的域值用于设定一组描述所引用声音文件的字符串。

  exposedField SFString   description “”

#是否循环播放

  exposedField SFBool      loop            FALSE

#pitch用于设定快速或慢速播放的因子。0-1表示速度减慢,音调降低;大于1表示速度加快,音调升高。 Pitch与固有长度相乘就#是实际播放长度。

  exposedField SFFloat     pitch           1.0

  exposedField SFTime     startTime   0.0

  exposedField SFTime     stopTime    0.0

#出事件duration_changed表示声音固有持续时间,isActive表示是否正在播放。

  eventOut    SFTime  duration_changed

  eventOut    SFBool  isActive

}


AudioClip节点在其startTime到达之前保持休眠状态,即不播放声音文件。在startTime时刻,AudioClip节点变为活跃节点,开始播放声音。
如果loop域值为FALSE,当stopTime到达或播放完一遍声音(在startTime+duration/pitch)后,AudioClip节点停止播放。
如果loop域值为TURE,AudioClip节点将循环播放声音,直到stopTime为止。在停止时间早于开始时间的情况下,系统将忽略停止时间,这可用来生成永远循环的声音。

例子:
#VRML V2.0 utf8
Group{ 
	children[ 
		Transform{
			translation 0.0 1.05 0.0
			children [
				Shape{
					appearance Appearance{
						texture ImageTexture{
							url "si2.jpg"
						}
					}
					geometry Box{
						size 1.0 2.1 1.0
					}
				},
				Transform{
					translation 0.0 0.0 0.51
					children [
						Shape{
							appearance Appearance{
								texture ImageTexture{
									url "si1.jpg"
								}
							}
							geometry Box{
								size 1.0 2.1 0.02
							}
						}
					]
				},
				Sound{
					location 0.0 0.0 0.0
					direction 0.0 0.0 1.0
					intensity 1.0
					spatialize TRUE
					maxFront 36.0
					maxBack 18.0
					minFront 6.0
					minBack 2.0
					source AudioClip{
						url "music.mid"
						loop TRUE
					}
				}
			]
		}
	]
}

音频剪辑节点


例子:

#VRML V2.0 utf8
Transform{
	translation 0 0 -0.1
	children[
		Shape{
			appearance Appearance{
				material Material{
					diffuseColor 0.3 0.3 0.3
				}
			}
			geometry Box{
			   size 5.1 3.4 0.2
		   }  #电视造型
		}
	]
}
Shape{
	appearance Appearance{
		texture DEF dy MovieTexture{   #电影纹理节点
			url "ylsy.MPG"           #电影文件
			loop TRUE
		}
	}
	geometry Box{ 
		size 4.5 3 0.01
	}        #电影屏幕造型
}
Sound {                     #声音节点
	source  USE  dy      #引用电影纹理节点
	maxBack  10
	maxFront  80
	minBack  5
	minFront  30
}

一般来说,为了实现真实的衰减效果,应将maxBack域值设为minBack域值的10倍。同时将maxFront域值设为minFront域值的10倍。如果其值比大于10,则衰减相对较缓慢,若比值小于10则衰减较快。














评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值