XeNTaX Forum Index
Forum MultiEx Commander Tools Tools Home
It is currently Mon Oct 23, 2017 11:38 pm

All times are UTC + 1 hour




Post new topic Reply to topic  [ 467 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 32  Next
Author Message
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 03, 2010 9:53 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times

addCDXAheader.bms
Adds a PSX ADPCM header to a headerless file. These files can be played with the vgmstream plugin for Winamp afterwards.

Code:
# add a PSX ADPCM header to a headerless file
# note: the format always has 37,800Hz and 2 channels

set MEMORY_FILE binary "\x52\x49\x46\x46\xe4\x4\xbe\x2\x43\x44\x58\x41\x66\x6d\x74\x20\x10\x0\x0\x0\x0\x0\x0\x0\x1\x55\x58\x41\x1\x0\x0\x00\x0\x0\x0\x0\x64\x61\x74\x61\xc0\x4\xbe\x2"

get SIZE asize
get NAME basename
string NAME += ".xa"
set RIFFSIZE SIZE
math RIFFSIZE += 0x24
putVarChr MEMORY_FILE 0x04 RIFFSIZE long
putVarChr MEMORY_FILE 0x28 SIZE long

append
log MEMORY_FILE 0 SIZE
append
math SIZE += 0x2c
log NAME 0 SIZE MEMORY_FILE


You can make the ads go away by registering


_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Mon Aug 23, 2010 4:52 pm, edited 2 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sun Jul 04, 2010 2:46 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
Prototype *.p3d XMA2 extractor
This script extracts the XMA2 stream from Prototype Xbox 360 *.p3d files. The resulting file needs to be rebuilt to XMA1 (the -r option of xma_parse). Adding a 48kHz stereo header with my script results in toWAV-decodable files.
Code:
# *.p3d to XMA2 extractor
# version 1.1

endian big
FindLoc AUDIO string "AudioFile" 0 ""
math AUDIO += 0x0e
goto AUDIO
get NAMEL long
getDstring NAME NAMEL
get ZERO byte
get KEYL long
getDstring KEY KEYL
get ZERO byte
get DUMMY long
get XMAL long
get XMA long
savepos OFFSET
get XMA2 long
get HEADSIZE long
get DATASIZE long
math OFFSET += DATASIZE
math OFFSET += HEADSIZE
math OFFSET += 0x14
get SIZE asize
math SIZE -= OFFSET
string NAME += ".uxma"

log NAME OFFSET SIZE

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sun Jul 04, 2010 11:31 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
RIFX_convert.bms

This script changes the RIFX header to various other headers. Those RIFX files are normally contained inside Wwise *.bnk containers.

Code:
endian big
goto 0x14
get FORMAT short
get ZERO byte
get CH byte
get FREQ long
if FORMAT == 65534 # WAV
   set MEMORY_FILE binary "\x52\x49\x46\x46\x44\xde\x37\x00\x57\x41\x56\x45\x66\x6d\x74\x20\x10\x00\x00\x00\x01\x00\x02\x00\x80\xbb\x00\x00\x00\xee\x02\x00\x04\x00\x10\x00"
   get INFO long
   if INFO == 96000 # loop markers
      goto 0x48
      get SMPL long
      putVarChr MEMORY_FILE 0x24 SMPL long # append "smpl"
      set WOFFSET 0x28 # write offset (of memory file)
      for i = 0 < 15 # append reversed loop cues
         get TBR long
         reverseLong TBR
         putVarChr MEMORY_FILE WOFFSET TBR long
         math WOFFSET += 4
      next i
      set DATA 0x98
   elif INFO == 192000 # no loop markers
      set DATA 0x48
   endif
   goto DATA
   getDstring DATA 4
   #putVarChr MEMORY_FILE
   set MEMORY_FILE binary "\x52\x49\x46\x46\x44\xde\x37\x00\x57\x41\x56\x45\x66\x6d\x74\x20\x10\x00\x00\x00\x01\x00\x02\x00\x80\xbb\x00\x00\x00\xee\x02\x00\x04\x00\x10\x00"
elif FORMAT == 65535 # OGG
   print "Wwise OGG file -> run through ww2ogg"
elif FORMAT == 2 # Wii DSP
   print "Wii ADPCM - to be implemented..."
elif FORMAT == 358 # XMA
   goto 0x4c
   get SEEKL long
   savepos MYOFF
   math MYOFF += SEEKL
   math MYOFF += 0x18 # XMAc.....JUNK
   goto MYOFF
   get JUNKL long
   savepos MYOFF
   math MYOFF += JUNKL
   goto MYOFF
   get DATA long
   get XSIZE long
   savepos OFFSET
   endian little
   get SIZE asize
   math SIZE -= OFFSET
   set RIFFSIZE SIZE
   math RIFFSIZE += 0x34

   set MEMORY_FILE binary "\x52\x49\x46\x46\xb8\x59\xa7\x00\x57\x41\x56\x45\x66\x6d\x74\x20\x20\x00\x00\x00\x65\x01\x10\x00\xd6\x10\x00\x00\x01\x00\x00\x03\xe3\x9a\x00\x00\x80\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x00\x64\x61\x74\x61\x00\x58\xa7\x00"
   putVarChr MEMORY_FILE 0x04 RIFFSIZE long
   putVarChr MEMORY_FILE 0x24 FREQ long
   putVarChr MEMORY_FILE 0x31 CH byte
   putVarChr MEMORY_FILE 0x38 SIZE long

   append
   log MEMORY_FILE OFFSET SIZE
   append
   math SIZE += 0x3c
   get NAME basename
   string NAME += ".xma"
   log NAME 0 SIZE MEMORY_FILE
else
   print "Format yet unsupported by script."
   print "Please send this file to AlphaTwentyThree at Xentax!"
endif

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Sun Dec 05, 2010 8:33 pm, edited 2 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Mon Jul 05, 2010 12:27 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
FSB_scan.bms

Simply scans a file for included FSB containers. The *.xxx files of many UT3-engine based games for example can't (yet) be extracted, so it's handy to scan them for FSB containers. And of course if you're too lazy to write your own bms script for a container but you only need the contents of the contained *.fsb files, this is the way to go. Currently supports FSB3 and FSB4.
Code:
# FSB scanner
# ver. 1.1 by AlphaTwentyThree 07-07-2010
# scans for FSB3 and FSB4 containers

get BNAME basename
string BNAME += "_"
get FSIZE asize
set i 1
set XSIZE 0

for
   FindLoc OFFSET string "FSB" 0 ""
   if OFFSET != ""
      set SKIP 0
      goto OFFSET
      getDstring VER 4
      if VER == "FSB3"
         set HEADCORR 0x18
         elif VER == "FSB4"
         set HEADCORR 0x30
      else
         set SKIP 1
      endif
      if SKIP == 0   
         get FILES long
         get HEADER long
         math HEADER += HEADCORR
         get SIZE long
         if size > 0
            set TSIZE SIZE
            math TSIZE += XSIZE
            if TSIZE < FSIZE
               math SIZE += HEADER
               set NAME BNAME
               string NAME += i
               string NAME += ".fsb"
               log NAME OFFSET SIZE
               math i += 1
               math XSIZE += SIZE # size of extracted files
               math OFFSET += SIZE
               goto OFFSET
            endif
         endif
      endif
   else
      cleanexit
   endif
next
Note: The extracted files are named after their origin container.

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Wed Jul 07, 2010 11:47 am, edited 4 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Mon Jul 05, 2010 2:09 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
addIMAADPCMheader.bms

Adds a standard IMA ADPCM header to a headerless file. Filesizes are adjusted automatically.
Code:
set MEMORY_FILE binary "\x52\x49\x46\x46\x10\xe4\x03\x00\x57\x41\x56\x45\x66\x6d\x74\x20\x14\x0\x0\x0\x11\x0\x2\x0\x44\xac\x0\x0\xcc\xc1\x0\x0\x48\x0\x4\x0\x2\x0\x41\x0\x64\x61\x74\x61\xe8\xe3\x3\x0"

set FREQ 44100
set CH 2

get NAME basename
get SIZE asize
string NAME += ".wav"
set RIFFSIZE SIZE
math RIFFSIZE += 0x28
putVarChr MEMORY_FILE 0x04 RIFFSIZE long
putVarChr MEMORY_FILE 0x18 FREQ long
putVarChr MEMORY_FILE 0x24 CH byte
putVarChr MEMORY_FILE 0x2c SIZE long

append
log MEMORY_FILE 0 SIZE
append
math SIZE += 0x30
log NAME 0 SIZE MEMORY_FILE

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Wed Aug 18, 2010 12:29 am, edited 2 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Tue Jul 06, 2010 10:02 am 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
Just corrected the FSB4 scanner. The IDENT variable apparently is the number of files in the FSB container... ;)

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Wed Jul 07, 2010 11:09 am 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
Another correction for the FSB4 scanner, which iss now the FSB scanner. ;) Supports FSB3 and FSB4 now.

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Fri Jul 09, 2010 1:53 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
Corrected and updated the file deinterleaver. Now also with header skip. =)

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Tue Jul 13, 2010 12:33 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
change_freq.bms
Did it ever happen to you that you ripped a lot of files by hand or added a custom header when you realize that you've set the frequency wrong? Especially when working with GENH or when you've deleted all the headerless files you worked with before it can be really annoying. This script writes the defined frequency to a defined offset. Just set quickBMS to overwrite and there you go. Very simple. ;)
Code:
set FREQ 22050 # new frequency
set OFFSET 0x0c # offset of old frequency
get SIZE asize
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
log MEMORY_FILE 0 SIZE
append
putVarChr MEMORY_FILE OFFSET FREQ long
get NAME basename
string NAME += "_new."
get EXT extension
string NAME += EXT
log NAME 0 SIZE MEMORY_FILE


