diff options
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | queen/sound.cpp | 80 | ||||
| -rw-r--r-- | scumm/sound.cpp | 2 | ||||
| -rw-r--r-- | sound/mixer.cpp | 3 | ||||
| -rw-r--r-- | sound/mixer.h | 1 | 
5 files changed, 8 insertions, 80 deletions
| @@ -32,7 +32,7 @@ General    - convert said string representation back to FSNode    Of course that can be added w/o a FileManager class, too - but it might be    nice to have all of these integrated. -   +  Documentation  ============= diff --git a/queen/sound.cpp b/queen/sound.cpp index d3076ba80d..f907873246 100644 --- a/queen/sound.cpp +++ b/queen/sound.cpp @@ -32,69 +32,6 @@  namespace Queen { -#ifdef USE_VORBIS -// These are wrapper functions to allow using a File object to -// provide data to the OggVorbis_File object. - -struct file_info { -	File *file; -	int start, curr_pos; -	size_t len; -}; - -static size_t read_wrap(void *ptr, size_t size, size_t nmemb, void *datasource) { -	file_info *f = (file_info *) datasource; -	int result; - -	nmemb *= size; -	if (f->curr_pos > (int) f->len) -		nmemb = 0; -	else if (nmemb > f->len - f->curr_pos) -		nmemb = f->len - f->curr_pos; -	result = f->file->read(ptr, nmemb); -	if (result == -1) { -		f->curr_pos = f->file->pos() - f->start; -		return (size_t) -1; -	} else { -		f->curr_pos += result; -		return result / size; -	} -} - -static int seek_wrap(void *datasource, ogg_int64_t offset, int whence) { -	file_info *f = (file_info *) datasource; - -	if (whence == SEEK_SET) -		offset += f->start; -	else if (whence == SEEK_END) { -		offset += f->start + f->len; -		whence = SEEK_SET; -	} - -	f->file->seek(offset, whence); -	f->curr_pos = f->file->pos() - f->start; -	return f->curr_pos; -} - -static int close_wrap(void *datasource) { -	file_info *f = (file_info *) datasource; - -	f->file->close(); -	delete f; -	return 0; -} - -static long tell_wrap(void *datasource) { -	file_info *f = (file_info *) datasource; - -	return f->curr_pos; -} - -static ov_callbacks g_File_wrap = { -	read_wrap, seek_wrap, close_wrap, tell_wrap -}; -#endif -  Sound::Sound(SoundMixer *mixer, QueenEngine *vm) :   	_mixer(mixer), _vm(vm), _sfxToggle(true), _speechToggle(true), _musicToggle(true), _lastOverride(0), _currentSong(0), _sfxHandle(0) {  } @@ -216,21 +153,8 @@ void MP3Sound::sfxPlay(const char *name) {  #ifdef USE_VORBIS  void OGGSound::sfxPlay(const char *name) {  	waitSfxFinished();	 -	if (_vm->resource()->exists(name)) { -		OggVorbis_File *oggFile = new OggVorbis_File; -		file_info *f = new file_info; - -		f->file = _vm->resource()->giveCompressedSound(name); -		f->start = _vm->resource()->fileOffset(name); -		f->len = _vm->resource()->fileSize(name); -		f->curr_pos = 0; - -		if (ov_open_callbacks((void *)f, oggFile, NULL, 0, g_File_wrap) < 0) { -			delete oggFile; -			delete f; -		} else -			_mixer->playVorbis(&_sfxHandle, oggFile, 0, false); -	} +	if (_vm->resource()->exists(name)) +		_mixer->playVorbis(&_sfxHandle, _vm->resource()->giveCompressedSound(name), _vm->resource()->fileSize(name));  }  #endif diff --git a/scumm/sound.cpp b/scumm/sound.cpp index 9da499b67e..046f43da20 100644 --- a/scumm/sound.cpp +++ b/scumm/sound.cpp @@ -848,7 +848,7 @@ void Sound::startSfxSound(File *file, int file_size, PlayingSoundHandle *handle)  	if (file_size > 0) {  		if (_vorbis_mode) {  #ifdef USE_VORBIS -			playSfxSound_Vorbis(_scumm->_mixer, file, file_size, handle); +			_scumm->_mixer->playVorbis(handle, file, file_size);  #endif  		} else {  #ifdef USE_MAD diff --git a/sound/mixer.cpp b/sound/mixer.cpp index 6f43a4c5f9..4c3e9ca277 100644 --- a/sound/mixer.cpp +++ b/sound/mixer.cpp @@ -269,6 +269,9 @@ void SoundMixer::playMP3CDTrack(PlayingSoundHandle *handle, File *file, mad_time  #endif  #ifdef USE_VORBIS +void SoundMixer::playVorbis(PlayingSoundHandle *handle, File *file, uint32 size) { +	playSfxSound_Vorbis(this, file, size, handle); +}  void SoundMixer::playVorbis(PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool is_cd_track, byte volume, int8 pan) {  	// Create the input stream  	AudioInputStream *input = makeVorbisStream(ov_file, duration); diff --git a/sound/mixer.h b/sound/mixer.h index 1f70419c81..fa015dadcf 100644 --- a/sound/mixer.h +++ b/sound/mixer.h @@ -104,6 +104,7 @@ public:  	void playMP3CDTrack(PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume = 255, int8 pan = 0);  #endif  #ifdef USE_VORBIS +	void playVorbis(PlayingSoundHandle *handle, File *file, uint32 size);  	void playVorbis(PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool is_cd_track, byte volume = 255, int8 pan = 0);  #endif | 
