SQCSimulator2023/SQCSim2021/audio.cpp

50 lines
1.7 KiB
C++
Raw Normal View History

2021-10-19 10:27:59 -04:00
#include "audio.h"
2021-10-25 10:50:08 -04:00
Audio::Audio() {
m_engine = irrklang::createIrrKlangDevice();
m_engine->setDopplerEffectParameters(1);
m_engine->setRolloffFactor(1);
m_engine->setDefault3DSoundMinDistance(1);
m_engine->setDefault3DSoundMaxDistance(1000);
}
Audio::Audio(const char * music) {
m_engine = irrklang::createIrrKlangDevice();
m_engine->setDopplerEffectParameters(1);
m_engine->setRolloffFactor(1);
m_engine->setDefault3DSoundMinDistance(1);
m_engine->setDefault3DSoundMaxDistance(1000);
m_music = m_engine->play2D(music, true, true, true, irrklang::ESM_STREAMING);
}
Audio::~Audio() {
2021-10-26 17:28:37 -04:00
if (m_music) m_music->drop();
if (m_engine) m_engine->drop();
2021-10-25 10:50:08 -04:00
}
2021-10-19 10:27:59 -04:00
2021-10-26 17:28:37 -04:00
void Audio::Update3DAudio(Vector3f pos, Vector3f dir, Vector3f vel) {
m_engine->setListenerPosition(irrklang::vec3df(pos.x, pos.y, pos.z),
irrklang::vec3df(dir.x, dir.y, dir.z),
irrklang::vec3df(vel.x, vel.y, vel.z));
2021-10-25 10:50:08 -04:00
}
2021-10-26 17:28:37 -04:00
void Audio::Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f& pos, Vector3f& vel, float volume = 1) {
2021-12-07 18:59:50 -05:00
sound = m_engine->play3D(name, irrklang::vec3df(pos.x, pos.y, pos.z), false, false, true, irrklang::ESM_NO_STREAMING, true);
2021-10-26 17:28:37 -04:00
sound->setVelocity(irrklang::vec3df(vel.x, vel.y, vel.z));
2021-10-25 10:50:08 -04:00
sound->setVolume(volume);
}
2021-10-19 10:27:59 -04:00
2021-10-26 17:28:37 -04:00
void Audio::Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume = 1) {
sound->setPosition(irrklang::vec3df(pos.x, pos.y, pos.z));
sound->setVelocity(irrklang::vec3df(vel.x, vel.y, vel.z));
2021-10-25 10:50:08 -04:00
sound->setVolume(volume);
2021-10-19 10:27:59 -04:00
}
2021-10-25 10:50:08 -04:00
2021-11-16 20:48:52 -05:00
void Audio::PlaySong(const char* music) {
m_music = m_engine->play2D(music, true, true, true, irrklang::ESM_STREAMING);
}
2021-10-25 10:50:08 -04:00
void Audio::ToggleMusicState() { m_music->setIsPaused(!m_music->getIsPaused()); }
void Audio::PauseEngine() { m_engine->setAllSoundsPaused(); }