And here is a scrip to divide a given frequency by 2 (needed on e.g. decoded wave files from Resident Evil 6 Xbox 360):
Code:
set OFFSET 0x18
goto OFFSET
get FREQ long
math FREQ /= 2
get SIZE asize
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
log MEMORY_FILE 0 SIZE
append
putVarChr MEMORY_FILE OFFSET FREQ long
get NAME basename
string NAME += "_new.wav"
log NAME 0 SIZE MEMORY_FILE

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Sat Jul 07, 2012 8:07 pm, edited 2 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 17, 2010 1:30 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
add6chXMAHeader.bms
Ever got sick of extracting and rebuilding the three stereo channel sets of multichannel XMA2 files? Here's a script that adds a multichannel XMA2 header to a headerless file, which is then decodable by toWAV.
Code:
set MEMORY_FILE binary "\x52\x49\x46\x46\x14\xdd\x44\x1\x57\x41\x56\x45\x58\x4d\x41\x32\x34\x0\x0\x0\x4\x3\x0\xff\x0\xc\x34\x80\x0\xa3\x88\x80\x0\x0\xbb\x80\x10\xd6\x0\x0\x0\x0\x74\x41\x0\x1\x0\x0\x0\xb6\xa8\x0\x0\xb6\xa4\xc6\x0\x0\x1\x45\x2\x0\x2\x1\x2\x0\x8\x4\x2\x0\x80\x40\x41\x4c\x49\x47\x64\x7"
endian big
putVarChr MEMORY_FILE 0x7b4 0x78327374 long
putVarChr MEMORY_FILE 0x7b8 0x3c byte
putVarChr MEMORY_FILE 0x7c4 0x0A000100 long
putVarChr MEMORY_FILE 0x7ca 0xb4c2 short
putVarChr MEMORY_FILE 0x7d0 0xFFFF0100 long
putVarChr MEMORY_FILE 0x7e6 0x803f1600 long
putVarChr MEMORY_FILE 0x7ec 0x8026 short
putVarChr MEMORY_FILE 0x7f0 0x2601 short
putVarChr MEMORY_FILE 0x7f4 0x303f short
putVarChr MEMORY_FILE 0x7f8 0x64617461 long # data
endian little

