▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ █ █ █ █ █ █ █ █ █ █ █▄ ▄█ ▄ █ █ █ ▄▄▄█ ▄▄▄▄▄█ █ ▄ █ ▄▄▄█ █ █ █ █▄█ █ █ █ █▄▄▄█ █▄▄▄▄▄ █ █ █ █ █▄▄▄ █ █ █ █ █▄▄▄█ ▄▄▄█▄▄▄▄▄ █ █ █▄█ █ ▄▄▄█ █ █ █ ▄ █ █ █▄▄▄ ▄▄▄▄▄█ █ █ █ █ █▄▄▄█ █▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄█ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ █ █ █ █ █ █ █ █ ▄ █ █ █ █ █ █ █▄ ▄█ █▄█ █ ▄▄▄█ █ ▄ █ █▄█ █ █▄█ █ ▄▄▄▄▄█ ▄▄▄▄▄█ █ █ █ █ █▄▄▄ █ █▄█ █ █ █ █▄▄▄▄▄█ █▄▄▄▄▄ █ █ █ ▄ █ ▄▄▄█ █ █ ▄ ██▄ ▄█▄▄▄▄▄ █▄▄▄▄▄ █ █ █ █ █ █ █ █▄▄▄ █ ▄ █ █▄█ █ █ █ ▄▄▄▄▄█ █▄▄▄▄▄█ █ █▄▄▄█ █▄▄█ █▄▄█▄▄▄▄▄▄▄█ █▄█ █▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ ┏━━┓━┏━━━┓┏━┓┏━┓━━━━┏━━━┓━━━━━━━━━━━━━━━━━┏━━━┓━━━━━━┏┓━━━━━━ ┃┏┓┃━┃┏━┓┃┃┃┗┛┃┃━━━━┃┏━┓┃━━━━━━━━━━━━━━━━━┗┓┏┓┃━━━━━┏┛┗┓━━━━━ ┃┗┛┗┓┃┃━┗┛┃┏┓┏┓┃━━━━┃┃━┗┛┏━━┓━┏┓┏┓┏━━┓━━━━━┃┃┃┃┏━━┓━┗┓┏┛┏━━┓━ ┃┏━┓┃┃┃┏━┓┃┃┃┃┃┃━━━━┃┃┏━┓┗━┓┃━┃┗┛┃┃┏┓┃━━━━━┃┃┃┃┗━┓┃━━┃┃━┗━┓┃━ ┃┗━┛┃┃┗┻━┃┃┃┃┃┃┃━━━━┃┗┻━┃┃┗┛┗┓┃┃┃┃┃┃━┫━━━━┏┛┗┛┃┃┗┛┗┓━┃┗┓┃┗┛┗┓ ┗━━━┛┗━━━┛┗┛┗┛┗┛━━━━┗━━━┛┗━━━┛┗┻┻┛┗━━┛━━━━┗━━━┛┗━━━┛━┗━┛┗━━━┛ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ~*~*~*~*~*~*~*~*~*~*~*~ Tales of the Abyss (USA PS2) TO7BGM.CVM Contents (AKA How To Access And Understand Literally All Of Abyss's BGM Data) ~*~*~*~*~*~*~*~*~*~*~*~ I. Overview a) Purpose b) Format/Method/List Explanations c) Unused BGM Spotlight II. Format a) CVM Container b) BGM Audio Files III. Method a) ADX Compressed Audio b) PSF2 Sequenced Audio IV. List of All Audio V. References, Additional Resources, & Credits a) Unused/Potentially Unused Audio b) Overworld BGM Sound Fonts c) Tools & Additional Thanks d) Xentax Thread on CVM Files e) Contact f) History ~*~*~*~*~*~*~*~*~*~*~*~ I. OVERVIEW ~*~*~*~*~*~*~*~*~*~*~*~ -----------------------------a) PURPOSE----------------------------- This document is a survey of all audio content within the "TO7BGM" container in the Tales of the Abyss ROM. This appears to include all background music for the game, with the exception of those used in animated cutscenes. It is specifically documenting Tales of the Abyss for PS2. However, the "Method" segment may prove useful for looking at audio in PS2 games that use similar formats. ---------------b) FORMAT / METHOD / LIST EXPLANATIONS--------------- The "Format" section describes to the best of my ability how background music audio is stored in the ROM. Most background music files are ADX audio files. The overworld themes however are PSF2 sequenced audio. The "Method" section outlines the process and tools I used to survey the BGM contents for this document, so that others may replicate it or build on this knowledge if they desire. It should provide a very solid foundation for anyone interested in modding Tales of the Abyss BGM audio. The "List of All Audio" section is exactly what it says on the tin: a list of every BGM track in TO7BGM.CVM, identified by the official track name - if applicable - or game context otherwise. There are 2 full-length tracks (see below) I am reasonably confident are UNUSED; there are also a few more of slightly lesser interest which I also don't recognize. The vast majority are identified and clearly labeled. Note: BGM for animated cutsenes - "Promise", "In Between 1 and 0", etc. - are not contained in TO7BGM.CVM, and are beyond the scope of this document. They are probably encoded as video in TO7MOV.CVM. Note: The version of "Song by Tear" with organ accompaniment does not appear to be located in TO7BGM.CVM. I believe this is the only BGM used during gameplay (not animated cutscene) that is missing. ---------------------c) UNUSED BGM SPOTLIGHT------------------------ There are at least 2 tracks which appear to be unused in the final version of the game. These are outlined in the "Contents" section, but I will list them here as well for quick reference: TOA_SFXBGM_D020.ADX - unused dungeon theme; features what appears to be the Belkend theme's percussive loop at increased BPM. TOA_SFXBGM_T017.ADX - unused town theme; appears to be a solemn arrangement of St. Binah's theme. I have extracted these for anyone interested to listen to. See Section V part a. ~*~*~*~*~*~*~*~*~*~*~*~ II. FORMAT ~*~*~*~*~*~*~*~*~*~*~*~ -------------------------a) CVM CONTAINER--------------------------- Within the Tales of the Abyss ISO is a .CVM file with all of the game's background music data, titled "TO7BGM.CVM". Viewing TO7BGM.CVM's header in a hex editor shows the following: "ROFSROFSBLD Ver.1.52 2003-06-09" This (apparently) indicates it was compiled using a proprietary tool called CRI ROFS which is why it can't immediately be mounted like an .iso. Fortunately, the tool DkZ Studio 0.92 is fully capable of viewing and extracting the contents of this .CVM, so I did not investigate the nature of it further. For those interested, there is some information on the structure of such CVM files in a forum thread here: https://forum.xentax.com/viewtopic.php?f=21&t=2776&hilit=cvm In case the above link ever disappears, I have copied important contents from the thread with attribution at the end of this document, in hopes that the information will be preserved if it is needed in the future. See Section V part d. ------------------------b) BGM AUDIO FILES-------------------------- Most of the contents of TO7BGM.CVM are ADX-format audio files. DkZ Studio 0.92 is able to play back files of this format so they can be easily identified. The files are named in the convention "TOA_SFXBGM_[LETTER]###.ADX". [LETTER] appears to categorize the files approximately as follows: B - Battle BGM C - Van's and the God-Generals' Themes D - Dungeon BGM E - Event Music [F - apparently unused] I - Additional/Secondary Town BGM M - Mini-Game BGM * MD - Overworld BGM - different format; see below * T - Town BGM X - Fonic Hymn Vocals * The exception are the files labeled with the "MD" prefix, which are of the following file types as opposed to .ADX: .BD .HD .SQ These correspond to what is effectively MIDI data. The Overworld BGM are not included as rendered audio but rather as sequence and sampler/instrument data. "SQ" files are sequence data (the specific composition, or the particular song), and "HD" and "BD" files define the instrument set and sample collection, respectively. These are sub-files of a "complete" standard file type called PSF2 (.psf2), which can be opened in certain programs to listen as audio. The PSF2 file requires additional meta-data along with the BD, HD, and SQ files to be reconstructed and work properly. The needed meta-data is located elsewhere in the ROM and must be extracted to re-compile playable PSF2 files. The full process is outlined below under "III. Method" part b, for those interested. However, if the intention is simply to insert a different composition but use the same sound library, it is my belief that only changing the .SQ file will suffice. This has not been tested, but I believe that reconstructing PSF2 files is only needed to reproduce the exact sound of the audio and sound libraries outside of the ROM. ~*~*~*~*~*~*~*~*~*~*~*~ III. METHOD ~*~*~*~*~*~*~*~*~*~*~*~ -----------------------a) ADX COMPRESSED AUDIO---------------------- Recommended Tools: - DkZ Studio 0.92 Public Beta (2006) - VGAudio by TheAlexBarney (optional; to convert .ADX to .WAV) 1. Mount the Tales of the Abyss .iso and extract "TO7.CVM" A variety of tools can be used to mount the .iso, including Windows 10 file explorer or DkZ Studio. Once mounted, you will see various sub-directories and files with the naming convention "TO7..." [presumably for "'Tales of' 7"]. Locate the file "TO7BGM.CVM" and extract/copy it separately to another location. TO7BGM.CVM is the container which holds the background music audio files for Tales of the Abyss, and is the focus of this document. 2. Open TO7BGM.CVM in DkZ Studio I recommend DkZ Studio as it is able to read and extract CVM containers as well as play back ADX audio files, making the process extremely straightforward. You can open it using a different tool if you prefer/have one at your perusal. 3. Double-click any ADX audio file to hear playback of the music track. You can also export, import, and otherwise manage the files using this tool to suit your needs. Note: I have not tested implementing changes this way, only exporting audio. If implementation is tested down the line this document will be updated to reflect that. Note: If you run into any issues opening the CVM or playing back ADX audio files, be sure to verify you are using the 0.92 Public Beta version of DkZ Studio. 4. OPTIONAL: If desired, export ADX audio file(s) from DkZ Studio, and convert to WAV to listen on other devices. VGAudio by TheAlexBarney is one tool available for this purpose. This was used to export the unused BGM, which are not available by any other means. See Section V part c for more details on tools used and other documentation referenced. ----------------------b) PSF2 SEQUENCED AUDIO----------------------- Recommended Tools: - DkZ Studio 0.92 Public Beta (export files from ROM) - QuickBMS + irxarc_bin.bms (export IRX files from IRXARC.BIN) - mkPSF2 (rebuild PSF2 files from parts) - VGMTrans (play back PSF2 files as audio) 1. Mount the Tales of the Abyss .iso in DkZ Studio and export the following files: - IRXARC.BIN - TO7BGM.CVM (if not already done) 2. Open TO7BGM.CVM in DkZ Studio and export the .SQ, .HD, and .BD files you are interested in. HD and BD files define the instrument library the song will use, and the SQ file is the sequence data for the notes of that particular song. Below are listed the specific corresponding files you would want for each overworld theme: "New World" (SQ 00, BD/HD 00) - TOA_SFXBGM_MD00.SQ - TOA_SFXBGM_MD00.BD - TOA_SFXBGM_MD00.HD "Qliphoth" (SQ 01, BD/HD 01) - TOA_SFXBGM_MD01.SQ - TOA_SFXBGM_MD01.BD - TOA_SFXBGM_MD01.HD "Guilt, Duty, And..." (SQ 02, BD/HD 00) - TOA_SFXBGM_MD02.SQ - TOA_SFXBGM_MD00.BD - TOA_SFXBGM_MD00.HD "The Last Chapter" (SQ 03, BD/HD 02) - TOA_SFXBGM_MD03.SQ - TOA_SFXBGM_MD02.BD - TOA_SFXBGM_MD02.HD "Wedge" (SQ 05, BD/HD 00) - TOA_SFXBGM_MD05.SQ - TOA_SFXBGM_MD00.BD - TOA_SFXBGM_MD00.HD "Wings of Hope" (SQ 06, BD/HD 00) - TOA_SFXBGM_MD06.SQ - TOA_SFXBGM_MD00.BD - TOA_SFXBGM_MD00.HD 3. Use QuickBMS and the irxarc_bin.bms script to extract several necessary IRX files from IRXARC.BIN, which was exported from the .iso in Step 1. This can be done in the GUI by launching quickbms.exe, navigating to and selecting the irxarc_bin.bms file, and then navigating to and selecting the IRXARC.BIN file. Then indicate the output folder - I recommend having a separate dedicated folder for this as it will spit out quite a few IRX files. The reason for this step is that the sequence and instrument data in the SQ, BD, and HD files cannot be re-combined into the correct music without additional game-specific configuration information, which is contained in these IRX files. If you cannot find the irxarc_bin.bms script I have included it in the references at the bottom of this guide, along with information on the other tools used. See Section V part c. CHECKPOINT: You should now have all of the following files: Extracted from IRXARC.BIN via QuickBMS: - modhsyn.irx - modmidi.irx Exported from TO7BGM.CVM via DkZ Studio: - the .SQ, .BD, and .HD files corresponding to your desired song 4. Use mkPSF2 to re-construct a .PSF2 file from its pieces. This process is very specific so I will copy the instructions here to be followed exactly. [NOTE: The mkPSF2 starter kit should include the following modules: - PSF2.IRX - SQ.IRX - LIBDSD.IRX Make sure you have these. See Section V part c if unsure/missing.] Create a folder and place all of the following files in it: - PSF2.IRX - SQ.IRX - LIBSD.IRX - modhsyn.irx - modmidi.irx - TOA_SFXBGM_MD00.SQ (or whatever SQ file you chose) - TOA_SFXBGM_MD00.BD (or whatever BD file you chose) - TOA_SFXBGM_MD00.HD (or whatever HD file you chose) Rename the .SQ, .BD, and .HD files to "DEFAULT" so you have: - DEFAULT.SQ - DEFAULT.BD - DEFAULT.HD Create a new file in a plain text editor. Copy and paste the 4 lines of text below, then start an empty line beneath by pressing "enter" after "16383": libsd.irx modhsyn.irx modmidi.irx sq.irx -r = 5 -d = 16383 *Be sure to include the empty line after the 4th line of text!* Then save this file as "PSF2.INI" [NOT ".txt"]. Double-check you have all of the following in the folder; if you do, you are ready: - PSF2.IRX - SQ.IRX - LIBSD.IRX - modhsyn.irx - modmidi.irx - DEFAULT.SQ - DEFAULT.BD - DEFAULT.HD - PSF2.INI Finally, run mkPSF2 from the command line with the syntax: mkpsf2 "Name_of_Outupt_PSF2_File" "Folder_With_Source_Files" If successful, the output should be a .PSF2 file. 5. Open the .PSF2 file in VGMTrans, and listen as desired. Launch VGMTrans and open the .PSF2 file. If the "Collections" window is not open, open it under "View." You should see a collection titled "Sony PS2 Seq." Click on it to select it. The green Play arrow should now be interactible; click on it, and listen to see if the audio sounds right! VGMTrans can also view and edit the original SQ, HD, and BD files within. Additionally, it can export PSF2 file components as MIDI sequences + sound fonts. Right click on "Sony PS2 Seq" collection to do this. ~*~*~*~*~*~*~*~*~*~*~*~ IV. LIST OF ALL AUDIO ~*~*~*~*~*~*~*~*~*~*~*~ - All files in TO7BGM.CVM contain the prefix "TOA_SFXBGM_". This is omitted below. "B000" implies the full title "TOA_SFXBGM_B000". - Lack of a suffix implies ".ADX" file type. All files in TO7BGM.CVM are .ADX audio, with the sole exception of the sequenced Overworld themes, which are labeled appropriately. "B000" implies the full filename "TOA_SFXBGM_B000.ADX". - The BGM for the Labyrinth mini-game does not have an official name as it was not included in the soundtrack release. It appears to have been used as a placeholder, possibly due to its small file size, so it is mentioned VERY frequently. It is referred to here as "PLACEHOLDER/LABYRINTH". - Each section is labeled with my best guess for what the letter indicates. All files in TO7BGM.CVM: ["B" - Battle] B000 = The Arrow Was Shot B001 = The Edge of a Decision B002 = Never Surrender B003 = Fang Which Wants Blood B004 = Awkward Justice B005 = Meaning of Birth B006 = At the Time of Farewell B007 = A Place in the Sun B008 = Finish the Promise B009 = Eternal Mind B010 = Everlasting Fight B011 = Time to Raise The Cross B012 = Victory! B013 = Game Over ["C" - Commandant] C000 = Van C001 = Van - Truth C002 = Oracle - Coercion C003 = Oracle - Sorrow C004 = Oracle - Conspiracy ["D" - Dungeon] D001 = Nature Dungeon D002 = PLACEHOLDER/LABYRINTH D003 = Cheagle Woods D004 = Tartarus [note: D005 does not exist.] D006 = Fubras River D007 = Choral Castle D008 = Casvelt Ferry D009 = Abandoned Factory D010 = Zao Ruins D011 = PLACEHOLDER/LABYRINTH D012 = Deo Pass D013 = Akzeriuth Tunnel 14 D014 = PLACEHOLDER/LABYRINTH D015 = Wyon Mirrored Cave D016 = Aramis Flooded Cavern D017 = Oracle Headquarters D018 = Theor Forest D019 = PLACEHOLDER/LABYRINTH ** D020 = UNUSED - See Below ** D021 = PLACEHOLDER/LABYRINTH D022 = Shurrey Hills D023 = PLACEHOLDER/LABYRINTH D024 = Mt. Roneal D025 = Crimson Pride [no intro] D026 = Farthest Place - Glint D027 = Zaleho Volcano D028 = Crimson Pride [with intro] D029 = Feres Island D030 = Sheaf of Soul D031 = Farthest Place D032 = Farthest Place - Premonition D033 = Farthest Place - Threat D034 = The Glorious Land Eldrant D035 = Mushroom Road D036 = Flow when Being Dammed Up D037 = Sign of the Quiet Dark D038 = Relic of Wandering Frenzy ** This BGM uses a percussive loop similar to the City of Fon Machine theme, but has a much brighter tone. I am reasonably confident that it is never used in the game. If you have evidence to concretely prove or disprove this please let me know. ["E" - Event] E000 = Mirrors [short] E001 = PLACEHOLDER/LABYRINTH E002 = Mirrors [full, includes chorus] E003 = Belief E004 = Pleasantness E005 = Guidepost ** E006 = UNSURE - See Below ** E007 = Confrontation E008 = Wish and Sadness E009 = Crisis E010 = Serious E011 = Miserable Spectacle E012 = Scramble E013 = Happiness in my Hand E014 = Song by Tear [starts on hymn 2, vocals only, does not repeat] E015 = The Frequenter ** A very short 13-second loop that sounds like a "something scary/bad/intense just happened" cue. It was not included in the official soundtrack. I am not sure where it is used, if at all. If you recognize it please let me know. ["F" - Unknown] F000 = PLACEHOLDER/LABYRINTH F001 = PLACEHOLDER/LABYRINTH F002 = PLACEHOLDER/LABYRINTH F003 = PLACEHOLDER/LABYRINTH F004 = PLACEHOLDER/LABYRINTH F005 = PLACEHOLDER/LABYRINTH F006 = PLACEHOLDER/LABYRINTH Research on other parts of the ROM would be needed for any indication of what "F" BGM may have been used for, if any traces exist. Something to do with Fonons seems a fair guess. ["I" - Inside] [note: I000 does not exist.] I001 = PLACEHOLDER/LABYRINTH I002 = PLACEHOLDER/LABYRINTH I003 = PLACEHOLDER/LABYRINTH I004 = PLACEHOLDER/LABYRINTH I005 = Arena I006 = PLACEHOLDER/LABYRINTH [note: I007 does not exist.] I008 = Kingdom of the Sky I009 = Kingdom of Sky - Confusion I010 = PLACEHOLDER/LABYRINTH I011 = Lorelei Order's Base [note: I012 does not exist.] I013 = Blue Royal Palace I014 = PLACEHOLDER/LABYRINTH I015 = PLACEHOLDER/LABYRINTH I016 = Casino [note: I017 does not exist.] I018 = PLACEHOLDER/LABYRINTH Best guess for "I" is "Inside" because it seems to label secondary BGM for specific buildings within a town. The label is admittedly a stretch applied to Baticul's "Kingdom of Sky;" if accurate, though, it could indicate the Daath BGM was at one point intended specifically for inside the cathedral. ["M" for Minigame] M000 = PLACEHOLDER/LABYRINTH M001 = Theme of Mini Game M002 = Tales of Dragon Buster Game Over M002B = Dragon Buster Game Over [retro original] M003 = Tales of Dragon Buster Theme M003B = Dragon Buster Theme [retro original] M004 = Tales of Dragon Buster Room Guardian M004B = Dragon Buster Room Guardian [retro original] M005 = Tales of Dragon Buster Ending M005B = Dragon Buster Ending [retro original] * M006 = UNSURE - See Below * * M007 = UNSURE - M006, but faster; as if time is running out * ** M008 = UNSURE - See Below ** * I do not recognize these themes but they certainly sound like mini-game themes. M007 is a faster variation of M006. Possibly from Nam Cobanda Isle. If you recognize them please let me know. ** Different mini-game theme I also don't recognize. A bit jazzy. If you recognize it please let me know. Note: this is very likely where "PLACEHOLDER/LABYRINTH" is actually meant to be for the game to reference, and not acting as a placeholder. ["MD" for MIDI] TOA_SFXBGM_MD00.BD - Samples: Various TOA_SFXBGM_MD00.HD - Instruments: Various TOA_SFXBGM_MD00.SQ - New World TOA_SFXBGM_MD01.BD - Samples: Qliphoth TOA_SFXBGM_MD01.HD - Instruments: Qliphoth TOA_SFXBGM_MD01.SQ - Qliphoth TOA_SFXBGM_MD02.BD - Samples: The Last Chapter TOA_SFXBGM_MD02.HD - Instruments: The Last Chapter TOA_SFXBGM_MD02.SQ - Guilt, Duty, and... TOA_SFXBGM_MD03.SQ - The Last Chapter [note: TOA_SFXBGM_MD04.SQ does not exist.] TOA_SFXBGM_MD05.SQ - Wedge TOA_SFXBGM_MD06.SQ - Wings of Hope These are the overworld themes, and they are encoded as sequences (effectively MIDI) rather than pre-rendered audio. This takes up less storage space but is more CPU intensive. It is exclusively overworld BGM that is encoded this way. "SQ" files are the unique sequence data for specific compositions - the notes and rhythm of a song - and "BD"/"HD" files provide the source samples and instrumentation that play to give it a particular sound. "Qliphoth" and "The Last Chapter" have unique instrumentation (MD01.HD/BD and MD02.HD/BD respectively). All other field BGM use MD00.HD and MD00.BD. I have exported the 00, 01, and 02 instrument/sample data sets as .sf2 soundfonts (and all BGM sequences as MIDI to recombine). See Section V part b. ["S" - Start] S000 = Abyss ["T" - Town] T000 = The Place of Relaxation T001 = The Royal City of Light T002 = The Grocer's Village T003 = The Fortified City T004 = The Frontier Fortress T005 = PLACEHOLDER/LABYRINTH T006 = The Distribution Base T007 = Desert Oasis T008 = The Mining Town T009 = The City of Guardians T010 = PLACEHOLDER/LABYRINTH T011 = Port Town T012 = The Floating Imperial City T013 = The City of Craftsmen T014 = The Silvery Snowlands T015 = The City of Fon Machines T016 = The Hidden Village * T017 = UNUSED - solemn version of "The Fortified City" * T018 = PLACEHOLDER/LABYRINTH T019 = PLACEHOLDER/LABYRINTH T020 = PLACEHOLDER/LABYRINTH * This is an arrangement of the St. Binah BGM that has a very sombre tone. I am reasonably confident that it is never used in the game. If you have evidence to concretely prove or disprove this please let me know. X001 = Fonic Hymn 1 X002 = Fonic Hymn 2 X003 = Fonic Hymn 3 X004 = Fonic Hymn 4 X005 = Fonic Hymn 5 X006 = Fonic Hymn 6 X007 = Fonic Hymn 7 ~*~*~*~*~*~*~*~*~*~*~*~ V. References, Additional Resources, & Credits ~*~*~*~*~*~*~*~*~*~*~*~ ----------------a) UNUSED / POTENTIALLY UNUSED AUDIO---------------- All ADX audio files marked with an asterisk (not in the official soundtrack release and unrecognized/unused) have been exported, converted to WAV format, and uploaded to this folder. There is also a zipped archive for download. If you recognize any of them, please let me know: https://www.mediafire.com/folder/bkmcnrsu89lk8/Abyss_Unknown_BGM If this is unavailable for any reason, and you are unable to contact me, anyone should be able to retrieve them by following the steps outlined in METHOD. Contents: D020 - Features sped-up version of Belkend percussion T017 - Sombre arrangement of St. Binah theme E006 - Very short intense-sounding loop M006 - Unrecognized Mini-game theme M007 - M006 sped up as if running out of time M008 - Unrecognized mini-game theme 2 --------------------b) OVERWORLD BGM SOUND FONTS-------------------- After reconstructing the PSF2 files from HD/BD and SQ files as well as data from IRX files (see METHOD), I was able to export the instrument/sample data as .sf2 sound fonts using VGMTrans. I have uploaded them here, along with the sequences exported as MIDI: https://www.mediafire.com/folder/hwsnbisvnts7q/Abyss_Overworld_Soundfonts If this is unavailable for any reason, and you are unable to contact me, anyone should be able to retrieve them by following the steps outlined in METHOD. Soundfont Contents: MD00.sf2 - default, use for all except below exceptions MD01.sf2 - for "Qliphoth" MD02.sf2 - for "The Last Chapter" MIDI Contents: MD00.mid - "New World" (use MD00.SF2) MD01.mid - "Qliphoth" (use MD01.SF2) MD02.mid - "Guilt, Duty, and..." (use MD00.SF2) MD03.mid - "The Last Chapter" (use MD02.SF2) MD05.mid - "Wedge" (use MD00.SF2) MD06.mid - "Wings of Hope" (use MD00.SF2) -------------------c) TOOLS & ADDITIONAL THANKS--------------------- Enormous thank you to the devs for all tools used here: DkZ Studio 0.92 Public Beta (2006) by aBScroll VGAudio 2.2.1.0 by TheAlexBarney QuickBMS 0.11.0 by Luigi Auriemma irxarc_bin.bms script by RetingencyPlan mkPSF2 by Neill Corlett VGMTrans by Mike - DkZ Studio by aBScroll Excellent tool for viewing and exporting contents of CVS files, as well as paying back ADX audio files - VGAudio by TheAlexBarney Used to convert ADX files to WAV to more easily share unused audio assets. - QuickBMS by Luigi Auriemma + irxarc_bin.bms by RetingencyPlan QuickBMS is an excellent tool with lots of specialized scripts to extract files from games. I imagine every ROMHacker has used QuickBMS at some point. irxarc_bin.bms is a specific script to extract IRX files needed to reconstruct the PSF2 overworld sound libraries from the file IRXARC.BIN. It is a short script so I will copy its contents here for posterity: [START SCRIPT TRANSCRIPTION] # BANDAI NAMCO Studios (as NAMCO TALES STUDIO, PS2 era) - irxarc.bin # --- # Tales of Symphonia (PS2) - from "Symphonia Team" # Tales of the Abyss (PS2) - from "Symphonia Team" open FDSE "irxarc.bin" get irxarc_files long math file_info_offset = 0x40 math file_name_offset = 0x50 math file_offset = 0x180 for i = 0 < irxarc_files goto file_info_offset get file_size long goto file_name_offset getdstring file_name 0x30 get irx_parameters string log file_name file_offset file_size math file_offset + file_size math file_info_offset = file_offset math file_name_offset = file_offset math file_name_offset + 0x10 math file_offset + 0x140 next i [END SCRIPT TRANSCRIPTION] - mkPSF2 by Neill Corlett mkPSF2 is able to rebuild PSF2 sequenced audio files from parts in the ROM, so you can recreate and listen to the existing overworld themes as well as build new PSF2 audio files from your own sequence files if desired. mkPSF2 is also available as part of VGMToolbox. If you have VGMToolbox, the modules referenced by the script are located under \external\psf2\modules. I personally had difficulty running mkPSF2 through the VGMToolbox interface, but running mkPSF2 directly via command line as outlined in METHOD worked perfectly. - VGMTrans by Mike VGMTrans is able to open PSF2 files and play them back, as well as make edits to the SQ/BD/HD files within for testing. It can be used to test changes to sequenced audio without re-inserting into the ROM, as well as recreate and listen to sequenced audio from the game externally. Additionally, it can export PSF2 files as MIDI and sound font data that can be understood by other programs. Additional Thanks: Thanks to the user "cloud" on romhack.org for pointing me in the direction of DkZ Studio as a tool to look at .CVM. This was exactly what I needed to get started. Thread: https://romhack.org/viewtopic.php?f=1&t=3666 Transcript of cloud's post below in case link goes down. [START POST TRANSCRIPT] Topic: "Re: [PS2] Tales Of The Abyss - Fichiers CVM" User cloud, October 30 2011, 12:39pm: Je vais répondre à ton mp directement dans le topic pour que tous le monde puisse avoir la réponse. Il faut que tu te serves de Dkz Studio. La version 0.92 prend en charge les .CVM. C'est hyper simple, tu ouvres ton iso avec Dkz Studio, tu extraits ton .CVM, tu ouvres ton .CVM avec Dkz studio, tu extraits ton fichier, tu le modifies, tu importes ton fichier dans le .CVM, et tu importes ton .CVM dans ton iso. Et c'est fini, comme ça pas besoin de reconstruire l'iso à chaque fois, sa prends quelques secondes voir 2, 3 minutes selon la vitesse de ton PC. Garde quand-même une iso propre de côté, car tout changement est immédiat, et donc non réversible, à moins de garder un original de chaque fichier que tu modifies ( c'est se que j'ai fais ). PS: Moi aussi je n'arrive pas à me servir de leurs outils, je me sers que de comptoe qui est dedans, car le texte des skits et des dialogues sont compresser contrairement au menu. Et de TIM2 Tool pour extraire les images du jeu. Sinon toujours pas de projet de traduction de prévu, donc il en est de même pour un patch :wink: PPS: J'ai modifié mon message dans le topic d'Abyss pour parler de Dkz Studio. [END POST TRANSCRIPT] -------------------d) XENTAX THREAD ON CVM FILES-------------------- The most comprehensive reference I found on the structure of CVM files is here: https://forum.xentax.com/viewtopic.php?f=21&t=2776&hilit=cvm In case this link ever disappears but the knowledge is needed, I have copied its important contents below. [START THREAD TRANSCRIPT] Thread: "ROFS Compression\?Encryption? Method User Anomy, Mon Sep 10, 2007, 12:03pm: I learned this today while doing some research on the type of compression\encryption method used on the CVM file I was trying to decode. If you open a CVM file(or possibly any archive file) in a hex program and see something along the lines of ROFSROFSBLD Ver# Date within the header, it was compiled using a tool called CRI ROFS from a japanese company called CRI MIDDLEWARE http://www.cri-mw.co.jp/index_e.htm [NOTE: dead link] To learn more about the how the format works go here.(Poorly Translated by Google) http://translate.google.com/translate?h ... f%26sa%3DG [NOTE: dead link] And finally a list of games that will most likely have had this tool used on them. http://www.cri-mw.co.jp/index_e.htm [NOTE: dead link] Since as the site states the file system used is the ISO9660, maybe someone will be able to come up with a tool for extracting files from these archives files that have used the ROFSBLD TOOL. I hope this information proves to be useful and someone can put it to good use cause I sure could use tool for this :p User Anomy, Mon Sep 10, 2007, 12:40pm: Another bit of information I can only make a little sense out since it is translated from Japanese, and I have had no success using it, but someone else may realize what is being done here better than I. Original Source http://homepage1.nifty.com/~hin/rofs.html [NOTE: dead link] -------------------------------------------------------------------- ROFS , By turning off the 0x1800 byte from the forefront of the file (header), and change the extension to .iso, Daemon tools can mount it. With the header where 0x1800 is gone, then it seems that its retained with the file system ( ISO9660 ) ROFS (CVM) file format memo B = byte (8bit) W = word (16bit) L = long word (32bit) -- 0x0000-0xb7ff - ROFS version - GAME TITLE and PUBLISHER_NAME etc. offset 0xb800 1W: first data length = A 1L: START address START (little endian) 1L: START address START (big endian) 1L: FAT SIZE (little endian) 1L: FAT SIZE (big endian) 1B: 0x68?? 1B: data length X XB: ?? (date?) 4B: 01 00 00 01 ?? 2B: 01 00 or 01 01 01 01 as for the FAT SIZE-related data end? 1W: next data length = B here byte become A. Reading B Byte next, it processes.   However, because completely it has become the same contents as A in regard to data which is read next, as for meaning in regard to data of B you do not understand well. For verification? -- offset 0xb800 + A + B 1W: data length C :DATA FIRST 1L: START address START (little endian) 1L: START address START (big endian) FILE START address = 0x800*START + 0x1800 1L: file size (little endian) 1L: file size (big endian) 1B: 0x68 ?? 1B: data length Y YB: ?? (date?) 4B: 01 00 00 01 ?? 1B: file name length Z ZB: file name 2B: 3B 31 (flag?) 0 fill are done last 1W: In case of data length of following data D 0x0000, it adjusts the length of the following data and is packed (?)There is a place where it is done. The data other than 0x00 appears to has the necessity to search.   The quantities of all to here byte become C. Reading D Byte next, it processes. However, it adjusts and is packed (?)When it was done, data length stops being agreeable.   After returning to DATA FIRST, to FAT SIZE + 0x1800 it repeats processing. -------------------------------------------------------------------- Hope this helps a bit. User alera, Mon Feb 25, 2008, 11:51pm: long ago I looked into this format and found out that it is actualy a normal iso with a slightly diferent header. I also found one file that had a compressed or encrypted file index. so those are a no go :( This is what I had(not much) struct ROFSRootEntry { int Offset; short Unknown; std::string Name; }; struct ROFSEntry { unsigned short EntrySize; // Entry Header Size unsigned int Address; // File start offset unsigned int Size; // File Size unsigned char Unk0[10]; unsigned short Unk; std::string Name; }; if I remember correctly the root entries are a listing of all directories in the file. from there the rofsentry structure is used to navigate the actual directory and file structure. a flag in the rofsentry structure tells if the entry is a directory(0x02) or a file(0x01) but I don't know where that was ^_^; when the entry is a directory the offset leads to another listing of directories or files. the file is padded to 4096 or 2048 I don't remember. (directories always have "." and ".." entries) First read the root entries at offset ??? load them into memory and use that to get the entire file list(with rofsentry structure) it is just a bunch of interconnecting nodes. That japanese document was incomplete when I first saw it... and the auto translation makes it even more dificult to read hehe. Sorry I don't have a working program :( User roxfan, Sun Feb 19, 2012, 10:36pm: I had some plans for a long writeup, but I think I'll just attach the sources and everyone can see for themselves. Briefly, ROFS is a repackaged ISO9660 (CD filesystem) image, with some added headers and optionally encrypted file table. I managed to completely reverse both packing and encryption algos, the only thing you'll need is the password the game uses to open the file (if password is used). The password can usually be found in the binary next to the CVM filename, or strings like "VOL", "ROFS" or "ADXF_AddRofsVol". It seems CRI is not using this format anymore but maybe this will help people working on some older games. [END THREAD TRANSCRIPT] -----------------------------e) CONTACT----------------------------- leo_arcanaxix@protonmail.com ArcanaXIX on ROMHacking.net I don't check these often, but I do check them, and I will get back to you eventually. -----------------------------f) HISTORY----------------------------- Created 1/24/2022. Updated 1/24/2022 to correct soundfont/sequence combinations for Overworld MIDI. Thanks to Scarfy for inspiring me to make this.