diff options
Diffstat (limited to 'engines/cge/sound.cpp')
-rw-r--r-- | engines/cge/sound.cpp | 360 |
1 files changed, 136 insertions, 224 deletions
diff --git a/engines/cge/sound.cpp b/engines/cge/sound.cpp index d40789beee..397684849a 100644 --- a/engines/cge/sound.cpp +++ b/engines/cge/sound.cpp @@ -25,292 +25,204 @@ * Copyright (c) 1994-1995 Janus B. Wisniewski and L.K. Avalon */ -#include "cge/general.h" -#include "cge/startup.h" -#include "cge/sound.h" - -#include "cge/text.h" -#include "cge/cfile.h" -#include "cge/vol.h" +#include "cge/general.h" +#include "cge/startup.h" +#include "cge/sound.h" +#include "cge/text.h" +#include "cge/cfile.h" +#include "cge/vol.h" namespace CGE { - bool Music = true; - FX Fx = 16; // must precede SOUND!! - SOUND Sound; - +bool Music = true; +FX Fx = 16; // must precede SOUND!! +SOUND Sound; -SOUND::SOUND (void) -{ - if (STARTUP::SoundOk) Open(); +SOUND::SOUND(void) { + if (STARTUP::SoundOk) + Open(); } - - -SOUND::~SOUND (void) -{ - Close(); +SOUND::~SOUND(void) { + Close(); } - - - -void SOUND::Close (void) -{ - KillMIDI(); - SNDDone(); +void SOUND::Close(void) { + KillMIDI(); + SNDDone(); } - - - -void SOUND::Open (void) -{ - SNDInit(); - Play(Fx[30000], 8); +void SOUND::Open(void) { + SNDInit(); + Play(Fx[30000], 8); } - - -void SOUND::Play (DATACK * wav, int pan, int cnt) -{ - if (wav) - { - Stop(); - smpinf.saddr = (uint8 *) &*(wav->EAddr()); - smpinf.slen = (uint16)wav->Size(); - smpinf.span = pan; - smpinf.sflag = cnt; - SNDDigiStart(&smpinf); - } +void SOUND::Play(DATACK *wav, int pan, int cnt) { + if (wav) { + Stop(); + smpinf.saddr = (uint8 *) &*(wav->EAddr()); + smpinf.slen = (uint16)wav->Size(); + smpinf.span = pan; + smpinf.sflag = cnt; + SNDDigiStart(&smpinf); + } } - - -void SOUND::Stop (void) -{ - SNDDigiStop(&smpinf); +void SOUND::Stop(void) { + SNDDigiStop(&smpinf); } -//------------------------------------------------------------------------ - - - - - - - - -FX::FX (int size) -: Emm(0L), Current(NULL) -{ - Cache = new HAN[size]; - for (Size = 0; Size < size; Size ++) - { - Cache[Size].Ref = 0; - Cache[Size].Wav = NULL; - } +FX::FX(int size) : Emm(0L), Current(NULL) { + Cache = new HAN[size]; + for (Size = 0; Size < size; Size ++) { + Cache[Size].Ref = 0; + Cache[Size].Wav = NULL; + } } - - -FX::~FX (void) -{ - Clear(); - delete[] Cache; +FX::~FX(void) { + Clear(); + delete[] Cache; } - - - -void FX::Clear (void) -{ - HAN * p, * q; - for (p = Cache, q = p+Size; p < q; p ++) - { - if (p->Ref) - { - p->Ref = 0; - delete p->Wav; - p->Wav = NULL; +void FX::Clear(void) { + HAN *p, * q; + for (p = Cache, q = p + Size; p < q; p ++) { + if (p->Ref) { + p->Ref = 0; + delete p->Wav; + p->Wav = NULL; + } } - } - Emm.Release(); - Current = NULL; + Emm.Release(); + Current = NULL; } - - - -int FX::Find (int ref) -{ - HAN * p, * q; - int i = 0; - for (p = Cache, q = p+Size; p < q; p ++) - { - if (p->Ref == ref) break; - else ++ i; - } - return i; +int FX::Find(int ref) { + HAN *p, * q; + int i = 0; + for (p = Cache, q = p + Size; p < q; p ++) { + if (p->Ref == ref) + break; + else + ++i; + } + return i; } +void FX::Preload(int ref0) { + HAN *CacheLim = Cache + Size; + int ref; - - - - - - - - -void FX::Preload (int ref0) -{ - HAN * CacheLim = Cache + Size; - int ref; - - for (ref = ref0; ref < ref0+10; ref ++) - { - static char fname[] = "FX00000.WAV"; - wtom(ref, fname+2, 10, 5); - INI_FILE file = INI_FILE(fname); - DATACK * wav = LoadWave(&file, &Emm); - if (wav) - { - HAN * p = &Cache[Find(0)]; - if (p >= CacheLim) break; - p->Wav = wav; - p->Ref = ref; + for (ref = ref0; ref < ref0 + 10; ref ++) { + static char fname[] = "FX00000.WAV"; + wtom(ref, fname + 2, 10, 5); + INI_FILE file = INI_FILE(fname); + DATACK *wav = LoadWave(&file, &Emm); + if (wav) { + HAN *p = &Cache[Find(0)]; + if (p >= CacheLim) + break; + p->Wav = wav; + p->Ref = ref; + } } - } } +DATACK *FX::Load(int idx, int ref) { + static char fname[] = "FX00000.WAV"; + wtom(ref, fname + 2, 10, 5); - - -DATACK * FX::Load (int idx, int ref) -{ - static char fname[] = "FX00000.WAV"; - wtom(ref, fname+2, 10, 5); - - INI_FILE file = INI_FILE(fname); - DATACK * wav = LoadWave(&file, &Emm); - if (wav) - { - HAN * p = &Cache[idx]; - p->Wav = wav; - p->Ref = ref; - } - return wav; + INI_FILE file = INI_FILE(fname); + DATACK *wav = LoadWave(&file, &Emm); + if (wav) { + HAN *p = &Cache[idx]; + p->Wav = wav; + p->Ref = ref; + } + return wav; } - - -DATACK * FX::operator [] (int ref) -{ - int i; - if ((i = Find(ref)) < Size) Current = Cache[i].Wav; - else - { - if ((i = Find(0)) >= Size) - { - Clear(); - i = 0; +DATACK *FX::operator [](int ref) { + int i; + if ((i = Find(ref)) < Size) + Current = Cache[i].Wav; + else { + if ((i = Find(0)) >= Size) { + Clear(); + i = 0; + } + Current = Load(i, ref); } - Current = Load(i, ref); - } - return Current; + return Current; } +static uint8 *midi = NULL; -//------------------------------------------------------------------------- - - -static uint8 * midi = NULL; - - - -void KillMIDI (void) -{ - SNDMIDIStop(); - if (midi) - { - delete[] midi; - midi = NULL; - } +void KillMIDI(void) { + SNDMIDIStop(); + if (midi) { + delete[] midi; + midi = NULL; + } } - - - -void LoadMIDI (int ref) -{ - static char fn[] = "00.MID"; - wtom(ref, fn, 10, 2); - if (INI_FILE::Exist(fn)) - { - KillMIDI(); - INI_FILE mid = fn; - if (mid.Error == 0) - { - uint16 siz = (uint16) mid.Size(); - midi = new uint8[siz]; - if (midi) - { - mid.Read(midi, siz); - if (mid.Error) KillMIDI(); - else - { - SNDMIDIStart(midi); +void LoadMIDI(int ref) { + static char fn[] = "00.MID"; + wtom(ref, fn, 10, 2); + if (INI_FILE::Exist(fn)) { + KillMIDI(); + INI_FILE mid = fn; + if (mid.Error == 0) { + uint16 siz = (uint16) mid.Size(); + midi = new uint8[siz]; + if (midi) { + mid.Read(midi, siz); + if (mid.Error) + KillMIDI(); + else + SNDMIDIStart(midi); + } } - } } - } } +EC void *Patch(int pat) { + void *p = NULL; + static char fn[] = "PATCH000.SND"; - - - -EC void * Patch (int pat) -{ - void * p = NULL; - static char fn[] = "PATCH000.SND"; - - wtom(pat, fn+5, 10, 3); - INI_FILE snd = fn; - if (! snd.Error) - { - uint16 siz = (uint16) snd.Size(); - p = (uint8 *) malloc(siz); - if (p) - { - snd.Read(p, siz); - if (snd.Error) - { - free(p); - p = NULL; - } + wtom(pat, fn + 5, 10, 3); + INI_FILE snd = fn; + if (! snd.Error) { + uint16 siz = (uint16) snd.Size(); + p = (uint8 *) malloc(siz); + if (p) { + snd.Read(p, siz); + if (snd.Error) { + free(p); + p = NULL; + } + } } - } - return p; + return p; } } // End of namespace CGE |