set FREQ 48000
set BLOCKSIZE 0x3000

get NAME basename
get SIZE asize
string NAME += ".xma"
set RIFFSIZE SIZE
math RIFFSIZE += 0x7F8

putVarChr MEMORY_FILE 0x04 RIFFSIZE long
reverseLong FREQ
putVarChr MEMORY_FILE 0x20 FREQ long
reverseLong BLOCKSIZE
putVarChr MEMORY_FILE 0x2C BLOCKSIZE long
putVarChr MEMORY_FILE 0x7FC SIZE long

append
log MEMORY_FILE 0 SIZE
append
math SIZE += 0x800
log NAME 0 SIZE MEMORY_FILE
Note: I didn't set the memory to the actual header as most of it consists of zeroes.

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Wed Aug 18, 2010 12:28 am, edited 2 times in total.

Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 17, 2010 1:46 pm 
Offline
VVIP member
VVIP member
User avatar

Joined: Thu Dec 08, 2005 12:26 pm
Posts: 1925
Location: www.ZENHAX.com
Has thanked: 4 times
Have thanks: 630 times
a tip for making the MEMORY_FILE visually shorter:
replace any \x00 with \0


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 17, 2010 1:50 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
aluigi wrote:
a tip for making the MEMORY_FILE visually shorter:
replace any \x00 with \0
Right, thanks. ;)

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 17, 2010 2:29 pm 
Offline
double-veteran
double-veteran

