Custom Marvel vs Capcom 2
HomeExtract DataUpdate DataCustomize CharactersConvert SongsUpdate Voice SamplesCreate ISOBurn to CD

Updating Voice Samples

This process is Dreamcast only and does not work for any other version. You cannot modify the NAOMI/Arcade ROM with these steps. You can make limited modifications to PS2 and Xbox OG with this process: those possibilities are noted below in the Filenames section.

Steps:
  1. Get Ready
  2. Filenames
  3. Convert your audio to WAV
  4. Use DTPKDump to splice that in
  5. Finish

Get Ready

To update the voice samples we require these tools:
  • Python 3.x: Note that new versions of the python interpreter might cause issues: please hit me up so I can update as needed.
  • DTPKDump.py: this lets you examine and update the DTPK.
  • Audacity: this handles conversion and downsampling of the audio clips.
You want these tools but they aren't required:
  • DSFDTPK.py: this tool lets us repackage the DTPK into DSF so that it can be played back in foobar.
  • foobar2000: this can play back DSF files.
Download all the voice clips and sound effects you want to splice in.

The Dreamcast version of MvC2 uses DTPK (Digital Track PacKage) files to hold banks of voice samples and sound effects. These banks can contain 8bit PCM (raw uncompressed audio), 16bit PCM, or 4bit Yamaha ADPCM (compressed) samples. No clips in MvC2-DC use 16bit PCM due to space constraints. Most sound effects use 4bit YADPCM. Most voice samples, where the character says something, use 8bit PCM.

Warning: One important but usually forgotten aspect of MvC2-DC technical design is the limitations of Dreamcast hardware. The Dreamcast has 2MB available for audio. A single match needs to load 6 character audio files plus the common audio effects. The common audio effects file (SE_COMN) is 931k. The character files are limited to about 156k. (Apparently the Capcom devs were trying for a maximum of 936k used for all loaded characters.) Please stay within that file size limit to avoid potential issues. Yes, this is a challenge: you may need to downsample further in order to avoid issues. It is indeed possible to blow past that file limit, but consider that if you do this for more than one character you are going to have issues. 220kb is about the largest possible: once you hit 240kb you will start experiencing audio glitching and failures.


Filenames

These are the character to DTPK filename associations for MvC2-Dreamcast:

Character Filename Tracks Samples
Ryu PL00_VOI.BIN 44 23
Zangief PL01_VOI.BIN 44 24
Guile PL02_VOI.BIN 44 20
Morrigan PL03_VOI.BIN 44 20
Anakaris PL04_VOI.BIN 49 19
Strider PL05_VOI.BIN 44 19
Cyclops PL06_VOI.BIN 44 19
Wolverine PL07_VOI.BIN 44 18
Psylocke PL08_VOI.BIN 44 20
Iceman PL09_VOI.BIN 44 14
Rogue PL0A_VOI.BIN 44 17
Captain America PL0B_VOI.BIN 44 21
Spider-Man PL0C_VOI.BIN 44 25
Hulk PL0D_VOI.BIN 44 16
Venom PL0E_VOI.BIN 44 25
DrDoom PL0F_VOI.BIN 44 21
Tron PL10_VOI.BIN 50 33
Jill PL11_VOI.BIN 53 33
Hayato PL12_VOI.BIN 44 25
Ruby PL13_VOI.BIN 44 30
SonSon PL14_VOI.BIN 44 29
Amingo PL15_VOI.BIN 58 38
Marrow PL16_VOI.BIN 46 27
Cable PL17_VOI.BIN 44 27
Abyss1 PL18_VOI.BIN 44 14
Abyss2 PL19_VOI.BIN 44 16
Abyss3 PL1A_VOI.BIN 44 14
Chun-Li PL1B_VOI.BIN 44 26
Megaman PL1C_VOI.BIN 46 27
Roll PL1D_VOI.BIN 46 26
Akuma PL1E_VOI.BIN 44 22
BBHood PL1F_VOI.BIN 44 29
Felicia PL20_VOI.BIN 44 24
Charlie PL21_VOI.BIN 44 12
Sakura PL22_VOI.BIN 44 24
Dan PL23_VOI.BIN 49 23
Cammy PL24_VOI.BIN 44 19
Dhalsim PL25_VOI.BIN 44 20
Bison PL26_VOI.BIN 47 24
Ken PL27_VOI.BIN 44 22
Gambit PL28_VOI.BIN 44 25
Juggernaut PL29_VOI.BIN 44 17
Storm PL2A_VOI.BIN 44 16
Sabretooth PL2B_VOI.BIN 44 20
Magneto PL2C_VOI.BIN 44 22
Shuma Gorath PL2D_VOI.BIN 44 19
War Machine PL2E_VOI.BIN 44 28
Silver Samurai PL2F_VOI.BIN 44 12
Omega Red PL30_VOI.BIN 44 27
Spiral PL31_VOI.BIN 44 14
Colossus PL32_VOI.BIN 44 13
Iron Man PL33_VOI.BIN 44 21
Sentinel PL34_VOI.BIN 51 25
Blackheart PL35_VOI.BIN 44 19
Thanos PL36_VOI.BIN 44 24
Jin PL37_VOI.BIN 46 29
Captain Commando PL38_VOI.BIN 44 26
Bonerine PL39_VOI.BIN 44 18
Kobun PL3A_VOI.BIN 57 31
(General match effects) SE_COMN.BIN 80 120
(Intro screen effects) SE_SYUK.BIN 3 4
(Credits voice-over) SE_STAF.BIN 1 2


