[Scummvm-cvs-logs] CVS: tools extract.c,1.13,1.14

Travis Howell kirben at users.sourceforge.net
Sun Oct 27 03:41:04 CET 2002


Update of /cvsroot/scummvm/tools
In directory usw-pr-cvs1:/tmp/cvs-serv10570

Modified Files:
	extract.c 
Log Message:

Add monster.sog support, patch #629362 


Index: extract.c
===================================================================
RCS file: /cvsroot/scummvm/tools/extract.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- extract.c	9 Sep 2002 05:46:02 -0000	1.13
+++ extract.c	27 Oct 2002 11:40:54 -0000	1.14
@@ -15,6 +15,9 @@
 #define algqualDef 2
 #define vbrqualDef 4
 
+/* The default for oggenc invocation is to use the --quality option only */
+#define oggqualDef 3
+
 FILE *input, *output_idx, *output_snd;
 
 char fbuf_temp[1024];
@@ -42,7 +45,17 @@
 	unsigned int vbrqual;
 	unsigned int silent;
 } encparms = { minBitrDef, maxBitrDef, abrDef, vbrDef, algqualDef, vbrqualDef, 0 };
-    
+
+struct oggencparams {
+	int nominalBitr;
+	int minBitr;
+	int maxBitr;
+	int quality;
+	int silent;
+} oggparms = { -1, -1, -1, oggqualDef, 0 };
+
+int oggmode = 0;
+
 void put_int(unsigned int val);
 
 void end_of_file(void)
@@ -55,7 +68,7 @@
 	fclose(output_snd);
 	fclose(output_idx);
 
-	output_idx = fopen("monster.so3", "wb");
+	output_idx = fopen(oggmode ? "monster.sog" : "monster.so3", "wb");
 	put_int(idx_size);
 
 	in = fopen("monster.idx", "rb");
@@ -63,7 +76,7 @@
 		fwrite(buf, 1, size, output_idx);
 	}
 	fclose(in);
-	in = fopen("monster.mp3", "rb");
+	in = fopen("monster.dat", "rb");
 	while ((size = fread(buf, 1, 2048, in)) > 0) {
 		fwrite(buf, 1, size, output_idx);
 	}
@@ -73,9 +86,9 @@
 
 	/* And some clean-up :-) */
 	unlink("monster.idx");
-	unlink("monster.mp3");
+	unlink("monster.dat");
 	unlink("tempfile.raw");
-	unlink("tempfile.mp3");
+	unlink(oggmode ? "tempfile.ogg" : "tempfile.mp3");
 	
 	exit(-1);
 }
@@ -197,7 +210,7 @@
 			exit(-1);
 		}
 		sprintf(rawname, "tempfile.raw");
-		sprintf(mp3name, "tempfile.mp3");
+		sprintf(mp3name, oggmode ? "tempfile.ogg" : "tempfile.mp3");
 		
 		f = fopen(rawname, "wb");
 		length -= 2;
@@ -213,18 +226,43 @@
 			fwrite(fbuf_o, 1, 2 * size, f);
 		}
 		fclose(f);
-		
-		if (encparms.abr == 1)
-			sprintf(fbuf_temp,"--abr %i",encparms.minBitr);
-		else
-			sprintf(fbuf_temp,"--vbr-new -b %i",encparms.minBitr);
-		if (encparms.silent == 1)
-			strcat(fbuf_temp," --silent");
-		sprintf(fbuf,
-		        "lame -t -q %i %s -V %i -B %i --resample 22.05 -m m -r -s %d %s %s",
-		        encparms.algqual, fbuf_temp, encparms.vbrqual,
-		        encparms.maxBitr, real_samplerate, rawname, mp3name);
-		system(fbuf);
+
+		if (oggmode) {
+			sprintf(fbuf, "oggenc ");
+			if (oggparms.nominalBitr != -1) {
+				sprintf(fbuf_temp, "-b %i ", oggparms.nominalBitr);
+				strcat(fbuf, fbuf_temp);
+			}
+			if (oggparms.minBitr != -1) {
+				sprintf(fbuf_temp, "-m %i ", oggparms.minBitr);
+				strcat(fbuf, fbuf_temp);
+			}
+			if (oggparms.maxBitr != -1) {
+				sprintf(fbuf_temp, "-M %i ", oggparms.maxBitr);
+				strcat(fbuf, fbuf_temp);
+			}
+			if (oggparms.silent) {
+				strcat(fbuf, "--quiet ");
+			}
+			sprintf(fbuf_temp, "-q %i -r -C 1 --raw-endianness=1 -R %i --resample 22050 %s -o %s",
+				oggparms.quality, real_samplerate,
+				rawname, mp3name);
+			strcat(fbuf, fbuf_temp);
+			system(fbuf);
+		}
+		else {
+			if (encparms.abr == 1)
+				sprintf(fbuf_temp,"--abr %i",encparms.minBitr);
+			else
+				sprintf(fbuf_temp,"--vbr-new -b %i",encparms.minBitr);
+			if (encparms.silent == 1)
+				strcat(fbuf_temp," --silent");
+			sprintf(fbuf,
+				"lame -t -q %i %s -V %i -B %i --resample 22.05 -m m -r -s %d %s %s",
+				encparms.algqual, fbuf_temp, encparms.vbrqual,
+				encparms.maxBitr, real_samplerate, rawname, mp3name);
+			system(fbuf);
+		}
 
 		f = fopen(mp3name, "rb");
 		tot_size = 0;
