HUGO: Set some volume levels to get the MAME adlib emul working

svn-id: r55000
This commit is contained in:
Henry Bush 2010-12-22 09:22:14 +00:00
parent e20c902812
commit ada3c01cc1
2 changed files with 22 additions and 0 deletions

View file

@ -33,6 +33,7 @@
/* sound.c - sound effects and music support */ /* sound.c - sound effects and music support */
#include "common/system.h" #include "common/system.h"
#include "common/config-manager.h"
#include "sound/decoders/raw.h" #include "sound/decoders/raw.h"
#include "sound/audiostream.h" #include "sound/audiostream.h"
@ -68,6 +69,7 @@ void MidiPlayer::play(uint8 *stream, uint16 size) {
if (_midiData) { if (_midiData) {
memcpy(_midiData, stream, size); memcpy(_midiData, stream, size);
_mutex.lock(); _mutex.lock();
syncVolume();
_parser->loadMusic(_midiData, size); _parser->loadMusic(_midiData, size);
_parser->setTrack(0); _parser->setTrack(0);
_isLooping = true; _isLooping = true;
@ -115,6 +117,15 @@ void MidiPlayer::adjustVolume(int diff) {
setVolume(_masterVolume + diff); setVolume(_masterVolume + diff);
} }
void MidiPlayer::syncVolume() {
int volume = ConfMan.getInt("music_volume");
if (ConfMan.getBool("mute")) {
volume = -1;
}
debugC(2, kDebugMusic, "Syncing music volume to %d", volume);
setVolume(volume);
}
void MidiPlayer::setVolume(int volume) { void MidiPlayer::setVolume(int volume) {
debugC(3, kDebugMusic, "MidiPlayer::setVolume"); debugC(3, kDebugMusic, "MidiPlayer::setVolume");
_masterVolume = CLIP(volume, 0, 255); _masterVolume = CLIP(volume, 0, 255);
@ -127,6 +138,13 @@ void MidiPlayer::setVolume(int volume) {
_mutex.unlock(); _mutex.unlock();
} }
void MidiPlayer::setChannelVolume(int channel) {
int newVolume = _channelsVolume[channel] * _masterVolume / 255;
debugC(3, kDebugMusic, "Music channel %d: volume %d->%d",
channel, _channelsVolume[channel], newVolume);
_channelsTable[channel]->volume(newVolume);
}
int MidiPlayer::open() { int MidiPlayer::open() {
if (!_driver) if (!_driver)
return 255; return 255;
@ -179,6 +197,8 @@ void MidiPlayer::send(uint32 b) {
if (!_channelsTable[ch]) { if (!_channelsTable[ch]) {
_channelsTable[ch] = (ch == 9) ? _driver->getPercussionChannel() : _driver->allocateChannel(); _channelsTable[ch] = (ch == 9) ? _driver->getPercussionChannel() : _driver->allocateChannel();
if (_channelsTable[ch])
setChannelVolume(ch);
} }
if (_channelsTable[ch]) { if (_channelsTable[ch]) {
_channelsTable[ch]->send(b); _channelsTable[ch]->send(b);

View file

@ -54,7 +54,9 @@ public:
void pause(bool p); void pause(bool p);
void updateTimer(); void updateTimer();
void adjustVolume(int diff); void adjustVolume(int diff);
void setChannelVolume(int channel);
void setVolume(int volume); void setVolume(int volume);
void syncVolume();
int getVolume() const { return _masterVolume; } int getVolume() const { return _masterVolume; }
void setLooping(bool loop) { _isLooping = loop; } void setLooping(bool loop) { _isLooping = loop; }