aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThanasis Antoniou2019-01-21 16:27:26 +0200
committerThanasis Antoniou2019-01-21 16:27:26 +0200
commit43a3eed2b2af3db6723d45d5379876a99693a7b8 (patch)
tree300399ad938ce015b770261bb684ff7557bcf291
parent535a15f25ab5f18f2abd11cd90b089c5de9a9ba2 (diff)
downloadscummvm-rg350-43a3eed2b2af3db6723d45d5379876a99693a7b8.tar.gz
scummvm-rg350-43a3eed2b2af3db6723d45d5379876a99693a7b8.tar.bz2
scummvm-rg350-43a3eed2b2af3db6723d45d5379876a99693a7b8.zip
DEVTOOLS: Handle empty AUD file in Blade Runner
French localization has an empty AUD file. Only the header is present and seems corrupted This is DCLER_0030_00041ECE in TLK0A. It is an unused audio file ("boop" in ENG localization), but skipping it would cause issues with the translation excel, ie. one row missing. The fix is to create a placeholder empty wav file in order to not ignore this empty quote. The bug affected the spreasheet creator tool.
-rw-r--r--devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileDecode.py9
-rw-r--r--devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileLib.py36
-rw-r--r--devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/sortBladeRunnerWavs02.py13
-rw-r--r--devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/treFileLib.py20
4 files changed, 51 insertions, 27 deletions
diff --git a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileDecode.py b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileDecode.py
index 5be678f3f2..15733488bb 100644
--- a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileDecode.py
+++ b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileDecode.py
@@ -25,8 +25,8 @@ if (not ctypesLibFound) \
from struct import *
-my_module_version = "0.60"
-my_module_name = "audFileDecode"
+MY_MODULE_VERSION = "0.60"
+MY_MODULE_NAME = "audFileDecode"
aud_ima_index_adjust_table = [-1, -1, -1, -1, 2, 4, 6, 8]
@@ -225,11 +225,12 @@ class audFileDecode:
if __name__ == '__main__':
# main()
- print "[Debug] Running %s as main module" % (my_module_name)
decodeInstance = audFileDecode()
+ if decodeInstance.m_traceModeEnabled:
+ print "[Debug] Running %s (%s) as main module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
else:
#debug
- #print "[Debug] Running %s imported from another module" % (my_module_name)
+ #print "[Debug] Running %s (%s) imported from another module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
pass
\ No newline at end of file
diff --git a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileLib.py b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileLib.py
index 2912a93930..3c72521c0d 100644
--- a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileLib.py
+++ b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/audFileLib.py
@@ -62,8 +62,8 @@ if (not osLibFound) \
from struct import *
from audFileDecode import *
-my_module_version = "0.80"
-my_module_name = "audFileLib"
+MY_MODULE_VERSION = "0.80"
+MY_MODULE_NAME = "audFileLib"
#constants
aud_chunk_id = 0x0000deaf
@@ -129,9 +129,11 @@ class audFile:
cbinaryDataOutLst.append(tmpTupleH[0])
cvirtualBinaryD = struct.pack('B'*len(cbinaryDataOutLst), *cbinaryDataOutLst)
- if (not cvirtualBinaryD):
- print "[Error] audio file could not be exported properly (0 data read): " + filename
+ if (not cvirtualBinaryD and (len(audBytesBuff) - SIZE_OF_AUD_HEADER_IN_BYTES) > 0):
+ print "[Error] audio file could not be exported properly (0 data read): %s" % (filename)
return 1
+ elif (len(audBytesBuff) - SIZE_OF_AUD_HEADER_IN_BYTES) == 0:
+ print "[Warning] Creating empty wav file: %s" % (filename)
cb_sample = self.get_cb_sample()
cs_remaining = self.get_c_samples()
@@ -188,8 +190,18 @@ class audFile:
print "[Debug] Sample rate: %d\tsizeIn: %d\tsizeOut: %d\tflags: %d\tcompression: %d" % (self.get_samplerate(), self.header().m_size_in, self.header().m_size_out, self.header().m_flags, self.header().m_compression)
if self.get_samplerate() < 8000 or self.get_samplerate() > 48000 or self.header().m_size_in > (maxLength - SIZE_OF_AUD_HEADER_IN_BYTES ):
- print "[Error] Bad AUD Header size in file %s" % (self.m_simpleAudioFileName)
- return False
+ print "[Warning] Bad AUD Header info in file %s, size_in: %d, maxLen: %d" % (self.m_simpleAudioFileName, self.header().m_size_in, (maxLength - SIZE_OF_AUD_HEADER_IN_BYTES))
+ if self.header().m_size_in == 0:
+ # handle special case where only the header of the AUD file is present and the size_in is 0.
+ # fill the header with "valid" info for an empty wav file
+ self.header().m_size_out = 0
+ self.header().m_samplerate = 22050
+ self.header().m_compression = 0
+ self.header().m_flags = 2
+ self.header().m_populated = True
+ return True
+ else:
+ return False
else:
if self.header().m_compression == 1:
if (self.header().m_flags != 0):
@@ -360,16 +372,16 @@ class audFile:
#
if __name__ == '__main__':
# main()
- print "[Debug] Running %s as main module" % (my_module_name)
- # assumes a file of name 000000.AUD in same directory
+ # (by default) assumes a file of name 000000.AUD in same directory
+ # otherwise tries to use the first command line argument as input file
inAUDFile = None
inAUDFileName = '00000000.AUD'
if len(sys.argv[1:]) > 0 \
and os.path.isfile(os.path.join('.', sys.argv[1])) \
- and len (sys.argv[1]) > 5 \
+ and len(sys.argv[1]) > 5 \
and sys.argv[1][-3:] == 'AUD':
inAUDFileName = sys.argv[1]
- print "[Debug] Using %s as input AUD file..." % (inAUDFileName)
+ print "[Info] Using %s as input AUD file..." % (inAUDFileName)
errorFound = False
try:
@@ -381,10 +393,12 @@ if __name__ == '__main__':
if not errorFound:
allOfAudFileInBuffer = inAUDFile.read()
audFileInstance = audFile(True)
+ if audFileInstance.m_traceModeEnabled:
+ print "[Debug] Running %s (%s) as main module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
audFileInstance.loadAudFile(allOfAudFileInBuffer, len(allOfAudFileInBuffer), inAUDFileName)
audFileInstance.export_as_wav(allOfAudFileInBuffer, './tmp.wav')
inAUDFile.close()
else:
#debug
- #print "[Debug] Running %s imported from another module" % (my_module_name)
+ #print "[Debug] Running %s (%s) imported from another module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
pass \ No newline at end of file
diff --git a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/sortBladeRunnerWavs02.py b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/sortBladeRunnerWavs02.py
index ce9f9437a5..800372b4cc 100644
--- a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/sortBladeRunnerWavs02.py
+++ b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/sortBladeRunnerWavs02.py
@@ -394,6 +394,11 @@ def inputTLKsExport(inputTLKpath, outputWAVpath, pExportWavFilesMode, pExtractDe
if(offsetOfAUDEntry + sizeOfAUDEntry > allTlkFileSize):
print "[Error] audio file (AUD) file size mismatch with reported size in entry header!"
else:
+ targetSimpleWavFileName = targetSimpleAudFileName[:-4] + '.WAV' # remove the .AUD before adding the .WAV
+ if not fileIsMIX: # TLK file
+ (actorID, actorSName, localQuoteId) = getActorShortNameAndLocalQuoteIdByAUDHashID(idOfAUDEntry)
+ targetSimpleWavFileName = actorSName + '_' + str(localQuoteId).zfill(4) + '_' + ''.join('{:08X}'.format(idOfAUDEntry)).upper()+'.WAV'
+
audFileBuffer = inTLKorMIXFile.read(sizeOfAUDEntry)
if (len(audFileBuffer) == sizeOfAUDEntry):
# load audio file (AUD) file
@@ -401,12 +406,6 @@ def inputTLKsExport(inputTLKpath, outputWAVpath, pExportWavFilesMode, pExtractDe
if (thisAudFile.loadAudFile(audFileBuffer, allTlkFileSize, targetSimpleAudFileName)):
if gTraceModeEnabled:
print "[Debug] Audio file (AUD) file %s was loaded successfully!" % (targetSimpleAudFileName)
- # find
- # print "[Debug] Emulating Wav write to appropriate folder..."
- targetSimpleWavFileName = targetSimpleAudFileName[:-4] + '.WAV' # remove the .AUD before adding the .WAV
- if not fileIsMIX: # TLK file
- (actorID, actorSName, localQuoteId) = getActorShortNameAndLocalQuoteIdByAUDHashID(idOfAUDEntry)
- targetSimpleWavFileName = actorSName + '_' + str(localQuoteId).zfill(4) + '_' + ''.join('{:08X}'.format(idOfAUDEntry)).upper()+'.WAV'
#print os.path.join(outputWAVpath, tmpTLKorMIXFileTuple[1], targetSimpleWavFileName)
# tmpTLKorMIXFileTuple[1] is the subfolder where the AUD -> WAV files for this archive are written
if not os.path.isfile(os.path.join(outputWAVpath, tmpTLKorMIXFileTuple[1], targetSimpleWavFileName) ):
@@ -415,7 +414,7 @@ def inputTLKsExport(inputTLKpath, outputWAVpath, pExportWavFilesMode, pExtractDe
if gTraceModeEnabled:
print "[Info] Output file %s already exists. Skipping..." % (os.path.join(outputWAVpath, tmpTLKorMIXFileTuple[1], targetSimpleWavFileName))
else:
- print "[Error] while loading audio file (AUD) %s!" % (targetSimpleAudFileName)
+ print "[Warning] Failed to load a proper audio file (AUD) %s (to export it to %s)! Size of input is: %d" % (targetSimpleAudFileName, targetSimpleWavFileName, sizeOfAUDEntry)
else:
print "[Error] while reading audio file (AUD) file %s into mem buffer" % (targetSimpleAudFileName)
#print "[Error] while reading audio file (AUD) file %s into mem buffer" % (''.join('{:08X}'.format(idOfMIXEntry)))
diff --git a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/treFileLib.py b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/treFileLib.py
index d9ee538fb0..18a23ba5f0 100644
--- a/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/treFileLib.py
+++ b/devtools/create_bladerunner/subtitles/quotesSpreadsheetCreator/treFileLib.py
@@ -43,8 +43,8 @@ if (not osLibFound) \
from struct import *
-my_module_version = "0.50"
-my_module_name = "treFileLib"
+MY_MODULE_VERSION = "0.50"
+MY_MODULE_NAME = "treFileLib"
class TreHeader:
@@ -129,10 +129,17 @@ class treFile:
#
if __name__ == '__main__':
# main()
- print "[Debug] Running %s as main module" % (my_module_name)
- # assumes a file of name ACTORS.TRE in same directory
+ # (by default) assumes a file of name ACTORS.TRE in same directory
+ # otherwise tries to use the first command line argument as input file
inTREFile = None
inTREFileName = 'ACTORS.TRE'
+
+ if len(sys.argv[1:]) > 0 \
+ and os.path.isfile(os.path.join('.', sys.argv[1])) \
+ and len(sys.argv[1]) > 5 \
+ and sys.argv[1][-3:] == 'TRE':
+ inTREFileName = sys.argv[1]
+ print "[Info] Using %s as input TRE file..." % (inTREFileName)
errorFound = False
@@ -146,6 +153,9 @@ if __name__ == '__main__':
if not errorFound:
allOfTreFileInBuffer = inTREFile.read()
treFileInstance = treFile(True)
+ if treFileInstance.m_traceModeEnabled:
+ print "[Debug] Running %s (%s) as main module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
+
if (treFileInstance.loadTreFile(allOfTreFileInBuffer, len(allOfTreFileInBuffer, inTREFileName))):
print "[Info] Text Resource file loaded successfully!"
else:
@@ -153,5 +163,5 @@ if __name__ == '__main__':
inTREFile.close()
else:
#debug
- #print "[Debug] Running %s imported from another module" % (my_module_name)
+ #print "[Debug] Running %s (%s) imported from another module" % (MY_MODULE_NAME, MY_MODULE_VERSION)
pass \ No newline at end of file