#pragma once #include namespace audio { // Enumeració per a representar el estat de un canal de sò enum channel_state { CHANNEL_INVALID, CHANNEL_FREE, CHANNEL_PLAYING, CHANNEL_PAUSED }; // Enumeració per a representar el estat de la música enum music_state { MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED, MUSIC_STOPPED }; // Estructures per a gestionar música i só struct sound; /// @brief Inicialitza el sistema de só void init(); /// @brief Tanca el sistema de só void quit(); /// @brief Carrega un arxiu de música en format OGG /// @param filename nom de l'arxiu /// @return true si tot be, false si ha fallat const bool loadMusic(const std::string filename); /// @brief Comença a reproduïr la música en questió /// @param loop quants bucles farà (-1=infinit, 0=no repeteix, 1=repeteix 1 vegada...) void playMusic(const int loop = -1); /// @brief Pausa la música que està sonant ara void pauseMusic(); /// @brief Continua la música pausada void resumeMusic(); /// @brief Para la música que estava sonant void stopMusic(); /// @brief Para la música que estava sonant fent un fade void fadeoutMusic(); /// @brief Obté el estat actual de la música /// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED) const music_state getMusicState(); /// @brief Obté el nom de l'arxiu de música actual /// @return el nom de l'arxiu std::string whichMusic(); /// @brief Carrega un só des d'un arxiu WAV /// @param filename nom de l'arxiu /// @return un punter al só const sound *loadSound(const std::string filename); /// @brief Comença a reproduïr el só especificat /// @param snd punter al só a reproduïr /// @param loop si es fa bucle (-1=infinit, 0=no repeteix, 1=repeteix 1 vegada...) /// @return número del canal en que està sonant el só const int playSound(sound *snd, const int loop = 0); /// @brief Pausa un canal en el que s'estava reproduïnt un só /// @param channel número del canal a pausar void pauseChannel(const int channel); /// @brief Continua un canal pausat /// @param channel número del canal pausat void resumeChannel(const int channel); /// @brief Para un canal que estava reproduïnt un só /// @param channel número del canal a parar void stopChannel(const int channel); /// @brief Obté l'estat d'un canal /// @param channel canal del que es vol obtindre l'estat /// @return estat del canal (CHANNEL_INVALID, CHANNEL_FREE, CHANNEL_PLAYING o CHANNEL_PAUSED) const channel_state getChannelState(const int channel); /// @brief Allibera un só /// @param snd punter al só void deleteSound(sound *snd); /// @brief Estableix el volum general /// @param volume valor a establir com a volum (128 màxim) /// @return el volum anterior const int setVolume(int volume); }