aboutsummaryrefslogtreecommitdiff
path: root/engines/chewy/sound.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2016-10-09 23:38:39 +0300
committerFilippos Karapetis2016-10-09 23:38:39 +0300
commit0a4c1eeca1ebd67cb0dcd891aba9a3c05e8e8a80 (patch)
tree833b69046bcba512007045913e94d22e11f953c1 /engines/chewy/sound.cpp
parentc1e44df357a310a6020e472881e0d1ed29c8ab37 (diff)
downloadscummvm-rg350-0a4c1eeca1ebd67cb0dcd891aba9a3c05e8e8a80.tar.gz
scummvm-rg350-0a4c1eeca1ebd67cb0dcd891aba9a3c05e8e8a80.tar.bz2
scummvm-rg350-0a4c1eeca1ebd67cb0dcd891aba9a3c05e8e8a80.zip
CHEWY: Move all sound functions into sound.*
Diffstat (limited to 'engines/chewy/sound.cpp')
-rw-r--r--engines/chewy/sound.cpp113
1 files changed, 104 insertions, 9 deletions
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index e0e84e2101..5e519f47f9 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -41,41 +41,112 @@ Sound::~Sound() {
delete _speechRes;
}
-void Sound::playSound(int num, bool loop) {
+void Sound::playSound(int num, bool loop, uint channel) {
SoundChunk *sound = _soundRes->getSound(num);
byte *data = (byte *)malloc(sound->size);
memcpy(data, sound->data, sound->size);
+ playSound(data, sound->size, loop, channel);
+
+ delete[] sound->data;
+ delete sound;
+}
+
+void Sound::playSound(byte *data, uint32 size, bool loop, uint channel, DisposeAfterUse::Flag dispose) {
Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
Audio::makeRawStream(data,
- sound->size, 22050, Audio::FLAG_UNSIGNED,
- DisposeAfterUse::YES),
+ size, 22050, Audio::FLAG_UNSIGNED,
+ dispose),
loop ? 0 : 1);
- _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, stream);
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle[channel], stream);
+}
- delete[] sound->data;
- delete sound;
+void Sound::pauseSound(uint channel) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ _mixer->pauseHandle(_soundHandle[channel], true);
+}
+
+void Sound::resumeSound(uint channel) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ _mixer->pauseHandle(_soundHandle[channel], false);
+}
+
+void Sound::stopSound(uint channel) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ _mixer->stopHandle(_soundHandle[channel]);
+}
+
+bool Sound::isSoundActive(uint channel) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ return _mixer->isSoundHandleActive(_soundHandle[channel]);
+}
+
+void Sound::setSoundVolume(uint volume) {
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, volume);
+}
+
+void Sound::setSoundChannelVolume(uint channel, uint volume) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ _mixer->setChannelVolume(_soundHandle[channel], volume);
+}
+
+void Sound::setSoundChannelBalance(uint channel, uint balance) {
+ assert(channel < MAX_SOUND_EFFECTS);
+ _mixer->setChannelBalance(_soundHandle[channel], balance);
}
void Sound::playMusic(int num, bool loop) {
uint32 musicNum = _soundRes->getChunkCount() - 1 - num;
Chunk *chunk = _soundRes->getChunk(musicNum);
byte *data = _soundRes->getChunkData(musicNum);
+
+ playMusic(data, chunk->size, loop);
+
+ delete[] data;
+ delete chunk;
+}
+
+void Sound::playMusic(byte *data, uint32 size, bool loop, DisposeAfterUse::Flag dispose) {
+ byte *modData = nullptr;
+ uint32 modSize;
// TODO: TMF music files are similar to MOD files. With the following
// incorrect implementation, the PCM parts of these files can be played
warning("The current music playing implementation is wrong");
+ modSize = size;
+ modData = (byte *)malloc(modSize);
+ memcpy(modData, data, size);
Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
- Audio::makeRawStream(data,
- chunk->size, 22050, Audio::FLAG_UNSIGNED,
- DisposeAfterUse::YES),
+ Audio::makeRawStream(modData,
+ modSize, 22050, Audio::FLAG_UNSIGNED,
+ dispose),
loop ? 0 : 1);
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, stream);
}
+void Sound::pauseMusic() {
+ _mixer->pauseHandle(_musicHandle, true);
+}
+
+void Sound::resumeMusic() {
+ _mixer->pauseHandle(_musicHandle, false);
+}
+
+void Sound::stopMusic() {
+ _mixer->stopHandle(_musicHandle);
+}
+
+bool Sound::isMusicActive() {
+ return _mixer->isSoundHandleActive(_musicHandle);
+}
+
+void Sound::setMusicVolume(uint volume) {
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, volume);
+}
+
void Sound::playSpeech(int num) {
SoundChunk *sound = _speechRes->getSound(num);
byte *data = (byte *)malloc(sound->size);
@@ -93,4 +164,28 @@ void Sound::playSpeech(int num) {
delete sound;
}
+void Sound::pauseSpeech() {
+ _mixer->pauseHandle(_speechHandle, true);
+}
+
+void Sound::resumeSpeech() {
+ _mixer->pauseHandle(_speechHandle, false);
+}
+
+void Sound::stopSpeech() {
+ _mixer->stopHandle(_speechHandle);
+}
+
+bool Sound::isSpeechActive() {
+ return _mixer->isSoundHandleActive(_speechHandle);
+}
+
+void Sound::setSpeechVolume(uint volume) {
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, volume);
+}
+
+void Sound::stopAll() {
+ _mixer->stopAll();
+}
+
} // End of namespace Chewy