323 lines
9.5 KiB
C++
323 lines
9.5 KiB
C++
// * This file is part of the COLOBOT source code
|
|
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
|
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
|
|
// *
|
|
// * This program is free software: you can redistribute it and/or modify
|
|
// * it under the terms of the GNU General Public License as published by
|
|
// * the Free Software Foundation, either version 3 of the License, or
|
|
// * (at your option) any later version.
|
|
// *
|
|
// * This program is distributed in the hope that it will be useful,
|
|
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// * GNU General Public License for more details.
|
|
// *
|
|
// * You should have received a copy of the GNU General Public License
|
|
// * along with this program. If not, see http://www.gnu.org/licenses/.
|
|
|
|
// sound.h
|
|
|
|
/**
|
|
* @file sound/sound.h
|
|
* @brief Sound plugin interface
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <math/vector.h>
|
|
|
|
#include <plugins/plugininterface.h>
|
|
|
|
#include <string>
|
|
|
|
|
|
/*!
|
|
* Maximum possible audio volume
|
|
*/
|
|
#define MAXVOLUME 100
|
|
|
|
|
|
/**
|
|
* \public
|
|
* \enum Sound sound/sound.h
|
|
* \brief Sound enum representing sound file
|
|
**/
|
|
enum Sound
|
|
{
|
|
SOUND_CLICK = 0,
|
|
SOUND_BOUM = 1,
|
|
SOUND_EXPLO = 2,
|
|
SOUND_FLYh = 3, /*!< human */
|
|
SOUND_FLY = 4,
|
|
SOUND_STEPs = 5, /*!< smooth */
|
|
SOUND_MOTORw = 6, /*!< wheel */
|
|
SOUND_MOTORt = 7, /*!< tank */
|
|
SOUND_MOTORr = 8, /*!< roller */
|
|
SOUND_ERROR = 9,
|
|
SOUND_CONVERT = 10,
|
|
SOUND_ENERGY = 11,
|
|
SOUND_PLOUF = 12,
|
|
SOUND_BLUP = 13,
|
|
SOUND_WARNING = 14,
|
|
SOUND_DERRICK = 15,
|
|
SOUND_LABO = 16,
|
|
SOUND_STATION = 17,
|
|
SOUND_REPAIR = 18,
|
|
SOUND_RESEARCH = 19,
|
|
SOUND_INSECTs = 20, /*!< spider */
|
|
SOUND_BURN = 21,
|
|
SOUND_TZOING = 22,
|
|
SOUND_GGG = 23,
|
|
SOUND_MANIP = 24,
|
|
SOUND_FIRE = 25, /*!< shooting with fireball */
|
|
SOUND_HUMAN1 = 26, /*!< breathing */
|
|
SOUND_STEPw = 27, /*!< water */
|
|
SOUND_SWIM = 28,
|
|
SOUND_RADAR = 29,
|
|
SOUND_BUILD = 30,
|
|
SOUND_ALARM = 31, /*!< energy alarm */
|
|
SOUND_SLIDE = 32,
|
|
SOUND_EXPLOi = 33, /*!< insect */
|
|
SOUND_INSECTa = 34, /*!< ant */
|
|
SOUND_INSECTb = 35, /*!< bee */
|
|
SOUND_INSECTw = 36, /*!< worm */
|
|
SOUND_INSECTm = 37, /*!< mother */
|
|
SOUND_TREMBLE = 38,
|
|
SOUND_PSHHH = 39,
|
|
SOUND_NUCLEAR = 40,
|
|
SOUND_INFO = 41,
|
|
SOUND_OPEN = 42,
|
|
SOUND_CLOSE = 43,
|
|
SOUND_FACTORY = 44,
|
|
SOUND_EGG = 45,
|
|
SOUND_MOTORs = 46, /*!< submarine */
|
|
SOUND_MOTORi = 47, /*!< insect (legs) */
|
|
SOUND_SHIELD = 48,
|
|
SOUND_FIREi = 49, /*!< shooting with orgaball (insect) */
|
|
SOUND_GUNDEL = 50,
|
|
SOUND_PSHHH2 = 51, /*!< shield */
|
|
SOUND_MESSAGE = 52,
|
|
SOUND_BOUMm = 53, /*!< metal */
|
|
SOUND_BOUMv = 54, /*!< plant */
|
|
SOUND_BOUMs = 55, /*!< smooth */
|
|
SOUND_EXPLOl = 56, /*!< little */
|
|
SOUND_EXPLOlp = 57, /*!< little power */
|
|
SOUND_EXPLOp = 58, /*!< power */
|
|
SOUND_STEPh = 59, /*!< hard */
|
|
SOUND_STEPm = 60, /*!< metal */
|
|
SOUND_POWERON = 61,
|
|
SOUND_POWEROFF = 62,
|
|
SOUND_AIE = 63,
|
|
SOUND_WAYPOINT = 64,
|
|
SOUND_RECOVER = 65,
|
|
SOUND_DEADi = 66,
|
|
SOUND_JOSTLE = 67,
|
|
SOUND_GFLAT = 68,
|
|
SOUND_DEADg = 69, /*!< shooting death */
|
|
SOUND_DEADw = 70, /*!< drowning */
|
|
SOUND_FLYf = 71, /*!< reactor fail */
|
|
SOUND_ALARMt = 72, /*!< temperature alarm */
|
|
SOUND_FINDING = 73, /*!< finds a cache object */
|
|
SOUND_THUMP = 74,
|
|
SOUND_TOUCH = 75,
|
|
SOUND_BLITZ = 76,
|
|
SOUND_MUSHROOM = 77,
|
|
SOUND_FIREp = 78, /*!< shooting with phazer */
|
|
SOUND_EXPLOg1 = 79, /*!< impact gun 1 */
|
|
SOUND_EXPLOg2 = 80, /*!< impact gun 2 */
|
|
SOUND_MOTORd = 81, /*!< engine friction */
|
|
};
|
|
|
|
|
|
/**
|
|
* \public
|
|
* \enum SoundNext sound/sound.h
|
|
* \brief Enum representing operation that will be performend on a sound at given time
|
|
**/
|
|
enum SoundNext
|
|
{
|
|
SOPER_CONTINUE = 1, /*!< continue playing */
|
|
SOPER_STOP = 2, /*!< stop playing */
|
|
SOPER_LOOP = 3, /*!< start over */
|
|
};
|
|
|
|
|
|
/**
|
|
* @class CSoundInterface
|
|
*
|
|
* @brief Sound plugin interface
|
|
*
|
|
*/
|
|
class CSoundInterface : public CPluginInterface
|
|
{
|
|
public:
|
|
CSoundInterface() {
|
|
//CInstanceManager::getInstance().AddInstance(CLASS_SOUND, this);
|
|
//m_iMan->AddInstance(CLASS_SOUND, this);
|
|
};
|
|
virtual ~CSoundInterface() = 0;
|
|
|
|
/** Function to initialize sound device
|
|
* @param bool b3D - enable support for 3D sound
|
|
*/
|
|
virtual bool Create(bool b3D) = 0;
|
|
|
|
/** Function called to cache all sound effect files.
|
|
* Function calls \link CSoundInterface::Cache() \endlink for each file
|
|
*/
|
|
virtual void CacheAll() = 0;
|
|
|
|
/** Function called to cache sound effect file.
|
|
* This function is called by plugin interface for each file.
|
|
* @param Sound bSound - id of a file, will be used to identify sound files
|
|
* @param std::string bFile - file to load
|
|
* @return return true on success
|
|
*/
|
|
virtual bool Cache(Sound bSound, std::string bFile) = 0;
|
|
|
|
/** Return if plugin is enabled
|
|
* @return return true if plugin is enabled
|
|
*/
|
|
virtual bool RetEnable() = 0;
|
|
|
|
/** Change sound mode to 2D/3D
|
|
* @param bool bMode - true to enable 3D sound
|
|
*/
|
|
virtual void SetSound3D(bool bMode) = 0;
|
|
|
|
/** Return if we use 3D sound
|
|
* @return true if we have 3D sound enabled
|
|
*/
|
|
virtual bool RetSound3D() = 0;
|
|
|
|
/** Return if we have 3D sound capable card
|
|
* @return true for 3D sound support
|
|
*/
|
|
virtual bool RetSound3DCap() = 0;
|
|
|
|
/** Change global sound volume
|
|
* @param int volume - range from 0 to MAXVOLUME
|
|
*/
|
|
virtual void SetAudioVolume(int volume) = 0;
|
|
|
|
/** Return global sound volume
|
|
* @return global volume as int in range from 0 to MAXVOLUME
|
|
*/
|
|
virtual int RetAudioVolume() = 0;
|
|
|
|
/** Set music volume
|
|
* @param int volume - range from 0 to MAXVOLUME
|
|
*/
|
|
virtual void SetMusicVolume(int volume) = 0;
|
|
|
|
/** Return music volume
|
|
* @return music volume as int in range from 0 to MAXVOLUME
|
|
*/
|
|
virtual int RetMusicVolume() = 0;
|
|
|
|
/** Set listener position
|
|
* @param Math::Vector eye - position of listener
|
|
* @param Math::Vector lookat - direction listener is looking at
|
|
*/
|
|
virtual void SetListener(Math::Vector eye, Math::Vector lookat) = 0;
|
|
|
|
/** Update data each frame
|
|
* @param float rTime - time since last update
|
|
*/
|
|
virtual void FrameMove(float rTime) = 0;
|
|
|
|
/** Play specific sound
|
|
* @param Sound sound - sound to play
|
|
* @param float amplitude - change amplitude of sound before playing
|
|
* @param float frequency - change sound frequency before playing (0.5 octave down, 2.0 octave up)
|
|
* @param bool bLoop - loop sound
|
|
* @return identifier of channel that sound will be played on
|
|
*/
|
|
virtual int Play(Sound sound, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false) = 0;
|
|
|
|
/** Play specific sound
|
|
* @param Sound sound - sound to play
|
|
* @param Math:Vector pos - position of sound in space
|
|
* @param float amplitude - change amplitude of sound before playing
|
|
* @param float frequency - change sound frequency before playing (0.5 octave down, 2.0 octave up)
|
|
* @param bool bLoop - loop sound
|
|
* @return identifier of channel that sound will be played on
|
|
*/
|
|
virtual int Play(Sound sound, Math::Vector pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false) = 0;
|
|
|
|
/** Remove all operations that would be made on sound in channel.
|
|
* @param int channel - channel to work on
|
|
* @return return true on success
|
|
*/
|
|
virtual bool FlushEnvelope(int channel) = 0;
|
|
|
|
/** Add envelope to sound. Envelope is a operatino that will be performend on sound in future like changing frequency
|
|
* @param int channel - channel to work on
|
|
* @param float amplitude - change amplitude
|
|
* @param float frequency - change frequency
|
|
* @param float time - when to change (sample time)
|
|
* @param SoundNext oper - operation to perform
|
|
* @return return true on success
|
|
*/
|
|
virtual bool AddEnvelope(int channel, float amplitude, float frequency, float time, SoundNext oper) = 0;
|
|
|
|
/** Set sound position in space
|
|
* @param int channel - channel to work on
|
|
* @param Math::Vector pos - new positino of a sound
|
|
* @return return true on success
|
|
*/
|
|
virtual bool Position(int channel, Math::Vector pos) = 0;
|
|
|
|
/** Set sound frequency
|
|
* @param int channel - channel to work on
|
|
* @param float frequency - change sound frequency
|
|
* @return return true on success
|
|
*/
|
|
virtual bool Frequency(int channel, float frequency) = 0;
|
|
|
|
/** Stop playing sound
|
|
* @param int channel - channel to work on
|
|
* @return return true on success
|
|
*/
|
|
virtual bool Stop(int channel) = 0;
|
|
|
|
/** Stop playing all sounds
|
|
* @return return true on success
|
|
*/
|
|
virtual bool StopAll() = 0;
|
|
|
|
/** Mute/unmute all sounds
|
|
* @param bool bMute
|
|
* @return return true on success
|
|
*/
|
|
virtual bool MuteAll(bool bMute) = 0;
|
|
|
|
/** Start playing music
|
|
* @param int rank - track number
|
|
* @param bool bRepeat - repeat playing
|
|
* @return return true on success
|
|
*/
|
|
virtual bool PlayMusic(int rank, bool bRepeat) = 0;
|
|
|
|
/** Restart music
|
|
* @return return true on success
|
|
*/
|
|
virtual bool RestartMusic() = 0;
|
|
|
|
/** Susspend paying music
|
|
* @return return true on success
|
|
*/
|
|
virtual void SuspendMusic() = 0;
|
|
|
|
/** Stop playing music
|
|
* @return return true on success
|
|
*/
|
|
virtual void StopMusic() = 0;
|
|
|
|
/** Check if music if playing
|
|
* @return return true if music is playing
|
|
*/
|
|
virtual bool IsPlayingMusic() = 0;
|
|
};
|
|
|