Note that MvC2-PS2 uses the exact same SE_COMN, SE_SYUK, and SE_STAF DTPK files. MvC2-XboxOG uses those three as well but they are named differently: Xbox file_860 is the Dreamcast's SE_COMN, Xbox file_123 is the Dreamcast's SE_STAF, and Xbox file_124 is the Dreamcast's SE_SYUK. The individual character voice files are not the same format on PS2 or Xbox.


Convert your audio to WAV

First, we need to convert to WAV. There are a ton of options in this space. As noted earlier, MvC2-DC voice clips (things like "Lock on!" and other stated phrase) should be 8bit PCM audio. (Some use Yamaha ADPCM 4bit, but we don't really have a good tool to convert to that format.) Additionally, we are going to want to be using audio downsampled to mono PCM with a frequency between 8000Hz up to a maximum of about 23000Hz. (The Dreamcast can handle higher frequencies: MvC2-DC just doesn't use them due to the size constraints.) Aiming for around 11025Hz would be a good plan.

The best downloadable conversion software is Audacity, an up-to-date open source audio editor that imports most popular audio formats. Once you've imported your voice clip into Audacity, you can export it to WAV using File : Export Audio ... : Export to computer. You want to select Channels : Mono, Sample Rate: 11025 Hz, Encoding: Unsigned 8-bit PCM. (Note that Audacity doesn't save the Mono/Stereo preference, so remember to swap back to Mono each time.)

Awave Studio will let you create 4bit Yamaha ADPCM files ("YADPCM" in that UI) if you want to try using YADPCM chunks. At some Future Point I might update DTPKDump to handle conversion to YADPCM, but I haven't written that code yet.

Use DTPKDump to splice that in

Now that we have our voice clips in a format the Dreamcast can use, we need to figure out what samples we want to replace. So first let's figure out what samples are in the file. To do this for Ryu (PL00), we would run this command:
dtpkdump.py -wavconv PL00_VOI.bin
That will extract out the 23 audio samples to WAV. (DTPKDump here is converting the 22 YADPCM chunks to PCM WAV, and then we have the 1 native PCM WAV sample too.) We can now play those files back in any WAV player. Let's say we wanted to update the "Hadouken!" sound. We play the WAV files until we find what we need, which just so happens to be the file "PL00_VOI_00_21_SPD_15_Sample_03_Rate_E9.wav". The filename syntax is "Original_filename Group_ID Track_ID SamplePlaybackdef SampleId DTPK_Rate". All we care about here, though is "Sample_03". That indicates that we will need to update sample 3 with our new audio.
dtpkdump.py -splicepcm 3 MyWavSample PL00_VOI.BIN -o PL00_NEW.BIN
DTPKDump automatically handles everything else: that command line says to inject MyWavSample as the new sample 3, and to create PL00_NEW.BIN as the output file. If we also want to update the "Shinkuu!" sound, which we note is filename "PL00_VOI_00_20_SPD_14_Sample_08_Rate_E9.wav", then our command line would be:
dtpkdump.py -splicepcm 3 MyWavSample -splicepcm 8 MyOtherWavSample PL00_VOI.BIN -o PL00_NEW.BIN
, and so forth. You can create a monstrous command line splicing in all the samples at one time, or you can do it one at a time, each time updating the file you created with the previous step.

Note again that MvC2 character audio files have a fairly low size limit, which DTPKDump will warn you about. If you are using 11kHz 8bit PCM audio, you probably won't bloat the file too much. 22kHz clips or longer clips might cause problems, though. Note that in some situations longer audio is going to be clipped by the game, so long voice clips are usually not ideal.

Verifying DTPK playback

You can test your DTPK files by using DSFDTPK.py and foobar2000. First we need to convert the DTPK to DSF (Dreamcast Sound Format) by running the command line:
dsfdtpk.py aicadrv.bin -a pl00_new.bin
This will produce a DSFLib containing the AICA driver and all the audio samples. The miniDSF files contain links to entries in that DSFLib. Now we play those miniDSFs back in foobar2000 to make sure everything sounds correct. You can play back all the files, or you can just check the files we touched. If you remember we have touched the samples used in "PL00_VOI_00_21_SPD_15_Sample_03_Rate_E9.wav" and "PL00_VOI_00_20_SPD_14_Sample_08_Rate_E9.wav". Those are miniDSF files "PL00_VOI_00_20.minidsf" and "PL00_VOI_00_21.minidsf" - everything before the "SPD" is the miniDSF identifier.


Finishing Up

Copy your updated DTPKs to your mix

Copy your updated DTPKs to the appropriate filename on the mix now. So if we have a PL00_NEW.BIN, copy that to PL00_VOI.bin on the disc image, and so forth. That's it - this should be pretty easy once you've done it a couple times.



Links
Credits
Disclaimer