Adding Sound
Motivation
- Sounds can be triggered by viewer actions
- Clicks, horn honks, door latch noises
- Sounds can be continuous in the background
- Wind, crowd noises, elevator music
- Sounds emit from a location, in a direction, within an area
Creating sounds
Sounds have two components:
- A sound source providing a sound signal
- Like a stereo component
- A sound emitter converts a signal to virtual sound
- Like a stereo speaker
Syntax: AudioClip
An AudioClip node creates a digital sound source:
- url - a sound file URL
- pitch - playback speed
- playback controls, like a TimeSensor node
XML Encoding
1
2
3
4
5
6
7
8
<Sound>
<AudioClip
url='"myfile.mp3"'
pitch='1.0'
startTime='0.0'
stopTime='0.0'
loop='false'/>
</Sound>
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
Sound {
source AudioClip {
url "myfile.mp3"
pitch 1.0
startTime 0.0
stopTime 0.0
loop FALSE
}
}
Syntax: MovieTexture
A MovieTexture node creates a movie sound source:
- url - a texture movie file URL
- speed - playback speed
- playback controls, like a TimeSensor node
XML Encoding
1
2
3
4
5
6
7
8
<Sound>
<MovieTexture containerField='source'
url='"movie.mp4"'
speed='1.0'
startTime='0.0'
stopTime='0.0'
loop='false'/>
</Sound>
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
Sound {
source MovieTexture {
url "movie.mp4"
speed 1.0
startTime 0.0
stopTime 0.0
loop FALSE
}
}
Selecting sound source types
Supported by the AudioClip node:
- MP3 or WAV - digital sound files Good for sound effects
Supported by the MovieTexture node:
- MP4 - movie file with sound Good for virtual TVs
Syntax: Sound
A Sound node describes a sound emitter:
- source - AudioClip or MovieTexture node
- location and direction - emitter placement
XML Encoding
1
2
3
4
5
<Sound
location='0.0 0.0 0.0'
direction='0.0 0.0 1.0'>
<AudioClip ... />
</Sound>
Classic VRML Encoding
1
2
3
4
5
Sound {
source AudioClip { ... }
location 0.0 0.0 0.0
direction 0.0 0.0 1.0
}
A Sound node describes a sound emitter:
- intensity - volume
- spatialize - use spatialize processing
- priority - prioritize the sound
XML Encoding
1
2
3
4
5
6
<Sound
...
intensity='1.0'
spatialize='true'
priority='0.0'>
</Sound>
Classic VRML Encoding
1
2
3
4
5
6
Sound {
...
intensity 1.0
spatialize TRUE
priority 0.0
}
A Sound node describes a sound emitter:
- minFront, minBack - inner ellipsoid
- maxFront, maxBack - outer ellipsoid
Setting the sound range
- The sound range fields specify two ellipsoids
- minFront and minBack control an inner ellipsoid
- maxFront and maxBack control an outer ellipsoid
- Sound has a constant volume inside the inner ellipsoid
- Sound drops to zero volume from the inner to the outer ellipsoid
Creating triggered sounds
AudioClip node:
- loop FALSE
- Set startTime from a sensor node
Sound node:
- spatialize TRUE
- minFront etc. with small values
- priority 1.0
A sample using triggered sound
XML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Group>
<Shape>
<Appearance>
<Material
diffuseColor='1 1 1'/>
</Appearance>
<Box
size='0.23 0.1 1.5'/>
</Shape>
<TouchSensor DEF='C4'/>
<Sound
maxBack='100'
maxFront='100'>
<AudioClip DEF='PitchC4'
url='"tone1.mp3"'/>
</Sound>
</Group>
<ROUTE fromNode='C4' fromField='touchTime' toNode='PitchC4' toField='set_startTime'/>
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Group {
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 1.0 1.0 1.0
}
}
geometry Box {
size 0.23 0.1 1.5
}
}
DEF C4 TouchSensor { }
Sound {
maxFront 100.0
maxBack 100.0
source DEF PitchC4 AudioClip {
url "tone1.mp3"
pitch 1.0
}
}
]
}
ROUTE C4.touchTime TO PitchC4.set_startTime
Example
Creating continuous localized sounds
AudioClip node:
- loop TRUE
- startTime 0.0 (default)
- stopTime 0.0 (default)
Sound node:
- spatialize TRUE (default)
- minFront etc. with medium values
- priority 0.0 (default)
A sample using continuous localized sound
XML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
<Sound
minBack='5'
minFront='5'>
<AudioClip
url='"willow1.mp3"'
loop='true'
startTime='1'/>
</Sound>
<Transform
translation='0 -1.65 0'>
<Inline
url='"sndmark.wrl"'/>
</Transform>
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sound {
minFront 5.0
minBack 5.0
maxFront 10.0
maxBack 10.0
source AudioClip {
url "willow1.mp3"
loop TRUE
startTime 1.0
stopTime 0.0
}
}
Transform {
translation 0.0 -1.65 0.0
children [
Inline {
url "sndmark.wrl"
}
]
}
Creating continuous background sounds
AudioClip node:
- loop TRUE
- startTime 0.0 (default)
- stopTime 0.0 (default)
Sound node:
- spatialize FALSE (default)
- minFront etc. with large values
- priority 0.0 (default)
Summary
An AudioClip node or a MovieTexture node describe a sound source:
- A URL gives the sound file
- Looping, start time, and stop time control playback
A Sound node describes a sound emitter:
- A source node provides the sound
- Range fields describe the sound volume
This post is licensed under CC BY 4.0 by the author.