OpenGTA/util/sound_device.cpp

77 lines
2.8 KiB
C++
Raw Permalink Normal View History

2015-12-03 00:37:37 +00:00
/************************************************************************
* Copyright (c) 2005-2007 tok@openlinux.org.uk *
* *
* This software is provided as-is, without any express or implied *
* warranty. In no event will the authors be held liable for any *
* damages arising from the use of this software. *
* *
* Permission is granted to anyone to use this software for any purpose, *
* including commercial applications, and to alter it and redistribute *
* it freely, subject to the following restrictions: *
* *
* 1. The origin of this software must not be misrepresented; you must *
* not claim that you wrote the original software. If you use this *
* software in a product, an acknowledgment in the product documentation *
* would be appreciated but is not required. *
* *
* 2. Altered source versions must be plainly marked as such, and must *
* not be misrepresented as being the original software. *
* *
* 3. This notice may not be removed or altered from any source *
* distribution. *
************************************************************************/
#ifdef WITH_SOUND
2015-12-03 00:37:02 +00:00
#include <SDL_sound.h>
#include <SDL_mixer.h>
#include "sound_device.h"
#include "m_exceptions.h"
#include "log.h"
namespace Audio {
SoundDevice::SoundDevice() {
memset(cardName, 0, sizeof(cardName));
rate = 44100;
channels = 2;
bufSize = 4096;
format = AUDIO_S16;
status = CLOSED;
}
SoundDevice::~SoundDevice() {
close();
}
void SoundDevice::close() {
if (!status)
return;
2015-12-03 00:37:37 +00:00
Mix_HaltMusic();
2015-12-03 00:37:02 +00:00
Mix_CloseAudio();
status = CLOSED;
}
void SoundDevice::open() {
if (status)
close();
if (Mix_OpenAudio(rate, format, channels, bufSize))
throw E_NOTSUPPORTED(SDL_GetError());
SDL_AudioDriverName (cardName, sizeof (cardName));
if (!Mix_QuerySpec(&rate, &format, &channels))
throw E_NOTSUPPORTED(SDL_GetError());
2015-12-03 00:37:37 +00:00
INFO <<
"Sound-device [" << cardName << "], rate " << rate << " Hz, " <<
(format & 0xff) << " bit, " << std::endl << " " <<
channels << " channels, " << bufSize << " buffer size" << std::endl;
2015-12-03 00:37:02 +00:00
status = OPEN;
}
void SoundDevice::open(int r, Uint16 f, int c, int bs) {
rate = r;
format = f;
channels = c;
bufSize = bs;
open();
}
}
2015-12-03 00:37:37 +00:00
#endif