@@ -247,6 +285,10 @@
 {
 	printf("\nUsage: %s <params> monster.sou\n", exename);
 	printf("\nParams:\n");
+	printf("--mp3        encode to MP3 format (default)\n");
+	printf("--vorbis     encode to Vorbis format\n");
+	printf("(If one of these is specified, it must be the first parameter.)\n");
+	printf("\nMP3 mode params:\n");
 	printf("-b <rate>    <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:%i)\n", minBitrDef);
 	printf("-B <rate>    <rate> is the maximum VBR/ABR bitrate (default:%i)\n", maxBitrDef);
 	printf("--vbr        LAME uses the VBR mode (default)\n");
@@ -254,18 +296,20 @@
 	printf("-V <value>   specifies the value (0 - 9) of VBR quality (0=best) (default:%i)\n", vbrqualDef);
 	printf("-q <value>   specifies the MPEG algorithm quality (0-9; 0=best) (default:%i)\n", algqualDef);
 	printf("--silent     the output of LAME is hidden (default:disabled)\n");
-	printf("--help       this help message\n");
+	printf("\nVorbis mode params:\n");
+	printf("-b <rate>    <rate> is the nominal bitrate (default:unset)\n");
+	printf("-m <rate>    <rate> is the minimum bitrate (default:unset)\n");
+	printf("-M <rate>    <rate> is the maximum bitrate (default:unset)\n");
+	printf("-q <value>   specifies the value (0 - 10) of VBR quality (10=best) (default:%i)\n", oggqualDef);
+	printf("--silent     the output of oggenc is hidden (default:disabled)\n");
+	printf("\n--help     this help message\n");
 	printf("\n\nIf a parameter is not given the default value is used\n");
-	printf("If using VBR mode -b and -B must be multiples of 8; the maximum is 160!\n");
+	printf("If using VBR mode for MP3 -b and -B must be multiples of 8; the maximum is 160!\n");
 	exit(2);
 }
 
-int main(int argc, char *argv[])
-{
-	int i;
-	if (argc < 2)
-		showhelp(argv[0]);
-	for(i = 1; i < argc; i++) {
+void process_mp3_parms(int argc, char *argv[], int i) {
+	for(; i < argc; i++) {
 		if (strcmp(argv[i], "--vbr") == 0) {
 			encparms.vbr=1;
 			encparms.abr=0;
@@ -317,6 +361,63 @@
 	if (i != (argc - 1)) {
 		showhelp(argv[0]);
 	}
+}
+
+void process_ogg_parms(int argc, char *argv[], int i) {
+	for (; i < argc; i++) {
+		if (strcmp(argv[i], "-b") == 0) {
+			oggparms.nominalBitr = atoi(argv[i + 1]);
+			i++;
+		}
+		else if (strcmp(argv[i], "-m") == 0) {
+			oggparms.minBitr = atoi(argv[i + 1]);
+			i++;
+		}
+		else if (strcmp(argv[i], "-M") == 0) {
+			oggparms.maxBitr = atoi(argv[i + 1]);
+			i++;
+		}
+		else if (strcmp(argv[i], "-q") == 0) {
+			oggparms.quality = atoi(argv[i + 1]);
+			i++;
+		}
+		else if (strcmp(argv[i], "--silent") == 0) {
+			oggparms.silent = 1;
+		}
+		else if (strcmp(argv[i], "--help") == 0) {
+			showhelp(argv[0]);
+		}
+		else if (argv[i][0] == '-') {
+			showhelp(argv[0]);
+		}
+		else
+			break;
+	}
+	if (i != argc - 1)
+		showhelp(argv[0]);
+}
+
+int main(int argc, char *argv[])
+{
+	int i;
+	if (argc < 2)
+		showhelp(argv[0]);
+	i = 1;
+	if (strcmp(argv[1], "--mp3") == 0) {
+		oggmode = 0;
+		i++;
+	}
+	else if (strcmp(argv[1], "--vorbis") == 0) {
+		oggmode = 1;
+		i++;
+	}
+
+	if (oggmode)
+		process_ogg_parms(argc, argv, i);
+	else
+		process_mp3_parms(argc, argv, i);
+
+	i = argc - 1;
 	input = fopen(argv[i], "rb");
 	if (!input) {
 		printf("Cannot open file: %s\n", argv[i]);
@@ -324,7 +425,7 @@
 	}
 
 	output_idx = fopen("monster.idx", "wb");
-	output_snd = fopen("monster.mp3", "wb");
+	output_snd = fopen("monster.dat", "wb");
 
 	/* Get the 'SOU ....' header */
 	get_string(8);





More information about the Scummvm-git-logs mailing list