SAudioSource
Index
Functions Index
void Play ()
void Stop ()
void Pause ()
void UnPause ()
void PlayOneShot (SResource clip, float volume)
void PlayClipAtPoint (SResource clip, SVector position, float volume=1f)
Properties Index
bool Enabled get
set
bool Loop get
set
float DopplerLevel get
set
float Volume get
set
float Pitch get
set
float Time get
set
int TimeSamples get
set
float Length get
int Samples get
bool IsPlaying get
float PanStereo get
set
float SpatialBlend get
set
bool Spatialize get
set
bool SpatializePostEffects get
set
float ReverbZoneMix get
set
bool BypassEffects get
set
bool BypassListenerEffects get
set
bool BypassReverbZones get
set
float Spread get
set
int Priority get
set
bool Mute get
set
float MinDistance get
set
float MaxDistance get
set
SResource AudioClip get
set
Functions
Play
void Play ()
Starts playing the audio clip.
Space.Host.ExecutingObject.Audio.Play()
-- For example, we have a short chime that we want to play every time a new avatar joins the scene.
hostObject = Space.Host.ExecutingObject
function welcomeSound ()
hostObject.Audio.Play()
end
Space.Scene.OnPlayerJoin(welcomeSound)
Stop
void Stop ()
Stops playing the audio clip.
Space.Host.ExecutingObject.Audio.Stop()
hostObject = Space.Host.ExecutingObject;
function audioOnOff ()
if hostObject.Audio.IsPlaying then
hostObject.Audio.Stop();
else
hostObject.Audio.Play();
end
Space.Log(hostObject.Audio.IsPlaying);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(audioOnOff);
-- Now, we can make the sound play or stop playing just by clicking the object.
Pause
void Pause ()
Pauses the audio clip.
Space.Host.ExecutingObject.Audio.Pause()
hostObject = Space.Host.ExecutingObject;
function pauseOnOff ()
if hostObject.Audio.IsPlaying then
hostObject.Audio.Pause();
else
hostObject.Audio.UnPause();
end
Space.Log(hostObject.Audio.IsPlaying);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(pauseOnOff);
-- Now, every time an object is clicked, the sound clip is paused/unpaused
UnPause
void UnPause ()
Pauses the audio clip.
Space.Host.ExecutingObject.Audio.UnPause()
hostObject = Space.Host.ExecutingObject;
function pauseOnOff ()
if hostObject.Audio.IsPlaying then
hostObject.Audio.Pause();
else
hostObject.Audio.UnPause();
end
Space.Log(hostObject.Audio.IsPlaying);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(pauseOnOff);
-- Now, every time an object is clicked, the sound clip is paused/unpaused
PlayOneShot
void PlayOneShot (SResource clip, float volume)
Plays the audio clip just ones at a desired volume.
Space.Host.ExecutingObject.Audio.PlayOneShot(AResource, 1.0)
hostObject = Space.Host.ExecutingObject;
function playOnce ()
hostObject.Audio.PlayOneShot(Space.Resources[0],0.5);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(playOnce);
-- Now, every time the object is clicked, a sound clip we have in Scripting Runtime Resources is played at half the volume.
-- This happens regardless if the audio clip in the AudioClip property is playing or not.
PlayClipAtPoint
void PlayClipAtPoint (SResource clip, SVector position, float volume=1f)
Function Description
Space.Host.ExecutingObject.Audio.PlayClipAtPoint(AResource, AVector)
--or
Space.Host.ExecutingObject.Audio.PlayClipAtPoint(AResource, AVector, 0.5)
Properties
Enabled
bool Enabled get
set
Is the Audio Source component enabled?
Space.Host.ExecutingObject.Audio.Enabled = false
hostObject = Space.Host.ExecutingObject;
function audioOnOff ()
hostObject.Audio.Enabled = not hostObject.Audio.Enabled;
Space.Log(hostObject.Audio.Enabled);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(audioOnOff);
-- When the host object is clicked, the Audio Source component gets enabled, if it was disabled,
-- or disabled, if it was enabled, and its new state is printed to the console.
Loop
bool Loop get
set
Is looping of the sound clip enabled?
Space.Host.ExecutingObject.Audio.Loop = true
--the below script will make the object toggle it's Loop option OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.Loop = not audio.Loop
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
DopplerLevel
float DopplerLevel get
set
The Doppler level of the Audio Source. (See: Doppler Effect)
Space.Host.ExecutingObject.Audio.DopplerLevel = 0.5
--the below script will make a slider change the Audio Source's Doppler Level
--[Add "slider" and "audio" references to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.DopplerLevel = slider.Value * 5 --0 to 5
end
slider.OnValueChanged(OVC)
Volume
float Volume get
set
The Volume level of the Audio Source.
Space.Host.ExecutingObject.Audio.Volume = 0.5
hostObject = Space.Host.ExecutingObject;
Space.Log(hostObject.Audio.Volume);
-- 1 by default
function audioVolumeDecr ()
if hostObject.Audio.Volume > 0 then
hostObject.Audio.Volume = hostObject.Audio.Volume - 0.2;
end
Space.Log(hostObject.Audio.Volume);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(audioVolumeDecr);
-- Now, every time we click this object, the Volume level is decreased by 0.2, until it reaches 0.
Pitch
float Pitch get
set
The Pitch level for the Audio Source.
Space.Host.ExecutingObject.Audio.Pitch = 0.5
hostObject = Space.Host.ExecutingObject;
Space.Log(hostObject.Audio.Pitch);
-- 1 by default
function audioPitchChange ()
if hostObject.Audio.Pitch < 3 then
hostObject.Audio.Pitch = hostObject.Audio.Pitch + 0.5;
end
Space.Log(hostObject.Audio.Pitch);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(audioPitchChange);
-- Now, every time we click this object, the Pitch level is increased by 0.5, until it reaches 3.
Time
float Time get
set
Playback position in seconds.
Space.Host.ExecutingObject.Audio.Time = 10
--the below script will make a slider set Audio Source's playback position (using seconds)
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.Time = slider.Value * audio.Length -- from 0 to Length of clip
end
slider.OnValueChanged(OVC)
TimeSamples
int TimeSamples get
set
Playback position in PCM samples.
Space.Host.ExecutingObject.Audio.TimeSamples = 5
--the below script will make a slider set Audio Source's playback position (using PCM Samples)
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.TimeSamples = slider.Value * audio.Samples -- from 0 to number of samples
end
slider.OnValueChanged(OVC)
Length
float Length get
Return Audio Length.
AudioLength = Space.Host.ExecutingObject.Audio.Length
--the below script will make a slider set Audio Source's playback position (using seconds)
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.Time = slider.Value * audio.Length -- from 0 to Length of clip
end
slider.OnValueChanged(OVC)
Samples
int Samples get
Return Audio Samples.
numSamples = Space.Host.ExecutingObject.Audio.Samples
--the below script will make a slider set Audio Source's playback position (using PCM Samples)
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.TimeSamples = slider.Value * audio.Samples -- from 0 to number of samples
end
slider.OnValueChanged(OVC)
IsPlaying
bool IsPlaying get
Is the sound clip playing right now?
numSamples = Space.Host.ExecutingObject.Audio.IsPlaying
--this script will play a looping sound only if someone is using the seat
--and will stop the sound if someone is not
--(Example: carnival game )
--[Object must contain a Seat component and AudioSource component]
thisGameObject = Space.Host.ExecutingObject
OnUpdate = function()
if thisGameObject.Seat.InUse then
if not thisGameObject.Audio.IsPlaying then
thisGameObject.Audio.Play()
end
else
if thisGameObject.Audio.IsPlaying then
thisGameObject.Audio.Stop()
end
end
end
thisGameObject.Audio.Loop = true
thisGameObject.SubscribeToEvents()
thisGameObject.OnUpdate(OnUpdate)
PanStereo
float PanStereo get
set
Pans the sound to the left or right. Values range from -1 to 1: 0 is the middle, -1 is full left, 1 is full right.
Space.Host.ExecutingObject.Audio.PanStereo = -1
--the below script will make a slider set the Stereo Pan
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.PanStereo = (slider.Value * 2) - 1 --(from -1 left to +1 right)
end
slider.OnValueChanged(OVC)
SpatialBlend
float SpatialBlend get
set
The level of impact 3D effects make on the AudioSource. 0 - no impact (full 2D sound), 1 - maximum impact (full 3D sound).
Space.Host.ExecutingObject.Audio.SpatialBlend = 1
hostObject = Space.Host.ExecutingObject;
function spBlendChange ()
if hostObject.Audio.SpatialBlend < 1 then
hostObject.Audio.SpatialBlend = hostObject.Audio.SpatialBlend + 0.2;
else
hostObject.Audio.SpatialBlend = 0;
end
Space.Log(hostObject.Audio.SpatialBlend);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(spBlendChange);
-- Spatial Blend is increased by 0.2 every time the object is clicked, until it reaches 1.
-- Then with the next click, it resets back to 0.
Spatialize
bool Spatialize get
set
Is spatialization enabled?
Space.Host.ExecutingObject.Audio.Spatialize = true
--the below script will make the object toggle it's Spatialize feature OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.Spatialize = not audio.Spatialize
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
SpatializePostEffects
bool SpatializePostEffects get
set
Is spatialization enabled before or after other filters are in action?
Space.Host.ExecutingObject.Audio.SpatializePostEffects = true
--the below script will make the object toggle it's Spatialize Post Effects feature OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.SpatializePostEffects = not audio.SpatializePostEffects
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
ReverbZoneMix
float ReverbZoneMix get
set
The level at which the audio coming from this Audio Source will be mixed into the global reverb of the scene (accomplished with Reverb Zones).
Space.Host.ExecutingObject.Audio.ReverbZoneMix = true
exa--the below script will make a slider set the Reverb Zone Mix value
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.ReverbZoneMix = (slider.Value * 1.1) --(from 0.0 to 1.1)
end
slider.OnValueChanged(OVC)
BypassEffects
bool BypassEffects get
set
When true, none of global sound effects (reverbs, filters, etc.) are applied to the audio from this Audio Source.
Space.Host.ExecutingObject.Audio.BypassEffects = true
--the below script will make the object toggle it's Bypass Effects feature OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.BypassEffects = not audio.BypassEffects
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
BypassListenerEffects
bool BypassListenerEffects get
set
When true, whichever global effects are set on the Audio Listener will not be applied to the audio from this Audio Source.
Space.Host.ExecutingObject.Audio.BypassListenerEffects = true
--the below script will make the object toggle it's Bypass Listener Effects feature OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.BypassListenerEffects = not audio.BypassListenerEffects
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
BypassReverbZones
bool BypassReverbZones get
set
When true, the audio from this Audio Source is not mixed into the global reverb generated through Reverb Zones.
Space.Host.ExecutingObject.Audio.BypassReverbZones = true
--the below script will make the object toggle it's Bypass Reverb Zones feature OnClick
--[Add "audio" reference to the Scripting Runtime component]
thisGameObject = Space.Host.ExecutingObject
audio = Space.Host.GetReference("audio").Audio
OnClick = function()
audio.BypassReverbZones = not audio.BypassReverbZones
end
thisGameObject.AddClickable()
thisGameObject.Clickable.OnClick(OnClick)
Spread
float Spread get
set
The angle of spread of the audio channels in the 3D space (only works for stereo and multichannel audio). 0 by default - all channels are concentrated at the same speaker location, making it "mono".
Space.Host.ExecutingObject.Audio.Spread = 10.0
hostObject = Space.Host.ExecutingObject;
function increaseSpread ()
if hostObject.Audio.Spread < 360 then
hostObject.Audio.Spread = hostObject.Audio.Spread + 90;
end
Space.Log(hostObject.Audio.Spread);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(increaseSpread);
-- Every time an object is clicked, the spread increases by 90 degrees - compare the sound at different angles of spread!
Priority
int Priority get
set
The priority of this Audio Source: when there are more Audio Sources playing than channels available, Priority defines which channels will be discarded in favour of those with a higher priority. 0 is the highest priority, 255 - the lowest.
Space.Host.ExecutingObject.Audio.Priority = 50
hostObject = Space.Host.ExecutingObject;
function changePriority ()
if hostObject.Audio.Priority == 0 then
hostObject.Audio.Priority = 255;
else
hostObject.Audio.Priority = 0;
end
Space.Log(hostObject.Audio.Priority);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(changePriority);
-- Now the Audio Source alternates between the highest and the lowest priorities.
-- This can be useful, for example, in a scene with an ambient sound set at Priority 128, where we have a speaker, which plays a certain looped audio nonstop.
-- When we want to hear the audio, we change it to the highest priority, so it blocks the ambient sound.
-- When we don't, we change it to the lowest, and the ambient sound dominates the scene again.
Mute
bool Mute get
set
Is the audio muted? If True, the Volume is set to 0. If False, the Volume is restored to the original level.
Space.Host.ExecutingObject.Audio.Mute = true
hostObject = Space.Host.ExecutingObject;
function muteOnOff ()
hostObject.Audio.Mute = not hostObject.Audio.Mute;
Space.Log(hostObject.Audio.Mute);
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(muteOnOff);
-- Now clicking the object works like the Mute button.
MinDistance
float MinDistance get
set
At which distance from the Audio Source the sound will begin ceasing? The sound will be heard at its maximum volume within this distance. (Spatial Blend should not be equal to 0 for this property to take effect.)
Space.Host.ExecutingObject.Audio.MinDistance = 2.0
--the below script will make a slider set the Minimum Distance
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.MinDistance = (slider.Value * 20) + 10 --(from 10 to 30)
end
slider.OnValueChanged(OVC)
MaxDistance
float MaxDistance get
set
At which distance from the Audio Source the sound will no longer be heard? (Spatial Blend should not be equal to 0 for this property to take effect.)
Space.Host.ExecutingObject.Audio.MaxDistance = 10.0
--the below script will make a slider set the Maximum Distance
--[Add "slider" and "audio" references to the Scripting Runtime component]
slider = Space.Host.GetReference("slider").UISlider
audio = Space.Host.GetReference("audio").Audio
OVC = function()
audio.MaxDistance = (slider.Value * 40) + 60 --(from 60 to 100)
end
slider.OnValueChanged(OVC)
AudioClip
SResource AudioClip get
set
The audio clip that is or will be played by this Audio Source.
Space.Host.ExecutingObject.Audio.AudioClip = AResource
-- In this example, there are 3 audio clips in Scripting Runtime Resources
hostObject = Space.Host.ExecutingObject;
local nextTrack = 0;
function changeTrack ()
hostObject.Audio.AudioClip = Space.Resources[nextTrack];
hostObject.Audio.Play();
Space.Log(Space.Resources[nextTrack].Name);
if nextTrack == 2 then -- replace 2 with n-1, where n is the amount of audio clips you have added to Resources
nextTrack = 0;
else
nextTrack = nextTrack + 1;
end
end
hostObject.SubscribeToEvents();
hostObject.OnMouseDown(changeTrack);
-- Now, every time the object is clicked, the next audio clip is played.
-- What's more, the list is looped (the index resets back to 0 when it gets to the end of the list)!
GameObject
SGameObject GameObject get
Returns a reference to the GameObject of this component.
theGameObject = Space.Host.ExecutingObject.Audio.GameObject