Joined: Sun Apr 20, 2008 2:58 am
Posts: 829
Has thanked: 5 times
Have thanks: 32 times
so im guessing this is the first multichannel xma2 header? ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Sat Jul 17, 2010 4:22 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
OrangeC wrote:
so im guessing this is the first multichannel xma2 header? ;)
Well it's quite old but I never took a closer look at it because my scripting skills with quickBMS were about zero at that point of time. It's from Ace Combat 6, maybe you remember the old thread where most of the XMA2 questions were solved. ;) But yeah I guess it's the first working program to process multichannel XMA2 files. :)

_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Top
 Profile  
 
 Post subject: Re: My quickBMS scripts
PostPosted: Thu Jul 22, 2010 1:16 pm 
Offline
double-veteran
double-veteran

Joined: Mon Aug 24, 2009 10:55 pm
Posts: 984
Has thanked: 76 times
Have thanks: 596 times
STR_audio_extract.bms
Extracts the audio data from Playstation *.str video files as *.xa file (playable with the vgmstream plugin for Winamp).
Note: You'll need to RAW-copy the *.str files with IsoBuster before they can be processed.
UPDATE: new revision with multistream support! :)
Code:
# (c) 2012-02-15 by AlphaTwentyThree of XeNTaX

callfunction detectstreams 1
set SIMPLE 1
if STREAMS > 1
   set SIMPLE 0
endif

for i = 0 < STREAMS
   callfunction getstreamsize 1
   math SSIZE *= 0x930
   if SSIZE != 0
      putVarChr MEMORY_FILE SSIZE 0
      log MEMORY_FILE 0 0
      get FSIZE asize
      set OFFSET 0
      append
      DO
         set IDENT OFFSET
         math IDENT += 0x11
         goto IDENT
         get STREAM byte
         get DAT byte
         if DAT == 0x64 # audio marker
            if SIMPLE == 1
               log MEMORY_FILE OFFSET 0x930
            else
               if STREAM == i
                  log MEMORY_FILE OFFSET 0x930
               endif
            endif
         endif
         math OFFSET += 0x930
      WHILE OFFSET < FSIZE
      append
      
      callfunction CDXA 1
      get NAME basename
      if SIMPLE == 0
         string NAME += "_"
         string NAME += i
      endif
      string NAME += ".xa"
      get SIZE asize MEMORY_FILE2
      log NAME 0 SIZE MEMORY_FILE2
   endif
next i
   
startfunction detectstreams
   get FSIZE asize
   set STREAMS 0
   DO # brute-force run though whole file
      set IDENT OFFSET
      math IDENT += 0x11
      goto IDENT
      get STREAM byte
      if STREAM > STREAMS
         set STREAMS STREAM
      endif
      math OFFSET += 0x930
   WHILE OFFSET < FSIZE
endfunction

startfunction getstreamsize
   set SSIZE 0
   get FSIZE asize
   set OFFSET 0
   DO
      set IDENT OFFSET
      math IDENT += 0x11
      goto IDENT
      get STREAM byte
      if STREAM == i
         math SSIZE += 1
      endif
      math OFFSET += 0x930
   WHILE OFFSET < FSIZE
endfunction

startfunction CDXA
   log MEMORY_FILE2 0 0
   set MEMORY_FILE2 binary "\x52\x49\x46\x46\xe4\x04\xbe\x02\x43\x44\x58\x41\x66\x6d\x74\x20\x10\x0\x0\x0\x0\x0\x0\x0\x1\x55\x58\x41\x1\x0\x0\x0\x0\x0\x0\x0\x64\x61\x74\x61\xc0\x4\xbe\x2"
   get SIZE asize MEMORY_FILE
   append
   log MEMORY_FILE2 0 SIZE MEMORY_FILE
   append
   set RIFFSIZE SIZE
   math RIFFSIZE -= 8
   set DSIZE SIZE
   math DSIZE -= 0x2c
   putVarChr MEMORY_FILE2 0x04 RIFFSIZE long
   putVarChr MEMORY_FILE2 0x28 DSIZE long
endfunction



_________________
If you like what you see, why not click the little Thank You button? ;) It will definitely motivate me! :)
And here's Mr.Mouse's Facebook link: http://www.facebook.com/permalink.php?s ... 8469022795 - thanks ;)


Last edited by AlphaTwentyThree on Wed Feb 15, 2012 4:22 pm, edited 8 times in total.

Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 467 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 32  Next

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group