[Scummvm-cvs-logs] SF.net SVN: scummvm: [27734] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Jun 27 01:40:23 CEST 2007


Revision: 27734
          http://scummvm.svn.sourceforge.net/scummvm/?rev=27734&view=rev
Author:   thebluegr
Date:     2007-06-26 16:40:22 -0700 (Tue, 26 Jun 2007)

Log Message:
-----------
Add support for compressed digital music in ITE

Modified Paths:
--------------
    scummvm/trunk/engines/saga/music.cpp
    scummvm/trunk/engines/saga/music.h

Modified: scummvm/trunk/engines/saga/music.cpp
===================================================================
--- scummvm/trunk/engines/saga/music.cpp	2007-06-26 23:38:21 UTC (rev 27733)
+++ scummvm/trunk/engines/saga/music.cpp	2007-06-26 23:40:22 UTC (rev 27734)
@@ -354,7 +354,7 @@
 void Music::play(uint32 resourceId, MusicFlags flags) {
 	Audio::AudioStream *audioStream = NULL;
 	MidiParser *parser;
-	ResourceContext *context;
+	ResourceContext *context = NULL;
 	byte *resourceData;
 	size_t resourceSize;	
 	uint32 loopStart;
@@ -413,7 +413,61 @@
 					loopStart = 4 * 18727;
 				}
 
-				audioStream = new RAWInputStream(_vm, _musicContext, resourceId - 9, flags == MUSIC_LOOP, loopStart);
+				if (!(_vm->getFeatures() & GF_COMPRESSED_SOUNDS)) {
+					// uncompressed digital music
+					audioStream = new RAWInputStream(_vm, _musicContext, resourceId - 9, flags == MUSIC_LOOP, loopStart);
+				} else {
+					// compressed digital music
+					ResourceData * resourceData;
+					Common::File *_file;
+					byte compressedHeader[10];
+					GameSoundTypes soundType;
+
+					resourceData = _vm->_resource->getResourceData(_musicContext, resourceId - 9);
+					_file = _musicContext->getFile(resourceData);
+
+					if (_vm->getMusicInfo() == NULL) {
+						error("RAWInputStream() wrong musicInfo");
+					}
+
+					_file->seek((long)resourceData->offset, SEEK_SET);
+
+					_file->read(compressedHeader, 9);
+
+					if (compressedHeader[0] == char(0)) {
+						soundType = kSoundMP3;
+					} else if (compressedHeader[0] == char(1)) {
+						soundType = kSoundOGG;
+					} else if (compressedHeader[0] == char(2)) {
+						soundType = kSoundFLAC;
+					}
+
+					switch (soundType) {
+#ifdef USE_MAD
+						case kSoundMP3:
+							debug(1, "Playing MP3 compressed digital music");
+							audioStream = Audio::makeMP3Stream(_file, resourceData->size);
+							break;
+#endif
+#ifdef USE_VORBIS
+						case kSoundOGG:
+							debug(1, "Playing OGG compressed digital music");
+							audioStream = Audio::makeVorbisStream(_file, resourceData->size);
+							break;
+#endif
+#ifdef USE_FLAC
+						case kSoundFLAC:
+							debug(1, "Playing FLAC compressed digital music");
+							audioStream = Audio::makeFlacStream(_file, resourceData->size);
+							break;
+#endif
+						default:
+							// Unknown compression
+							error("Trying to play a compressed digital music, but the compression is not known");
+							break;
+					}
+
+				}
 			}
 		}
 	}

Modified: scummvm/trunk/engines/saga/music.h
===================================================================
--- scummvm/trunk/engines/saga/music.h	2007-06-26 23:38:21 UTC (rev 27733)
+++ scummvm/trunk/engines/saga/music.h	2007-06-26 23:40:22 UTC (rev 27734)
@@ -31,6 +31,9 @@
 #include "sound/audiocd.h"
 #include "sound/mididrv.h"
 #include "sound/midiparser.h"
+#include "sound/mp3.h"
+#include "sound/vorbis.h"
+#include "sound/flac.h"
 
 namespace Saga {
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list