diff options
author | whitertandrek | 2018-03-15 22:04:49 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-06-28 23:51:32 +0200 |
commit | b3c656c6ed04b14e5e6ab2c938e9df6fe9dfe191 (patch) | |
tree | 84e5eb4d8ed3055221f5c99aa70c0350e5e6d754 /engines | |
parent | 280b24965708d7db3066bad06a4115d52cfacf31 (diff) | |
download | scummvm-rg350-b3c656c6ed04b14e5e6ab2c938e9df6fe9dfe191.tar.gz scummvm-rg350-b3c656c6ed04b14e5e6ab2c938e9df6fe9dfe191.tar.bz2 scummvm-rg350-b3c656c6ed04b14e5e6ab2c938e9df6fe9dfe191.zip |
PINK: Implemented Sound Class
Diffstat (limited to 'engines')
-rw-r--r-- | engines/pink/sound.cpp | 100 | ||||
-rw-r--r-- | engines/pink/sound.h | 64 |
2 files changed, 164 insertions, 0 deletions
diff --git a/engines/pink/sound.cpp b/engines/pink/sound.cpp new file mode 100644 index 0000000000..bdc41c8c9c --- /dev/null +++ b/engines/pink/sound.cpp @@ -0,0 +1,100 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program 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 (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include <audio/audiostream.h> +#include <audio/decoders/wave.h> +#include <audio/decoders/adpcm.h> +#include "sound.h" + +namespace Pink { + +Sound::Sound(Audio::Mixer *mixer, AudioFormat format, Common::SeekableReadStream *stream) + : _mixer(mixer) +{ + load(format, stream); +} + +Sound::~Sound() { + //look for mem leak + stop(); +} + +bool Sound::isPlaying() { + return _mixer->isSoundHandleActive(_handle); + +} + +void Sound::pause() { + _mixer->pauseHandle(_handle, true); +} + +void Sound::resume() { + _mixer->pauseHandle(_handle, false); +} + +void Sound::stop() { + _mixer->stopHandle(_handle); +} + +void Sound::play(Audio::Mixer::SoundType type, int volume, bool isLoop) { + _mixer->stopHandle(_handle); + + if (isLoop) { + //bad impl? + Audio::SeekableAudioStream *seekableStream = dynamic_cast<Audio::SeekableAudioStream*>(_stream); + _stream = Audio::makeLoopingAudioStream(seekableStream, 0, 0, 0); + } + + _mixer->playStream(type, &_handle ,_stream); +} + +bool Sound::load(AudioFormat format, Common::SeekableReadStream *stream) { + //may be mem leak + + // checked vox files in hex editor and they have WAVEfmt . + // It seems strange for me + // linux file says wav and vox are + // RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 22050 Hz + + switch (format){ + case AudioFormat::kWAV: + _stream = Audio::makeWAVStream(stream, DisposeAfterUse::NO); + break; + case AudioFormat::kVOX: + //TODO + // check for last arg; nBlockAlign(1, 4 or other) + _stream = Audio::makeADPCMStream(stream, DisposeAfterUse::NO, 0, Audio::kADPCMOki, 22050, 1, 0); + break; + } + + return isLoaded(); +} + +bool Sound::isLoaded() { + return _stream != nullptr; +} + +void Sound::setBalance(int8 balance) { + _mixer->setChannelBalance(_handle, balance); +} + +} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/sound.h b/engines/pink/sound.h new file mode 100644 index 0000000000..7b60745667 --- /dev/null +++ b/engines/pink/sound.h @@ -0,0 +1,64 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program 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 (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PINK_SOUND_H +#define PINK_SOUND_H + +#include <common/stream.h> +#include <audio/mixer.h> + +namespace Pink { + +enum class AudioFormat{kWAV, kVOX}; + +/*TODO + from disasm foreground 100 %, background 80 % + dont know how to properly do it + may be use ConfMan +*/ + +class Sound { +public: + Sound(Audio::Mixer *mixer, AudioFormat format, Common::SeekableReadStream *stream); + ~Sound(); + + bool load(AudioFormat format, Common::SeekableReadStream *stream); + void play(Audio::Mixer::SoundType type, int volume, bool isLoop); + + bool isLoaded(); + bool isPlaying(); + + void pause(); + void resume(); + void stop(); + + void setBalance(int8 balance); + +private: + Audio::Mixer *_mixer; + Audio::AudioStream *_stream; + Audio::SoundHandle _handle; +}; + +} // End of namespace Pink + +#endif |