Skip to content

Commit 0837463

Browse files
committed
- fix DriverSoundTool bugs
1 parent 933155d commit 0837463

1 file changed

Lines changed: 50 additions & 38 deletions

File tree

DriverSoundTool/driver_sound.cpp

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#include <math.h>
22

3-
#include <malloc.h>
4-
#include <string.h>
53
#include "core/VirtualStream.h"
64
#include "core/cmdlib.h"
7-
#include "core/dktypes.h"
8-
#include "util/util.h"
5+
#include <string.h>
6+
#include <stdlib.h>
97

8+
#include <nstd/String.hpp>
9+
#include <nstd/File.hpp>
10+
#include <nstd/Directory.hpp>
1011

1112
// WAV file header and smpl-chunk template - Quick and dirty solution because I'm lazy
1213
int wavHeader[11] = {
@@ -186,9 +187,13 @@ int DecompressAndRestoreXM(char* destXM, char* xmData, int srcSize, PCMSample* s
186187

187188
unsigned short* version = (unsigned short*)(&destXM[58]);
188189

190+
bool decompress = false;
191+
189192
// check if it's an XMPlay version (superpacked)
190193
if (*version != 0xDDBA)
191194
{
195+
MsgInfo("Already a non-compressesd XM. Exiting\n");
196+
192197
memcpy(destXM, xmData, srcSize);
193198
return srcSize;
194199
}
@@ -431,7 +436,9 @@ int LoadSoundBank(SAMPLE_DATA* out_sample_info, PCMSample* out_samples, FILE* fp
431436

432437
void ExportSBK(FILE* sbkFp, const char* sbkFileName)
433438
{
434-
char tmpString[_MAX_PATH];
439+
String sbkName = String::fromCString(sbkFileName);
440+
String directory = File::dirname(sbkName) + "/" + File::basename(sbkName, File::extension(sbkName));
441+
435442
PCMSample pcmSamples[80];
436443
SAMPLE_DATA sampleDescs[80];
437444
memset(pcmSamples, 0, sizeof(PCMSample) * 80);
@@ -440,16 +447,16 @@ void ExportSBK(FILE* sbkFp, const char* sbkFileName)
440447
int numBankSamples = LoadSoundBank(sampleDescs, pcmSamples, sbkFp);
441448

442449
if(numBankSamples)
443-
mkdirRecursive(sbkFileName, true);
450+
Directory::create(directory);
444451

445452
for (int i = 0; i < numBankSamples; i++)
446453
{
447454
PCMSample& sample = pcmSamples[i];
448455
SAMPLE_DATA& sampleDesc = sampleDescs[i];
449456

450-
snprintf(tmpString, _MAX_PATH, "%s/%d.wav", sbkFileName, i);
451-
452-
FILE* wavfp = fopen(tmpString, "wb");
457+
String fileName = String::fromPrintf("%s/%d.wav", (char*)directory, i);
458+
459+
FILE* wavfp = fopen(fileName, "wb");
453460

454461
if (wavfp)
455462
{
@@ -476,26 +483,26 @@ void ExportSBK(FILE* sbkFp, const char* sbkFileName)
476483
fclose(wavfp);
477484
}
478485
else
479-
MsgError("Unable to create file %s\n", tmpString);
486+
MsgError("Unable to create file %s\n", (char*)fileName);
480487
}
481488
}
482489

483-
int DoConvertBLK(const char* sbkFileName)
490+
int DoConvertBLK(const char* blkFileName)
484491
{
485-
char tmpString[_MAX_PATH];
486-
snprintf(tmpString, _MAX_PATH, "%s_dec", sbkFileName);
492+
String blkName = String::fromCString(blkFileName);
493+
String directory = File::dirname(blkName) + "/" + File::basename(blkName, File::extension(blkName));
487494

488-
MsgWarning("Loading '%s'...\n", sbkFileName);
495+
MsgWarning("Loading '%s'...\n", blkFileName);
489496

490-
FILE* blkFp = fopen(sbkFileName, "rb");
497+
FILE* blkFp = fopen(blkFileName, "rb");
491498

492499
if (!blkFp)
493500
{
494-
MsgError("No such file '%s'!", sbkFileName);
501+
MsgError("No such file '%s'!", blkFileName);
495502
return -1;
496503
}
497504

498-
mkdirRecursive(tmpString);
505+
Directory::create(directory);
499506

500507
// read count
501508
int numSoundBanks = 0;
@@ -514,7 +521,10 @@ int DoConvertBLK(const char* sbkFileName)
514521
for (int i = 0; i < numSoundBanks; i++)
515522
{
516523
fseek(blkFp, blockLimit[i], SEEK_SET);
517-
ExportSBK(blkFp, varargs("%s/Bank_%d", tmpString, i));
524+
525+
String bankName = String::fromPrintf("%s/Bank_%d", (char*)directory, i);
526+
527+
ExportSBK(blkFp, bankName);
518528
}
519529

520530
fclose(blkFp);
@@ -545,14 +555,10 @@ int DoConvertSBK(const char* sbkFileName)
545555

546556
int DoConvertXMAndSBK(const char* xmFilename)
547557
{
548-
char tmpString[_MAX_PATH];
549-
char sbkFileName[_MAX_PATH];
550-
strcpy(sbkFileName, xmFilename);
551-
552-
char* extStr = strchr(sbkFileName, '.');
553-
if (extStr)
554-
strcpy(extStr, ".sbk");
555-
558+
String xmName = String::fromCString(xmFilename);
559+
String directory = File::dirname(xmName);
560+
String sbkFileName = File::basename(xmName, File::extension(xmName)) + ".SBK";
561+
556562
FILE* psxXmFp = fopen(xmFilename, "rb");
557563

558564
if (!psxXmFp)
@@ -565,11 +571,11 @@ int DoConvertXMAndSBK(const char* xmFilename)
565571

566572
if (!sbkFp)
567573
{
568-
MsgError("No such file '%s'!", sbkFileName);
574+
MsgError("No such file '%s'!", (char*)sbkFileName);
569575
return -1;
570576
}
571577

572-
MsgWarning("Loading '%s' & '%s'...\n", xmFilename, sbkFileName);
578+
MsgWarning("Loading '%s' & '%s'...\n", xmFilename, (char*)sbkFileName);
573579

574580
PCMSample pcmSamples[80];
575581
SAMPLE_DATA sampleDescs[80];
@@ -580,12 +586,11 @@ int DoConvertXMAndSBK(const char* xmFilename)
580586

581587
// restore XM and save to disk
582588
{
583-
*extStr = 0;
589+
Msg("--- XM song '%s' ---\n", (char*)xmName);
584590

585-
Msg("--- XM song '%s' ---\n", sbkFileName);
586-
sprintf(tmpString, "%s_orig.xm", sbkFileName);
591+
String origXMFileName = directory + "/" + File::basename(xmName, File::extension(xmName)) + "_orig." + File::extension(xmName);
587592

588-
FILE* xmFp = fopen(tmpString, "wb");
593+
FILE* xmFp = fopen(origXMFileName, "wb");
589594

590595
if (xmFp)
591596
{
@@ -604,7 +609,7 @@ int DoConvertXMAndSBK(const char* xmFilename)
604609

605610
for (int j = 0; j < numBankSamples; j++)
606611
{
607-
//printf("sample %d rate=%d loop=%d size=%d\n", j, sample.samplerate, sample.loop, sample.length);
612+
//printf("sample %d rate=%d loop=%d size=%d\n", j, pcmSamples[j].samplerate, sample.loop, sample.length);
608613
addSize += pcmSamples[j].length * sizeof(short);
609614
}
610615

@@ -624,7 +629,7 @@ int DoConvertXMAndSBK(const char* xmFilename)
624629
free(xmData);
625630
}
626631
else
627-
MsgError("ERROR: can't open '%s' for write!", tmpString);
632+
MsgError("ERROR: can't open '%s' for write!", (char*)origXMFileName);
628633
}
629634

630635
// free samples
@@ -650,10 +655,14 @@ int DoExtractMusicFile(const char* fileName)
650655
return -1;
651656
}
652657

658+
String musicBinName = String::fromCString(fileName);
659+
String directory = File::dirname(musicBinName);
660+
661+
653662
MsgWarning("Loading '%s'...\n", fileName);
654663

655664
//char songPath[_MAX_PATH];
656-
char tmpString[_MAX_PATH];
665+
//char tmpString[_MAX_PATH];
657666

658667
// max 80 samples per bank
659668
PCMSample pcmSamples[80];
@@ -689,9 +698,9 @@ int DoExtractMusicFile(const char* fileName)
689698
// restore XM and save to disk
690699
{
691700
Msg("--- XM song %d ---\n", i);
692-
sprintf(tmpString, "%s_song%d.xm", fileName, i);
701+
String xmFileName = String::fromPrintf("%s/%s_song%d.xm", (char*)directory, (char*)File::basename(musicBinName, File::extension(musicBinName)), i);
693702

694-
FILE* xmFp = fopen(tmpString, "wb");
703+
FILE* xmFp = fopen(xmFileName, "wb");
695704

696705
if (xmFp)
697706
{
@@ -719,7 +728,7 @@ int DoExtractMusicFile(const char* fileName)
719728
fclose(xmFp);
720729
}
721730
else
722-
MsgError("ERROR: can't open '%s' for write!", tmpString);
731+
MsgError("ERROR: can't open '%s' for write!", (char*)xmFileName);
723732

724733
free(xmData);
725734
}
@@ -798,5 +807,8 @@ int main(int argc, char** argv)
798807
}
799808
}
800809

810+
if(argc > 1)
811+
Msg("All done\n");
812+
801813
return 0;
802814
}

0 commit comments

Comments
 (0)