Mercurial > hg > dmlib
annotate tools/mod2wav.c @ 2496:6a6ed3eeded5
Fix parsing of some arguments to -S option.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 28 Apr 2020 20:55:34 +0300 |
parents | bc05bcfc4598 |
children | aacf3bd1cceb |
rev | line source |
---|---|
0 | 1 /* |
2 * mod2wav - Render XM/JSSMOD module to WAV waveform file | |
3 * Programmed and designed by Matti 'ccr' Hamalainen | |
4 * (C) Copyright 2007 Tecnic Software productions (TNSP) | |
5 * | |
6 * Please read file 'COPYING' for information on license and distribution. | |
7 */ | |
1432
a9516570cc26
Improve build, so that we can build the tools and tests with minimal
Matti Hamalainen <ccr@tnsp.org>
parents:
1235
diff
changeset
|
8 #include "dmtool.h" |
0 | 9 #include <stdio.h> |
10 #include <stdlib.h> | |
11 #include "jss.h" | |
12 #include "jssmod.h" | |
13 #include "jssmix.h" | |
14 #include "jssplr.h" | |
15 #include "dmlib.h" | |
16 #include "dmargs.h" | |
1953
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
17 #include "dmfile.h" |
285
245b15cd1919
Don't link libSDL uselessly to utilities that do not actually use it.
Matti Hamalainen <ccr@tnsp.org>
parents:
206
diff
changeset
|
18 #include "dmmutex.h" |
0 | 19 |
20 | |
1953
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
21 #define DM_WAVE_FORMAT_PCM (1) |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
22 #define DM_WAVE_RIFF_ID "RIFF" |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
23 #define DM_WAVE_WAVE_ID "WAVE" |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
24 #define DM_WAVE_FMT_ID "fmt " |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
25 #define DM_WAVE_DATA_ID "data" |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
26 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
27 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
28 typedef struct |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
29 { |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
30 Uint8 chunkID[4]; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
31 Uint32 chunkSize; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
32 } DMWaveChunk; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
33 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
34 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
35 typedef struct |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
36 { |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
37 Uint8 riffID[4]; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
38 Uint32 fileSize; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
39 Uint8 riffType[4]; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
40 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
41 DMWaveChunk chFormat; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
42 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
43 Uint16 wFormatTag; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
44 Uint16 nChannels; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
45 Uint32 nSamplesPerSec; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
46 Uint32 nAvgBytesPerSec; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
47 Uint16 nBlockAlign; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
48 Uint16 wBitsPerSample; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
49 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
50 DMWaveChunk chData; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
51 // Data follows here |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
52 } DMWaveFile; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
53 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
54 |
300 | 55 char *optInFilename = NULL, *optOutFilename = NULL; |
0 | 56 int optOutFormat = JSS_AUDIO_S16, |
57 optOutChannels = 2, | |
58 optOutFreq = 44100, | |
59 optMuteOChannels = -1, | |
60 optStartOrder = -1; | |
61 BOOL optUsePlayTime = FALSE; | |
62 size_t optPlayTime; | |
63 | |
64 | |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
797
diff
changeset
|
65 static const DMOptArg optList[] = |
37 | 66 { |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
67 { 0, '?', "help" , "Show this help", OPT_NONE }, |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
68 { 1, 0, "license" , "Print out this program's license agreement", OPT_NONE }, |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
69 { 2, 'v', "verbose" , "Be more verbose", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
70 |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
71 { 10, '1', "16bit" , "16-bit output", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
72 { 12, '8', "8bit" , "8-bit output", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
73 { 14, 'm', "mono" , "Mono output", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
74 { 16, 's', "stereo" , "Stereo output", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
75 { 18, 'f', "freq" , "Output frequency", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
76 { 20, 'M', "mute" , "Mute other channels than #", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
77 { 22, 'o', "order" , "Start from order #", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
78 { 24, 't', "time" , "Play for # seconds", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
79 // { 26, 'l', "loop" , "Loop for # times", OPT_ARGREQ }, |
0 | 80 }; |
81 | |
82 const int optListN = sizeof(optList) / sizeof(optList[0]); | |
83 | |
84 | |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
85 void argShowHelp() |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
86 { |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
87 dmPrintBanner(stdout, dmProgName, "[options] [sourcefile] [destfile.wav]"); |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
88 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2); |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
89 } |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
90 |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
91 |
0 | 92 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
93 { | |
94 (void) optArg; | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
95 |
37 | 96 switch (optN) |
97 { | |
98 case 0: | |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
99 argShowHelp(); |
37 | 100 exit(0); |
101 break; | |
0 | 102 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
103 case 1: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
104 dmPrintLicense(stdout); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
105 exit(0); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
106 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
107 |
37 | 108 case 2: |
109 dmVerbosity++; | |
110 break; | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
111 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
112 case 10: |
37 | 113 optOutFormat = JSS_AUDIO_S16; |
114 break; | |
0 | 115 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
116 case 12: |
37 | 117 optOutFormat = JSS_AUDIO_U8; |
118 break; | |
0 | 119 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
120 case 14: |
37 | 121 optOutChannels = JSS_AUDIO_MONO; |
122 break; | |
0 | 123 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
124 case 16: |
38
8b04b0b51edc
Oops, fix a stupid bug in -s option .. it was setting the wrong variable. :|
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
125 optOutChannels = JSS_AUDIO_STEREO; |
37 | 126 break; |
0 | 127 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
128 case 18: |
37 | 129 optOutFreq = atoi(optArg); |
130 break; | |
0 | 131 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
132 case 20: |
37 | 133 optMuteOChannels = atoi(optArg); |
134 break; | |
135 | |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
136 case 22: |
37 | 137 optStartOrder = atoi(optArg); |
138 break; | |
0 | 139 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
140 case 24: |
37 | 141 optPlayTime = atoi(optArg); |
142 optUsePlayTime = TRUE; | |
143 break; | |
0 | 144 |
37 | 145 default: |
2183
e3f0eaf23f4f
Change the error message for unimplemented option argument.
Matti Hamalainen <ccr@tnsp.org>
parents:
1953
diff
changeset
|
146 dmErrorMsg("Unimplemented option argument '%s'.\n", currArg); |
37 | 147 return FALSE; |
0 | 148 } |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
149 |
0 | 150 return TRUE; |
151 } | |
152 | |
153 | |
154 BOOL argHandleFile(char *currArg) | |
155 { | |
2258 | 156 if (optInFilename == NULL) |
300 | 157 optInFilename = currArg; |
37 | 158 else |
2258 | 159 if (optOutFilename == NULL) |
300 | 160 optOutFilename = currArg; |
37 | 161 else |
162 { | |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
163 dmErrorMsg("Too many filename arguments (only source and dest needed) '%s'\n", currArg); |
0 | 164 return FALSE; |
165 } | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
166 |
0 | 167 return TRUE; |
168 } | |
169 | |
170 | |
1953
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
171 BOOL dmWriteWAVChunk(FILE * f, DMWaveChunk *ch) |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
172 { |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
173 return dm_fwrite_str(f, ch->chunkID, 4) && dm_fwrite_le32(f, ch->chunkSize); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
174 } |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
175 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
176 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
177 void dmMakeWAVChunk(DMWaveChunk *ch, const char *chunkID, const Uint32 chunkSize) |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
178 { |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
179 memcpy(&(ch->chunkID), (const void *) chunkID, 4); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
180 ch->chunkSize = chunkSize; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
181 } |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
182 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
183 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
184 void dmWriteWAVHeader(FILE *outFile, int sampBits, int sampFreq, int sampChn, size_t sampLen) |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
185 { |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
186 DMWaveFile wav; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
187 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
188 // PCM WAVE chunk |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
189 dmMakeWAVChunk(&wav.chFormat, DM_WAVE_FMT_ID, (2 + 2 + 4 + 4 + 2 + 2)); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
190 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
191 wav.wFormatTag = DM_WAVE_FORMAT_PCM; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
192 wav.nChannels = sampChn; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
193 wav.nSamplesPerSec = sampFreq; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
194 wav.nAvgBytesPerSec = (sampBits * sampChn * sampFreq) / 8; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
195 wav.nBlockAlign = (sampBits * sampChn) / 8; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
196 wav.wBitsPerSample = sampBits; |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
197 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
198 // Data chunk |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
199 dmMakeWAVChunk(&wav.chData, DM_WAVE_DATA_ID, (sampLen * wav.nBlockAlign)); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
200 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
201 // RIFF header |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
202 memcpy(&wav.riffID, (const void *) DM_WAVE_RIFF_ID, 4); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
203 memcpy(&wav.riffType, (const void *) DM_WAVE_WAVE_ID, 4); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
204 wav.fileSize = ((4 + 4 + 4) + wav.chFormat.chunkSize + wav.chData.chunkSize); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
205 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
206 // Write header |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
207 dm_fwrite_str(outFile, wav.riffID, sizeof(wav.riffID)); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
208 dm_fwrite_le32(outFile, wav.fileSize); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
209 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
210 dm_fwrite_str(outFile, wav.riffType, sizeof(wav.riffType)); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
211 dmWriteWAVChunk(outFile, &wav.chFormat); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
212 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
213 dm_fwrite_le16(outFile, wav.wFormatTag); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
214 dm_fwrite_le16(outFile, wav.nChannels); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
215 dm_fwrite_le32(outFile, wav.nSamplesPerSec); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
216 dm_fwrite_le32(outFile, wav.nAvgBytesPerSec); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
217 dm_fwrite_le16(outFile, wav.nBlockAlign); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
218 dm_fwrite_le16(outFile, wav.wBitsPerSample); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
219 |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
220 dmWriteWAVChunk(outFile, &wav.chData); |
c3e88d9343ca
Move WAV stuff back into mod2wav.c, made no sense to have it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
1606
diff
changeset
|
221 } |
2258 | 222 |
223 | |
0 | 224 int main(int argc, char *argv[]) |
225 { | |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
226 DMResource *inFile = NULL; |
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
227 FILE *outFile = NULL; |
68 | 228 JSSModule *mod = NULL; |
229 JSSMixer *dev = NULL; | |
230 JSSPlayer *plr = NULL; | |
2258 | 231 size_t bufLen = 1024*4, dataTotal, dataWritten, sampSize; |
232 Uint8 *dataBuf = NULL; | |
0 | 233 int result = -1; |
234 | |
235 dmInitProg("mod2wav", "XM/JSSMOD to WAV renderer", "0.2", NULL, NULL); | |
236 dmVerbosity = 1; | |
237 | |
238 // Parse arguments | |
239 if (!dmArgsProcess(argc, argv, optList, optListN, | |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
797
diff
changeset
|
240 argHandleOpt, argHandleFile, OPTH_BAILOUT)) |
2258 | 241 return 1; |
0 | 242 |
243 // Check arguments | |
300 | 244 if (optInFilename == NULL || optOutFilename == NULL) |
37 | 245 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
246 dmErrorMsg("Input or output file not specified. Try --help.\n"); |
0 | 247 return 1; |
248 } | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
249 |
0 | 250 // Initialize miniJSS |
251 jssInit(); | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
252 |
0 | 253 // Open the source file |
1606
93d1050eac99
Rename dmf_create_*() functions to dmf_open_*().
Matti Hamalainen <ccr@tnsp.org>
parents:
1434
diff
changeset
|
254 if ((result = dmf_open_stdio(optInFilename, "rb", &inFile)) != DMERR_OK) |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
255 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
256 dmErrorMsg("Error opening input file '%s', %d: %s\n", |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
652
diff
changeset
|
257 optInFilename, result, dmErrorStr(result)); |
2258 | 258 goto exit; |
0 | 259 } |
260 | |
261 // Read module file | |
1199
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
262 dmMsg(1, "Reading file: %s\n", optInFilename); |
0 | 263 #ifdef JSS_SUP_XM |
797
f066e9dccf29
Oops, fix some inverted booleans.
Matti Hamalainen <ccr@tnsp.org>
parents:
796
diff
changeset
|
264 result = jssLoadXM(inFile, &mod, TRUE); |
0 | 265 #endif |
266 #ifdef JSS_SUP_JSSMOD | |
1199
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
267 dmfreset(inFile); |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
268 if (result != DMERR_OK) |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
269 { |
777
ed60a7ee3ebb
Change JSSMOD loader to use DMResources.
Matti Hamalainen <ccr@tnsp.org>
parents:
730
diff
changeset
|
270 dmMsg(1, "* Trying JSSMOD ...\n"); |
797
f066e9dccf29
Oops, fix some inverted booleans.
Matti Hamalainen <ccr@tnsp.org>
parents:
796
diff
changeset
|
271 result = jssLoadJSSMOD(inFile, &mod, TRUE); |
1199
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
272 dmfreset(inFile); |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
273 if (result == DMERR_OK) |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
274 result = jssLoadJSSMOD(inFile, &mod, FALSE); |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
275 } |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
276 else |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
277 { |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
278 dmMsg(2, "* Trying XM...\n"); |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
279 result = jssLoadXM(inFile, &mod, FALSE); |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
280 } |
0 | 281 #endif |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
282 dmf_close(inFile); |
1199
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
283 |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
284 // Check for errors, we still might have some data tho |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
285 if (result != DMERR_OK) |
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
286 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
287 dmErrorMsg("Error loading module file, %d: %s\n", |
15
feec43a3497c
Fix input file reading of mod2wav utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
288 result, dmErrorStr(result)); |
2258 | 289 goto exit; |
1199
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
290 } |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
291 |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
292 // Check if we have anything |
a79edf59d5d8
Improve use of probing in dumpmod, mod2wav and ppl.
Matti Hamalainen <ccr@tnsp.org>
parents:
958
diff
changeset
|
293 if (mod == NULL) |
2258 | 294 goto exit; |
0 | 295 |
49
033c660c25f5
Restructure module playing, removing 8bit sample mixing (output can still be
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
296 // Try to convert it |
68 | 297 if ((result = jssConvertModuleForPlaying(mod)) != DMERR_OK) |
49
033c660c25f5
Restructure module playing, removing 8bit sample mixing (output can still be
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
298 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
299 dmErrorMsg("Could not convert module for playing, %d: %s\n", |
49
033c660c25f5
Restructure module playing, removing 8bit sample mixing (output can still be
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
300 result, dmErrorStr(result)); |
2258 | 301 goto exit; |
49
033c660c25f5
Restructure module playing, removing 8bit sample mixing (output can still be
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
302 } |
033c660c25f5
Restructure module playing, removing 8bit sample mixing (output can still be
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
303 |
0 | 304 // Open mixer |
68 | 305 dev = jvmInit(optOutFormat, optOutChannels, optOutFreq, JMIX_AUTO); |
306 if (dev == NULL) | |
39 | 307 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
308 dmErrorMsg("jvmInit() returned NULL\n"); |
2258 | 309 goto exit; |
0 | 310 } |
311 | |
68 | 312 sampSize = jvmGetSampleSize(dev); |
2258 | 313 if ((dataBuf = dmMalloc(bufLen * sampSize)) == NULL) |
39 | 314 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
315 dmErrorMsg("Could not allocate mixing buffer\n"); |
0 | 316 return 5; |
317 } | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
318 |
2389
647671a9a0b8
More printf() format specifier size_t -related fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
2258
diff
changeset
|
319 dmMsg(1, "Using fmt=%d, bits=%d, channels=%d, freq=%d [%" DM_PRIu_SIZE_T " / sample]\n", |
68 | 320 optOutFormat, jvmGetSampleRes(dev), optOutChannels, optOutFreq, |
0 | 321 sampSize); |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
322 |
0 | 323 // Initialize player |
68 | 324 if ((plr = jmpInit(dev)) == NULL) |
325 { | |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
326 dmErrorMsg("jmpInit() returned NULL.\n"); |
2258 | 327 goto exit; |
0 | 328 } |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
329 |
0 | 330 // Set callback |
68 | 331 jvmSetCallback(dev, jmpExec, plr); |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
332 |
0 | 333 // Initialize playing |
68 | 334 jmpSetModule(plr, mod); |
37 | 335 if (optStartOrder >= 0) |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
336 { |
0 | 337 dmMsg(1, "Starting from song order #%d\n", optStartOrder); |
338 } else | |
339 optStartOrder = 0; | |
37 | 340 |
68 | 341 jmpPlayOrder(plr, optStartOrder); |
185
1f8f4d7cb33b
Increase default global volume.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
342 jvmSetGlobalVol(dev, 150); |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
343 |
68 | 344 if (optMuteOChannels > 0 && optMuteOChannels <= mod->nchannels) |
37 | 345 { |
0 | 346 int i; |
68 | 347 for (i = 0; i < mod->nchannels; i++) |
348 jvmMute(dev, i, TRUE); | |
349 jvmMute(dev, optMuteOChannels - 1, FALSE); | |
0 | 350 } |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
351 |
0 | 352 // Open output file |
300 | 353 if ((outFile = fopen(optOutFilename, "wb")) == NULL) |
37 | 354 { |
1434
ad3ad5d9681b
Get rid of another direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1432
diff
changeset
|
355 int err = dmGetErrno(); |
ad3ad5d9681b
Get rid of another direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1432
diff
changeset
|
356 dmErrorMsg("Error opening output file '%s' #%d: %s.\n", |
ad3ad5d9681b
Get rid of another direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1432
diff
changeset
|
357 optInFilename, err, dmErrorStr(err)); |
2258 | 358 goto exit; |
0 | 359 } |
360 | |
361 // Write initial header | |
206
9b6c0ed66960
Use the routines factored into dmwav module.
Matti Hamalainen <ccr@tnsp.org>
parents:
185
diff
changeset
|
362 dmWriteWAVHeader(outFile, jvmGetSampleRes(dev), optOutFreq, optOutChannels, 1024); |
0 | 363 |
364 // Render audio data and output to file | |
365 if (optUsePlayTime) | |
2389
647671a9a0b8
More printf() format specifier size_t -related fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
2258
diff
changeset
|
366 dmMsg(1, "Rendering module (%" DM_PRIu_SIZE_T " seconds) ...\n", optPlayTime); |
0 | 367 else |
368 dmMsg(1, "Rendering module ...\n"); | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
369 |
0 | 370 optPlayTime *= optOutFreq; |
371 dataTotal = 0; | |
372 dataWritten = 1; | |
68 | 373 while (plr->isPlaying && dataWritten > 0) |
0 | 374 { |
375 size_t writeLen = bufLen; | |
376 if (optUsePlayTime && (writeLen + dataTotal) > optPlayTime) | |
377 writeLen = optPlayTime - dataTotal; | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
378 |
0 | 379 if (writeLen > 0) |
380 { | |
2258 | 381 jvmRenderAudio(dev, dataBuf, writeLen); |
0 | 382 #if (SDL_BYTEORDER == SDL_BIG_ENDIAN) |
2258 | 383 jssEncodeSample16((Uint16 *)dataBuf, writeLen * optOutChannels, jsampSwapEndianess); |
0 | 384 #endif |
2258 | 385 dataWritten = fwrite(dataBuf, sampSize, writeLen, outFile); |
0 | 386 if (dataWritten < writeLen) |
387 { | |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
388 dmErrorMsg("Error writing data!\n"); |
2258 | 389 goto exit; |
0 | 390 } |
391 dataTotal += dataWritten; | |
392 } | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
393 |
0 | 394 if (optUsePlayTime && dataTotal >= optPlayTime) |
395 break; | |
396 } | |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
397 |
0 | 398 // Write the correct header |
399 if (fseek(outFile, 0L, SEEK_SET) != 0) | |
400 { | |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
401 dmErrorMsg("Error rewinding to header position!\n"); |
2258 | 402 goto exit; |
0 | 403 } |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
404 |
206
9b6c0ed66960
Use the routines factored into dmwav module.
Matti Hamalainen <ccr@tnsp.org>
parents:
185
diff
changeset
|
405 dmWriteWAVHeader(outFile, jvmGetSampleRes(dev), optOutFreq, optOutChannels, dataTotal); |
1235
5b8245e5f785
Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1199
diff
changeset
|
406 |
0 | 407 // Done! |
2258 | 408 dmMsg(1, "OK.\n"); |
68 | 409 |
2258 | 410 exit: |
411 if (outFile != NULL) | |
412 fclose(outFile); | |
413 | |
414 dmFree(dataBuf); | |
68 | 415 jmpClose(plr); |
416 jvmClose(dev); | |
417 jssFreeModule(mod); | |
418 jssClose(); | |
419 | |
0 | 420 return 0; |
421 } |