/* * Copyright 2010 OpenXcom Developers. * * This file is part of OpenXcom. * * OpenXcom 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. * * OpenXcom 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 OpenXcom. If not, see . */ #include "Sound.h" #include #include "SDL.h" #include "Exception.h" namespace OpenXcom { /** * Initializes a new sound effect. */ Sound::Sound() : _sound(0) { } /** * Deletes the loaded sound content. */ Sound::~Sound() { Mix_FreeChunk(_sound); } /** * Loads a sound file from a specified filename. * @param filename Filename of the sound file. */ void Sound::load(const std::string &filename) { _sound = Mix_LoadWAV(filename.c_str()); if (_sound == 0) { throw Exception(Mix_GetError()); } } /** * Loads a sound file from a specified memory chunk. * @param data Pointer to the sound file in memory * @param size Size of the sound file in bytes. */ void Sound::load(const void *data, unsigned int size) { SDL_RWops *rw = SDL_RWFromConstMem(data, size); _sound = Mix_LoadWAV_RW(rw, 1); if (_sound == 0) { throw Exception(Mix_GetError()); } } /** * Plays the contained sound effect. */ void Sound::play() const { if (_sound != 0 && Mix_PlayChannel(-1, _sound, 0) == -1) { std::cerr << Mix_GetError() << std::endl; } } }