AGI: Reduce audio header dependencies

This commit is contained in:
Ori Avtalion 2016-05-22 22:02:37 +03:00
parent 856a1aff18
commit 438f100d5e
8 changed files with 35 additions and 16 deletions

View file

@ -21,6 +21,7 @@
*/
#include "common/config-manager.h"
#include "audio/mixer.h"
#include "agi/agi.h"
#include "agi/graphics.h"

View file

@ -20,6 +20,7 @@
*
*/
#include "audio/mixer.h"
#include "audio/softsynth/pcspk.h"
#include "common/debug-channels.h"
@ -50,6 +51,8 @@ PreAgiEngine::PreAgiEngine(OSystem *syst, const AGIGameDescription *gameDesc) :
memset(&_game, 0, sizeof(struct AgiGame));
memset(&_debug, 0, sizeof(struct AgiDebug));
memset(&_mouse, 0, sizeof(struct Mouse));
_speakerHandle = new Audio::SoundHandle();
}
void PreAgiEngine::initialize() {
@ -74,7 +77,7 @@ void PreAgiEngine::initialize() {
_gfx->initVideo();
_speakerStream = new Audio::PCSpeaker(_mixer->getOutputRate());
_mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle,
_mixer->playStream(Audio::Mixer::kSFXSoundType, _speakerHandle,
_speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
debugC(2, kDebugLevelMain, "Detect game");
@ -89,8 +92,9 @@ void PreAgiEngine::initialize() {
}
PreAgiEngine::~PreAgiEngine() {
_mixer->stopHandle(_speakerHandle);
_mixer->stopHandle(*_speakerHandle);
delete _speakerStream;
delete _speakerHandle;
delete _picture;
delete _gfx;

View file

@ -26,6 +26,7 @@
#include "agi/agi.h"
namespace Audio {
class SoundHandle;
class PCSpeaker;
}
@ -110,7 +111,7 @@ private:
int _defaultColor;
Audio::PCSpeaker *_speakerStream;
Audio::SoundHandle _speakerHandle;
Audio::SoundHandle *_speakerHandle;
};
} // End of namespace Agi

View file

@ -29,9 +29,19 @@
#include "agi/sound_pcjr.h"
#include "common/textconsole.h"
#include "audio/mixer.h"
namespace Agi {
SoundGen::SoundGen(AgiBase *vm, Audio::Mixer *pMixer) : _vm(vm), _mixer(pMixer) {
_sampleRate = pMixer->getOutputRate();
_soundHandle = new Audio::SoundHandle();
}
SoundGen::~SoundGen() {
delete _soundHandle;
}
//
// TODO: add support for variable sampling rate in the output device
//

View file

@ -23,7 +23,10 @@
#ifndef AGI_SOUND_H
#define AGI_SOUND_H
#include "audio/mixer.h"
namespace Audio {
class Mixer;
class SoundHandle;
}
namespace Agi {
@ -71,11 +74,8 @@ class SoundMgr;
class SoundGen {
public:
SoundGen(AgiBase *vm, Audio::Mixer *pMixer) : _vm(vm), _mixer(pMixer) {
_sampleRate = pMixer->getOutputRate();
}
virtual ~SoundGen() {}
SoundGen(AgiBase *vm, Audio::Mixer *pMixer);
virtual ~SoundGen();
virtual void play(int resnum) = 0;
virtual void stop(void) = 0;
@ -83,7 +83,7 @@ public:
AgiBase *_vm;
Audio::Mixer *_mixer;
Audio::SoundHandle _soundHandle;
Audio::SoundHandle *_soundHandle;
uint32 _sampleRate;
};

View file

@ -27,6 +27,7 @@
#include "common/memstream.h"
#include "common/str-array.h"
#include "common/textconsole.h"
#include "audio/mixer.h"
#include "agi/agi.h"
#include "agi/sound_2gs.h"
@ -55,11 +56,11 @@ SoundGen2GS::SoundGen2GS(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixe
// Load instruments
_disableMidi = !loadInstruments();
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
_mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
}
SoundGen2GS::~SoundGen2GS() {
_mixer->stopHandle(_soundHandle);
_mixer->stopHandle(*_soundHandle);
delete[] _wavetable;
delete[] _out;
}

View file

@ -54,6 +54,7 @@
*
*/
#include "audio/mixer.h"
#include "agi/agi.h"
#include "agi/sound.h"
#include "agi/sound_pcjr.h"
@ -123,7 +124,7 @@ SoundGenPCJr::SoundGenPCJr(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMi
memset(_channel, 0, sizeof(_channel));
memset(_tchannel, 0, sizeof(_tchannel));
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
_mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
_v1data = NULL;
_v1size = 0;
@ -132,7 +133,7 @@ SoundGenPCJr::SoundGenPCJr(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMi
SoundGenPCJr::~SoundGenPCJr() {
free(_chanData);
_mixer->stopHandle(_soundHandle);
_mixer->stopHandle(*_soundHandle);
}
void SoundGenPCJr::play(int resnum) {

View file

@ -21,6 +21,7 @@
*/
#include "common/random.h"
#include "audio/mixer.h"
#include "agi/agi.h"
@ -92,11 +93,11 @@ SoundGenSarien::SoundGenSarien(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm,
debug(0, "Initializing sound: envelopes disabled");
}
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
_mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
}
SoundGenSarien::~SoundGenSarien() {
_mixer->stopHandle(_soundHandle);
_mixer->stopHandle(*_soundHandle);
free(_sndBuffer);
}