Adding Sound
 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.