summaryrefslogtreecommitdiff
path: root/src/sound
diff options
context:
space:
mode:
Diffstat (limited to 'src/sound')
-rw-r--r--src/sound/sound.cpp237
-rw-r--r--src/sound/sound.h79
2 files changed, 0 insertions, 316 deletions
diff --git a/src/sound/sound.cpp b/src/sound/sound.cpp
deleted file mode 100644
index ffaf2379..00000000
--- a/src/sound/sound.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World 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 2 of the License, or
- * any later version.
- *
- * The Mana World 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 The Mana World; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#include "sound.h"
-
-#ifdef __DEBUG
- #include <iostream>
-#endif
-
-/**
- \brief install the sound engine
- \param voices overall reserved voices
- \param mod_voices voices dedicated for mod-playback
-
- NOTE:
- overall voices must not be less or equal to the
- specified amount of mod_voices!
- if mod-voices is too low some mods will not sound
- correctly since a couple of tracks are not going
- to be played along w/ the others. so missing ins-
- truments can be a result.
- 32/20 sounds realistic here.
-*/
-void Sound::init(int voices, int mod_voices) {
- if (isOk == 0) {
- throw("Sound engine cannot be initialized twice!\n");
- }
-
- bgm = NULL;
- int audio_rate = 44100;
- Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */
- int audio_channels = 2;
- int audio_buffers = 4096;
-
- if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) {
- #ifndef __DEBUG
- throw("Unable to open audio device!\n");
- #else
- throw(Mix_GetError());
- #endif
- }
-
- Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
-
- pan = 128;
- items = -1;
- isOk = 0;
-
- #ifdef __DEBUG
- std::cout << "Sound::Init() Initializing Sound\n";
- #endif
-}
-
-/**
- \brief set the volume value-range: 0-128
- \param music volume value
-
- NOTE:
- all values may only be between 0-128 where 0 means
- muted.
-*/
-void Sound::setVolume(int music) {
- if (isOk == -1)
- return;
-
- if (isMaxVol(music) == false) {
- vol_music = music;
- Mix_VolumeMusic(vol_music);
- }
-}
-
-/**
- \brief adjusts current volume
- \param amusic volume difference
-*/
-void Sound::adjustVolume(int amusic) {
- if (isOk == -1)
- return;
-
- if (!isMaxVol(vol_music + amusic)) {
- vol_music += amusic;
- Mix_VolumeMusic(vol_music);
- }
-}
-
-/**
- \brief start BGM
- \param in full path to file
- \param loop how many times should the midi be looped? (-1 = infinite)
-*/
-void Sound::startBgm(char * in, int loop) {
- if (isOk == -1)
- return;
-
- if (bgm != NULL) {
- stopBgm();
- }
-
- bgm = Mix_LoadMUS(in);
- Mix_PlayMusic(bgm, loop);
- #ifdef __DEBUG
- std::cout << "Sound::startBgm() Playing \"" << in << "\" " << loop << " times\n";
- #endif
-}
-
-/**
- \brief stop all currently running BGM tracks
-
- NOTE:
- you need to stop all playback when you want to
- switch from mod to midi. playing a new track is
- usually simple as calling StartMIDI() or StartMOD() again.
- passing NULL to the playing functions only means to make
- playback stop.
-*/
-void Sound::stopBgm() {
- if (isOk == -1) {
- return;
- }
-
- #ifdef __DEBUG
- std::cout << "Sound::stopBgm()\n";
- #endif
-
- if (bgm != NULL) {
- Mix_HaltMusic();
- Mix_FreeMusic(bgm);
- bgm = NULL;
- }
-}
-
-/**
- \brief preloads a sound-item into buffer
- \param fpath full path to file
- \param type type of item (SOUND_MOD, SOUND_MID, SOUND_SFX)
-
- NOTE:
- please make sure that the object is not loaded more
- than once since the function will not run any checks
- on its own!
-
- the return value should be kept as a reference to the
- object loaded. if not it is practicaly lost.
-*/
-SOUND_SID Sound::loadItem(char *fpath) {
- #ifdef __DEBUG
- std::cout << "Sound::loadItem() precaching \"" << fpath << "\"\n";
- #endif
- Mix_Chunk *newItem;
- if( (newItem = Mix_LoadWAV(fpath)) ) {
- soundpool[++items] = newItem;
- #ifdef __DEBUG
- std::cout << "Sound::loadItem() success SOUND_SID = " << items << std::endl;
- #endif
- return items;
- }
-
- return 0;
-}
-
-/**
- \brief plays an item in soundpool
- \param id id returned to the item in the soundpool
- \param volume volume the sound should be played with (possible range: 0-128)
-*/
-void Sound::startItem(SOUND_SID id, int volume) {
- if (soundpool[id]) {
- #ifdef __DEBUG
- std::cout << "Sound::startItem() playing SOUND_SID = " << id << std::endl;
- #endif
- Mix_VolumeChunk(soundpool[id], volume);
- Mix_PlayChannel(-1, soundpool[id], 0);
- }
-}
-
-/**
- \brief wipe all items off the cache
-*/
-void Sound::clearCache() {
- for(SOUND_SID i = 0; i == items; i++) {
- Mix_FreeChunk(soundpool[i]);
- soundpool[i] = NULL;
- }
-
- soundpool.clear();
- #ifdef __DEBUG
- std::cout << "Sound::clearCache() wiped all items off the cache\n";
- #endif
-}
-
-/**
- \brief deinstall all sound functionality
-
- NOTE:
- normally you won't need to call this since this is
- done by SDL when shutting itself down. but if
- you find a reason to delete the sound-engine from
- memory (e.g. garbage-collection) feel free to use
- it. :-P
-*/
-void Sound::close(void) {
- isOk = -1;
- clearCache();
- Mix_CloseAudio();
- #ifdef __DEBUG
- std::cout << "Sound::close() shutting down Sound\n";
- #endif
-}
-
-/**
- \brief checks if value equals min-/maximum volume and returns
- true if that's the case.
-*/
-bool Sound::isMaxVol(int vol) {
- if (vol > 0 && vol < 128) return false;
- else return true;
-}
diff --git a/src/sound/sound.h b/src/sound/sound.h
deleted file mode 100644
index 6209c13e..00000000
--- a/src/sound/sound.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World 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 2 of the License, or
- * any later version.
- *
- * The Mana World 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 The Mana World; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#ifndef _TMW_SOUND_H
-#define _TMW_SOUND_H
-
-#include <SDL.h>
-#include <SDL_mixer.h>
-#include <map>
-#include <string>
-#include <fstream>
-
-typedef short SOUND_SID ;
-
-/**
- * Sound engine
- *
- * \ingroup CORE
- */
-class Sound {
- public:
- void init(int, int);
- void close();
-
- void startBgm(char *, int);
- void stopBgm();
-
- void setVolume(int);
- void adjustVolume(int);
-
- SOUND_SID loadItem(char *);
- void startItem(SOUND_SID, int);
-
- void clearCache();
-
- Sound() {isOk=-1;}
-
- /** if allegro is shut down or object is deleted any BGM is
- stopped and SFX run out */
- ~Sound() {stopBgm(); close();};
- private:
- /** initial value is -1 which means error or noninitialzed.
- you can only play sounds and bgm if this is 0.
- that should be the case after calling Init() successfully */
- int isOk;
-
- int pan;
- int vol_music;
-
- Mix_Music *bgm;
-
- /** list of preloaded sound data / items */
- std::map<int, Mix_Chunk*> soundpool;
- SOUND_SID items;
-
- bool isMaxVol(int);
-};
-
-#endif