Audio¶
Our audio system is similar to Unity's - we also have an AudioSource component and a AudioClip class that hold actual clips.
The audio level is the best place for you to get started.
Essential API¶
AudioClipclass is responsible for loading in audio files and show be passed toAudioSourcecomponent to be playedAudioClip::Load("filePath", "soundName"): Load audio file asAudioClip, returnsAudioClip*. Path is relative to "Resources"AudioClip::Find("soundName"): Find already loaded audio file, returnsAudioClip*
AudioSourcecomponent is responsible for playing sound and managing its propertiesAudioSource::AudioSource(AudioClip* clip): construct anAudioSourcecomponent by passing in anAudioClip*AudioSource::SetAudioClip(AudioClip* clip): Set the audio clip to be played on an audio sourceAudioSource::Play(),AudioSource::Pause(),AudioSource::SetVolume(float volume)AudioSource::SetProperty(Property prop, bool value): Set properties like 3D, loop, and mute
AudioLisentercomponent should be added to your camera or another appropriate entity to enable 3D sound. There should only be 1AudioListenerin the level
Code snippets¶
Play a 3D sound::
Entity* cameraEntity = Entity::Instantiate("Camera");
cameraEntity->AddComponent<CameraComponent>();
cameraEntity->AddComponent<AudioListener>();
Entity* audio3D = Entity::Instantiate("3DAudio");
audio3D->transform->SetWorldPos(Math::Vector3{0, 0, 0});
// AudioClip::Load loads the audio in the filepath under resource_path
// AudioSource constructor parameters:
// 0b001 - properties of AudioSource 0b=binary then from left to right:
// IS_MUTE, IS_LOOP, IS_3D
// This AudioSource is NOT muted, NOT looping, but IS 3D
AudioSource* src3D = audio3D->AddComponent<AudioSource>(
0b001, AudioClip::Load("Sound/zombie-hit.wav"));
// AudioPlay component which plays AudioSource on KeyCode press
audio3D->Play();
Play a 2D sound:
Entity* audio2D = Entity::Instantiate("2DAudio");
AudioClip* clip = AudioClip::Load("Sound/sample_sound.mp3");
AudioSource* src2D = audio2D->AddComponent<AudioSource>();
src2D->SetProperty(AudioSource::Property::IS_3D, false);
src2D->SetProperty(AudioSource::Property::LOOP, true);
src2D->clip = clip;
src2D->SetVolume(0.5f);
src2D->Play();