mirror of
https://github.com/glest/glest-source.git
synced 2025-08-10 18:34:05 +02:00
- added error checking and allow the game to continue if we cannot init the sound system
- persist error messagebox between program states
This commit is contained in:
135
source/shared_lib/include/sound/ds8/sound_player_ds8.h
Normal file
135
source/shared_lib/include/sound/ds8/sound_player_ds8.h
Normal file
@@ -0,0 +1,135 @@
|
||||
// ==============================================================
|
||||
// This file is part of Glest Shared Library (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Martio Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#ifndef _SHARED_SOUND_SOUNDPLAYERDS8_H_
|
||||
#define _SHARED_SOUND_SOUNDPLAYERDS8_H_
|
||||
|
||||
#include "sound_player.h"
|
||||
#include "platform_util.h"
|
||||
|
||||
#include <dsound.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
using std::vector;
|
||||
|
||||
namespace Shared{ namespace Sound{ namespace Ds8{
|
||||
|
||||
// =====================================================
|
||||
// class SoundBuffer
|
||||
// =====================================================
|
||||
|
||||
class SoundBuffer{
|
||||
protected:
|
||||
IDirectSoundBuffer8 *dsBuffer;
|
||||
Sound *sound;
|
||||
DWORD size;
|
||||
|
||||
public:
|
||||
SoundBuffer();
|
||||
virtual ~SoundBuffer(){};
|
||||
virtual void end()=0;
|
||||
|
||||
IDirectSoundBuffer8 *getDsBuffer() const {return dsBuffer;}
|
||||
Sound *getSound() const {return sound;}
|
||||
|
||||
void setDsBuffer(IDirectSoundBuffer8 *dsBuffer) {this->dsBuffer= dsBuffer;}
|
||||
void setSound(IDirectSound8 *dsObject, Sound *sound) {this->sound= sound;}
|
||||
|
||||
bool isFree();
|
||||
bool isReady();
|
||||
|
||||
protected:
|
||||
void createDsBuffer(IDirectSound8 *dsObject);
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
// class StaticSoundBuffer
|
||||
// =====================================================
|
||||
|
||||
class StaticSoundBuffer: public SoundBuffer{
|
||||
public:
|
||||
StaticSound *getStaticSound() const {return static_cast<StaticSound*>(sound);}
|
||||
void init(IDirectSound8 *dsObject, Sound *sound);
|
||||
void end();
|
||||
void play();
|
||||
private:
|
||||
void fillDsBuffer();
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
// class StrSoundBuffer
|
||||
// =====================================================
|
||||
|
||||
class StrSoundBuffer: public SoundBuffer{
|
||||
private:
|
||||
enum State{sFree, sFadingOn, sPlaying, sFadingOff, sStopped};
|
||||
|
||||
private:
|
||||
DWORD lastPlayCursor;
|
||||
State state;
|
||||
Chrono chrono; //delay-fade chrono
|
||||
int64 fade; //fade on fade off delay
|
||||
|
||||
public:
|
||||
StrSoundBuffer();
|
||||
StrSound *getStrSound() const {return static_cast<StrSound*>(sound);}
|
||||
|
||||
void init(IDirectSound8 *dsObject, Sound *sound, uint32 strBufferSize);
|
||||
void end();
|
||||
void play(int64 fadeOn);
|
||||
void update();
|
||||
void stop(int64 fadeOff);
|
||||
|
||||
|
||||
private:
|
||||
void fillDsBuffer();
|
||||
void refreshDsBuffer();
|
||||
void readChunk(void *writePointer, uint32 size);
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
// class SoundPlayerDs8
|
||||
//
|
||||
/// SoundPlayer implementation using Direct Sound 8
|
||||
// =====================================================
|
||||
|
||||
class SoundPlayerDs8: public SoundPlayer{
|
||||
private:
|
||||
IDirectSound8 *dsObject;
|
||||
vector<StaticSoundBuffer> staticSoundBuffers;
|
||||
vector<StrSoundBuffer> strSoundBuffers;
|
||||
SoundPlayerParams params;
|
||||
|
||||
public:
|
||||
SoundPlayerDs8();
|
||||
virtual bool init(const SoundPlayerParams *params);
|
||||
virtual void end();
|
||||
virtual void play(StaticSound *staticSound);
|
||||
virtual void play(StrSound *strSound, int64 fadeOn=0);
|
||||
virtual void stop(StrSound *strSound, int64 fadeOff=0);
|
||||
virtual void stopAllSounds();
|
||||
virtual void updateStreams(); //updates str buffers if needed
|
||||
|
||||
private:
|
||||
bool findStaticBuffer(Sound *sound, int *bufferIndex);
|
||||
bool findStrBuffer(Sound *sound, int *bufferIndex);
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
// Misc
|
||||
// =====================================================
|
||||
|
||||
long dsVolume(float floatVolume);
|
||||
|
||||
}}}//end namespace
|
||||
|
||||
#endif
|
@@ -91,7 +91,7 @@ class SoundPlayerOpenAL : public SoundPlayer {
|
||||
public:
|
||||
SoundPlayerOpenAL();
|
||||
virtual ~SoundPlayerOpenAL();
|
||||
virtual void init(const SoundPlayerParams *params);
|
||||
virtual bool init(const SoundPlayerParams *params);
|
||||
virtual void end();
|
||||
virtual void play(StaticSound *staticSound);
|
||||
virtual void play(StrSound *strSound, int64 fadeOn=0);
|
||||
|
42
source/shared_lib/include/sound/sound_interface.h
Normal file
42
source/shared_lib/include/sound/sound_interface.h
Normal file
@@ -0,0 +1,42 @@
|
||||
// ==============================================================
|
||||
// This file is part of Glest Shared Library (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Martio Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#ifndef _SHARED_SOUND_SOUNDINTERFACE_H_
|
||||
#define _SHARED_SOUND_SOUNDINTERFACE_H_
|
||||
|
||||
#include "sound_factory.h"
|
||||
|
||||
namespace Shared{ namespace Sound{
|
||||
|
||||
// =====================================================
|
||||
// class SoundInterface
|
||||
// =====================================================
|
||||
|
||||
class SoundInterface{
|
||||
private:
|
||||
SoundFactory *soundFactory;
|
||||
|
||||
private:
|
||||
SoundInterface() {}
|
||||
SoundInterface(SoundInterface &);
|
||||
void operator=(SoundInterface &);
|
||||
|
||||
public:
|
||||
static SoundInterface &getInstance();
|
||||
|
||||
void setFactory(SoundFactory *soundFactory);
|
||||
|
||||
SoundPlayer *newSoundPlayer();
|
||||
};
|
||||
|
||||
}}//end namespace
|
||||
|
||||
#endif
|
63
source/shared_lib/include/sound/sound_player.h
Normal file
63
source/shared_lib/include/sound/sound_player.h
Normal file
@@ -0,0 +1,63 @@
|
||||
// ==============================================================
|
||||
// This file is part of Glest Shared Library (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Martio Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#ifndef _SHARED_SOUND_SOUNDPLAYER_H_
|
||||
#define _SHARED_SOUND_SOUNDPLAYER_H_
|
||||
|
||||
#include "sound.h"
|
||||
#include "types.h"
|
||||
|
||||
using Shared::Platform::uint32;
|
||||
|
||||
namespace Shared{ namespace Sound{
|
||||
|
||||
// =====================================================
|
||||
// class SoundPlayerParams
|
||||
// =====================================================
|
||||
|
||||
class SoundPlayerParams{
|
||||
public:
|
||||
uint32 strBufferSize;
|
||||
uint32 strBufferCount;
|
||||
uint32 staticBufferCount;
|
||||
|
||||
SoundPlayerParams();
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
// class SoundPlayer
|
||||
//
|
||||
// Interface that every SoundPlayer will implement
|
||||
// =====================================================
|
||||
|
||||
class SoundPlayer{
|
||||
protected:
|
||||
|
||||
bool initOk;
|
||||
|
||||
public:
|
||||
virtual ~SoundPlayer()
|
||||
{
|
||||
initOk = false;
|
||||
};
|
||||
virtual bool init(const SoundPlayerParams *params)= 0;
|
||||
virtual void end()= 0;
|
||||
virtual void play(StaticSound *staticSound)= 0;
|
||||
virtual void play(StrSound *strSound, int64 fadeOn=0)= 0; //delay and fade in miliseconds
|
||||
virtual void stop(StrSound *strSound, int64 fadeOff=0)= 0;
|
||||
virtual void stopAllSounds()= 0;
|
||||
virtual void updateStreams()= 0;
|
||||
virtual bool wasInitOk() const { return initOk; }
|
||||
};
|
||||
|
||||
}}//end namespace
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user