#include #include #include #include "CSound.h" using namespace WallpaperEngine::Render::Objects; CSound::CSound (CScene* scene, Core::Objects::CSound* sound) : CObject (scene, Type, sound), m_sound (sound) { this->setAutomaticCulling (irr::scene::EAC_OFF); this->m_boundingBox = irr::core::aabbox3d(0, 0, 0, 0, 0, 0); this->load (); this->play (); } void CSound::load () { if (SDL_WasInit (SDL_INIT_AUDIO) != SDL_INIT_AUDIO) { return; } auto cur = this->m_sound->getSounds ().begin (); auto end = this->m_sound->getSounds ().end (); for (; cur != end; cur ++) { SDL_RWops* sdlRwops = nullptr; Mix_Music* music = nullptr; irr::io::IReadFile* readfile = this->getScene ()->getContext ()->getDevice ()->getFileSystem ()->createAndOpenFile ((*cur).c_str ()); int filesize = readfile->getSize (); char* filebuffer = new char [filesize]; readfile->read (filebuffer, filesize); sdlRwops = SDL_RWFromConstMem (filebuffer, filesize); music = Mix_LoadMUS_RW (sdlRwops); readfile->drop (); if (music == nullptr) { this->getScene ()->getContext ()->getDevice ()->getLogger ()->log ( "cannot load audio", Mix_GetError (), irr::ELL_ERROR ); continue; } this->m_bufferReader.push_back (sdlRwops); this->m_soundBuffer.push_back (filebuffer); this->m_sdl.push_back (music); } } void CSound::play () { if (SDL_WasInit (SDL_INIT_AUDIO) != SDL_INIT_AUDIO) { return; } auto mixcur = this->m_sdl.begin (); auto mixend = this->m_sdl.end (); for (; mixcur != mixend; mixcur ++) { if (Mix_PlayMusic ((*mixcur), -1) == -1) { this->getScene ()->getContext ()->getDevice ()->getLogger ()->log ( "cannot play audio", Mix_GetError (), irr::ELL_ERROR ); } } } void CSound::render () { } const irr::core::aabbox3d& CSound::getBoundingBox() const { return this->m_boundingBox; } const std::string CSound::Type = "sound";