{"sections":[{"title":"VoxGarblerDevlog01Section1","heading":"A nostalgia colored optimism","verbatim":false,"ast":[{"t":"para","c":[{"t":"text","s":"There's this scene in an episode of Netflix's Haunted Hotel where a character enters a possessed room that can communicate by changing the \"channel\" to play video clips from old movies and adverts to produce sentences with words from each clip."}]},{"t":"para","c":[{"t":"text","s":"Some people know these as spiritboxes, swiping across frequencies to pull audio snippets that the paranormal can influence to speak their minds."}]},{"t":"para","c":[{"t":"text","s":"My goal was simple: Create a spirit-box voice tool but instead of frequencies and video clips, it'll pull voice over lines from my extensive video game collection. Only the most campy, corny, and over-the-top voice acting would be permissible. So I started planning it all out."}]},{"t":"para","c":[{"t":"text","s":"I'd need to build an extractor for the audio samples, maybe one permutation per console, throw a little local ASR model to get my word transcripts to create a small database with all the terms. "}]},{"t":"para","c":[{"t":"text","s":"Make a little text-in-data-location-out tool and use the timestamps from the transcripts and data locations to render into a contiguous audio file. A little weekend (or two) project, surely."}]}]},{"title":"VoxGarblerDevlog01Section2","heading":"Don't Panic","verbatim":false,"ast":[{"t":"para","c":[{"t":"text","s":"If you're at all familiar with the emulation scene, it's amazing. You can think of just about any piece of hardware that ran media in the past 40 years and there is some saint with an open-source repo for making your old media usable (once extracted) on your glorious personal computer."}]},{"t":"para","c":[{"t":"text","s":"This is where my pre-lapsarian optimism was dealt with the cool, harsh reality of non-standard audio practices that were rampant in the post 16 bit era. The old ones were pretty easy, sample sound-library or sound-chip. Check how the emulators make the sounds, see if there is a tool that can help (thank you wonderful people "},{"t":"link","label":"@ffmpeg","target":"https://www.ffmpeg.org/","kind":"external"},{"t":"text","s":" "},{"t":"link","label":"@vgmstream","target":"https://github.com/vgmstream/vgmstream","kind":"external"},{"t":"text","s":". "}]},{"t":"para","c":[{"t":"text","s":"Of the over 800 000 words I ended up with over 24 titles. Two of them, so ~8% worked just out of the box. The other 22, took some work."}]},{"t":"para","c":[{"t":"text","s":"It turns out the tools to isolate the audio files for "},{"t":"link","label":"Noon from Shining Force(Saturn)^","target":"https://www.youtube.com/watch?v=IhrlM3nYzFg","kind":"external"},{"t":"text","s":" and "},{"t":"link","label":"this guy from Michigan: Report from Hell (PS2)^","target":"https://www.youtube.com/watch?v=B1dZ3ecQ30w","kind":"external"},{"t":"text","s":" are quite different. PS2 games were probably the worst offenders with seemingly a ton of latitude for how to render audio and how to store it."}]}]},{"title":"VoxGarblerDevlog01Section3","heading":"Headaches to avoid, if you are going to do this.","verbatim":false,"ast":[{"t":"para","c":[{"t":"text","s":"It turns out doing this, took a lot of work. Please review the below gotchas to not get got like I got got. Got it?"}]},{"t":"list","items":[[{"t":"text","s":"Many studios used the old \"this isn't a main character I'm going to make SOME of the audio play at the correct pitch at half the bitrate to compress more sound into the memory trick\". Which is cool (producers using the old MPCs would also record the samples sped up at 45rpm and then audition them at 33 for the same reason back in the day), but what's not cool is that because all of the audio memory segments were specifically assigned. "}],[{"t":"text","s":"When you extract, sometimes adjacent memory locations would randomly throw in a low-bit rate segment in your otherwise steady bit-rate world. Write a little spectrograph sniffer, or pitch detector to know which extractions you have to re-extract with which parameters, unless you like auditioning thousands of grunts and barks back to back to figure out that 0673-0677.wav is a half-bitrate segment because it's for a laugh, but you can't tell until you re-extract."}],[{"t":"text","s":" If a sound is doubled within a segment or stretch, it's likely a stereo file with the channels split. Fun fact, a ton of old games would only render some things in stereo, with the rest in mono, often all within the same span, and flipping back and forth, because depending if it was disk or cartridge, saving the sectors closer to where the levels are loaded, could be valuable."}],[{"t":"text","s":"If you care about language detection in multi-lingual: not all games store their different languages VO the same way. In my exploration there were two main styles: A) Same file structure, different language header  ( EN>LVL1 and JP>LVL1 ) or B) same-level files, different language ranges ( so 000-100 jp, 101-200 en, 201-300 fr, etc. ). Secret option 3 was changing the extension for different language, and doing all of the other solutions, all mixed together, in a big pile of clarity (looking at you Castle Shikigami 2). Woof."}],[{"t":"text","s":"Don't do this. If you still want to do this after my warning, send me a message on the contact form so I can give you my extractors. They're too unreliable to put on github, but they might save you a few hours of pain. Especially Playstation flavored pain."}]],"line":3},{"t":"para","c":[{"t":"text","s":"Many (so many) moons later. my game collection was extracted from their original media and digitals copies. Smooth coasting from here: throw AI at all that audio and then bask in the serenade of dulcet-toned nostalgia-trumpeting cherubims singing the AI-problem-solving gospel in the voices of my childhood heros. Right?"}]},{"t":"para","c":[{"t":"link","label":"Next Devlog","target":"vox-garbler-devlog-02","kind":"node"}]}]}],"dialogue":null,"embed":null}