colobot/src/sound/oalsound/alsound.h

99 lines
3.0 KiB
C
Raw Normal View History

2012-09-20 18:38:14 +00:00
// * 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/.
// alsound.h
#pragma once
#include <map>
#include <string>
#include <AL/al.h>
2012-09-20 18:38:14 +00:00
#include "common/logger.h"
#include "sound/sound.h"
2012-09-20 18:38:14 +00:00
#include "buffer.h"
#include "channel.h"
#include "check.h"
class ALSound : public CSoundInterface
{
public:
ALSound();
~ALSound();
bool Create(bool b3D);
bool Cache(Sound, std::string);
bool GetEnable();
2012-09-20 18:38:14 +00:00
void SetSound3D(bool bMode);
bool GetSound3D();
bool GetSound3DCap();
2012-09-20 18:38:14 +00:00
void SetAudioVolume(int volume);
int GetAudioVolume();
2012-09-20 18:38:14 +00:00
void SetMusicVolume(int volume);
int GetMusicVolume();
2012-09-20 18:38:14 +00:00
void SetListener(Math::Vector eye, Math::Vector lookat);
void FrameMove(float rTime);
int Play(Sound sound, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false);
int Play(Sound sound, Math::Vector pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false);
bool FlushEnvelope(int channel);
bool AddEnvelope(int channel, float amplitude, float frequency, float time, SoundNext oper);
bool Position(int channel, Math::Vector pos);
bool Frequency(int channel, float frequency);
bool Stop(int channel);
bool StopAll();
bool MuteAll(bool bMute);
bool PlayMusic(int rank, bool bRepeat);
bool PlayMusic(std::string filename, bool bRepeat);
2012-09-20 18:38:14 +00:00
bool RestartMusic();
void SuspendMusic();
void StopMusic();
bool IsPlayingMusic();
// plugin interface
std::string PluginName();
int PluginVersion();
void InstallPlugin();
bool UninstallPlugin(std::string &);
private:
void CleanUp();
int GetPriority(Sound);
2012-09-20 18:38:14 +00:00
bool SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded);
void ComputeVolumePan2D(int channel, Math::Vector &pos);
2012-09-20 18:38:14 +00:00
bool mEnabled;
bool m3D;
float mAudioVolume;
float mMusicVolume;
ALCdevice* mDevice;
ALCcontext* mContext;
2012-09-20 18:38:14 +00:00
std::map<Sound, Buffer*> mSounds;
std::map<int, Channel*> mChannels;
Channel *mCurrentMusic;
Math::Vector mEye;
Math::Vector mLookat;
2012-09-20 18:38:14 +00:00
};