123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #include "Sounderer.h"
- Sounderer::Sounderer() : m_lastCanal(-1), m_folder("")
- {}
- Sounderer::Sounderer(std::string folder) : m_lastCanal(-1), m_folder(folder)
- {}
- Sounderer::~Sounderer()
- {
- for( m_it = m_paquet.begin(); m_it != m_paquet.end(); m_it++ )
- if (m_it->second != 0x0)
- {
- //Libération mémoire
- Mix_FreeChunk(m_it->second);
- m_it->second = 0x0;
- }
- Mix_Quit();
- }
- bool Sounderer::init()
- {
- ///SDL extend init
- SDL_InitSubSystem(SDL_INIT_AUDIO);
- Mix_Init(MIX_INIT_MOD | MIX_INIT_OGG);
- ///Implémentation des paramètres
- m_rate = 22050;
- m_format = AUDIO_S16SYS;
- m_nbChannels = 2;
- m_bufferSize = 4096;
- ///Démarrage du mixer avec les paramètres désirés
- if ( Mix_OpenAudio(m_rate, m_format, m_nbChannels, m_bufferSize) != 0 ) {
- std::cout <<"Impossible d'initialiser le système audio SDL_mixer avec les paramètres définis : "<<Mix_GetError()<< std::endl;
- return false;
- }
- ///Initialisation terminée
- return true;
- }
- bool Sounderer::preLoad(std::string nom, short extension)
- {
- /// Cherche le son dans le tableau
- m_it = m_paquet.find(nom);
- /// Si le son est déjà chargé, pas beson de le refaire
- if (m_it != m_paquet.end())
- {
- if (m_paquet[nom] == 0x0) return false;
- else return true;
- }
- /// Sinon on le charge
- else
- {
- //Définit l'extension
- std::string ext;
- if (extension == EXT_OGG) ext = ".ogg";
- else ext = ".wav";
- //Compose le source puis le charge
- std::string source(m_folder + nom + ext);
- m_paquet[nom] = Mix_LoadWAV(source.c_str());
- //Teste une erreur
- if (m_paquet[nom] == 0x0)
- {
- std::cout << "Le son " <<nom<< ".wav n'a pas pu être chargé : " << Mix_GetError() << std::endl << std::endl;
- return false;
- }
- //Attribut canal libre et réservé
- m_lastCanal++;
- m_channel[nom] = m_lastCanal;
- }
- // Fonction terminée
- return true;
- }
- bool Sounderer::play(std::string nom, int repetition)
- {
- //Capture le canal et joue le son
- if (preLoad(nom))
- m_channel[nom] = Mix_PlayChannel(m_channel[nom], m_paquet[nom], repetition);
- else return false;
- if(m_channel[nom] == -1) {
- std::cout <<"Impossible de jouer le son ''"<<nom<<"'' : "<<Mix_GetError()<< std::endl;
- return false;
- }
- //Fin
- return true;
- }
- bool Sounderer::fadePlay(std::string nom, int crescendoLenght, int repetition)
- {
- //Capture le canal et joue le son
- if (preLoad(nom))
- m_channel[nom] = Mix_FadeInChannel(m_channel[nom], m_paquet[nom], repetition, crescendoLenght);
- else return false;
- if(m_channel[nom] == -1) {
- std::cout <<"Impossible de jouer le son ''"<<nom<<"'' : "<<Mix_GetError()<< std::endl;
- return false;
- }
- //Fin
- return true;
- }
- bool Sounderer::stop(std::string nom)
- {
- if ( m_paquet.find(nom) != m_paquet.end() )
- if ( Mix_Playing(m_channel[nom]) )
- {
- Mix_HaltChannel(m_channel[nom]);
- return true;
- }
- return false;
- }
- void Sounderer::stopAll()
- {
- Mix_HaltChannel(-1);
- }
- void Sounderer::assignFolder(std::string folder)
- {
- m_folder = folder;
- }
|