In my childhood, I used to move around a lot. We usually didn’t have allowances for things that other kids used to hold onto, to be kept between moves. Instead I collected music files and other digital treasures that pleased my young brain.

One file that’s firmly stuck in my memory was theme music for the 1996 Microsoft Interactive CD Sampler main menu. I rediscovered it on YouTube recently and it sounds like this:

The quality of the YouTube version wasn’t quite as crisp as I remembered so I set out to find the original WAV file from the CD. A simple Google search for “microsoft interactive cd sampler” brought me to the Internet Archive’s (IA) page for this CD.

view iso contents

The good folks at IA not only provide a valuable public resource but also allow easy access to the contents of this CD ISO image via some sort of middleware that allows you to peek inside an ISO to download a specific file from within.

Clicking inside, we see a table of all the files (and file paths) available for download. We were getting closer but how would we find the right WAV file given the haystack of thousands of other files?

1. Filtering

It would be useful to filter out all the non-WAV files: we can do this within Chrome DevTools console:

// Create an array with link elements that don't go to a WAV file
Array.from($$('a:not([href*=".WAV"])'))
.forEach(a => {   
    // Remove the nearest table row that contains these non-WAV files
    const b = a.closest('tr'); 
    b && b.remove();
});

2. Sorting

We need to sort WAV files by size: sound effects will be smaller files compared to music, which is generally much longer and in a higher quality.

We’re looking for the largest WAV files in this CD; in DevTools console, run:

// Select the table to be operated on
fileTable = $$('tbody')[0];

rowsSorted = Array.from(fileTable.querySelectorAll('tr'))
.sort((b,a)=>
    /* Sort rows by size, descending (column 4 = index 3) */ 
    parseFloat(a.children[3].innerText) - parseFloat(b.children[3].innerText)
);

// Clear all the rows and add them back in sorted order
while (fileTable.childElementCount) { fileTable.removeChild(fileTable.firstChild); }
rowsSorted.forEach(r=>fileTable.appendChild(r));

Found!

found

The second file in the sorted view sounded exactly like what we were after. At last, we’ve come home to memory lane: SAMPLER/SOUNDS/MAIN.WAV