[Scummvm-cvs-logs] CVS: scummvm/saga sndres.cpp,1.30,1.31 sndres.h,1.15,1.16

Max Horn fingolfin at users.sourceforge.net
Sat Dec 11 15:37:06 CET 2004


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23233

Modified Files:
	sndres.cpp sndres.h 
Log Message:
use loadVOCFromStream

Index: sndres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sndres.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- sndres.cpp	26 Nov 2004 13:28:00 -0000	1.30
+++ sndres.cpp	11 Dec 2004 23:36:16 -0000	1.31
@@ -33,6 +33,8 @@
 
 #include "common/file.h"
 
+#include "sound/voc.h"
+
 namespace Saga {
 
 SndRes::SndRes(SagaEngine *vm) : _vm(vm) {
@@ -173,88 +175,26 @@
 }
 
 int SndRes::loadVocSound(byte *snd_res, size_t snd_res_len, SOUNDBUFFER *snd_buf_i) {
-	VOC_HEADER_BLOCK voc_hb;
-	VOC_GENBLOCK voc_gb;
-	VOC_BLOCK1 voc_b1;
-	byte *data;
-
-	long byte_rate;
-	size_t i;
-
-	if (snd_res_len < VOC_HEADER_BLOCK_LEN) {
-		return FAILURE;
-	}
-
 	MemoryReadStream readS(snd_res, snd_res_len);
+	byte *data;
+	int rate;
+	int len;
 
-	for (i = 0; i < VOC_FILE_DESC_LEN; i++)
-		voc_hb.ft_desc[i] = readS.readByte();
-
-	if (memcmp(voc_hb.ft_desc, VOC_FILE_DESC, VOC_FILE_DESC_LEN) != 0) {
-		/* Voc file desc string not found */
-		return FAILURE;
-	}
-
-	voc_hb.db_offset = readS.readUint16LE();
-	voc_hb.voc_version = readS.readUint16LE();
-	voc_hb.voc_fileid = readS.readUint16LE();
+	data = loadVOCFromStream(readS, len, rate);
 
-	if ((int32)(snd_res_len - readS.pos()) < (int32)(voc_hb.db_offset + VOC_GENBLOCK_LEN)) {
+	if (!data) {
 		return FAILURE;
 	}
 
-	while (readS.pos() < voc_hb.db_offset)
-		readS.readByte();
-
-	for (;;) {
-		/* Read generic block header */
-		if (snd_res_len - readS.pos() < VOC_GENBLOCK_LEN) {
-			return FAILURE;
-		}
-
-		voc_gb.block_id = readS.readByte();
-		if (voc_gb.block_id == 0) {
-			return FAILURE;
-		}
-
-		voc_gb.block_len = readS.readUint24LE();
-
-		/* Process block */
-		switch (voc_gb.block_id) {
-		case 1:	/* Sound data block */
-			voc_b1.time_constant = readS.readByte();
-			voc_b1.pack_method = readS.readByte();
-
-			if (voc_b1.pack_method != 0) {
-				debug(0, "Packed VOC files not supported");
-				return FAILURE;
-			}
-
-			byte_rate = VOC_TIME_BASE / (VOC_TIME_CBASE - (voc_b1.time_constant << 8));
-
-			snd_buf_i->s_stereo = 0;
-			snd_buf_i->s_samplebits = 8;
-			snd_buf_i->s_freq = byte_rate;
-			snd_buf_i->s_buf_len = snd_res_len - readS.pos() - 1;	/* -1 for end block */
-
-			data = (byte *)malloc(snd_buf_i->s_buf_len);
-			if (!data) {
-				return FAILURE;
-			}
-
-			readS.read(data, snd_buf_i->s_buf_len);
-
-			snd_buf_i->s_buf = data;
-			snd_buf_i->s_signed = 0;
-			return SUCCESS;
-		default:
-			for (i = 0; i < voc_gb.block_len; i++)
-				readS.readByte();
-			break;
-		}
-	}
-
+	snd_buf_i->s_freq = rate;
+	snd_buf_i->s_samplebits = 8;
+	snd_buf_i->s_stereo = 0;
+	snd_buf_i->s_signed = 0;
+	snd_buf_i->s_buf = data;
+	snd_buf_i->s_buf_len = len;
+	
 	return SUCCESS;
+
 }
 
 int SndRes::loadWavSound(byte *snd_res, size_t snd_res_len, SOUNDBUFFER *snd_buf_i) {

Index: sndres.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sndres.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- sndres.h	26 Nov 2004 13:28:00 -0000	1.15
+++ sndres.h	11 Dec 2004 23:36:17 -0000	1.16
@@ -32,35 +32,6 @@
 
 namespace Saga {
 
-#define VOC_TIME_BASE  256000000L
-#define VOC_TIME_CBASE 65536L
-
-#define VOC_FILE_DESC_LEN 20
-#define VOC_FILE_DESC "Creative Voice File\x1A"
-
-struct VOC_HEADER_BLOCK {
-	char ft_desc[20]; // BYTE [20]
-	uint16 db_offset; // WORD
-	uint16 voc_version;// WORD
-	uint16 voc_fileid; // WORD
-};
-
-#define VOC_HEADER_BLOCK_LEN 26
-
-struct VOC_GENBLOCK {
-	int block_id;		// BYTE
-	uint32 block_len;	// BYTE[3]
-};
-
-#define VOC_GENBLOCK_LEN 4
-
-struct VOC_BLOCK1 {
-	int block_id; // BYTE
-	uint32 block_len; // BYTE[3]
-	uint16 time_constant; // BYTE
-	int pack_method; // BYTE
-};
-
 class SndRes {
 public:
 





More information about the Scummvm-git-logs mailing list