What is the best option for doing something like this?
- Meticulously sampling Kontakt/etc. libraries and building everything from scratch?
- Finding an old DVD collection of early 2000s samples? (If so, which ones sound good? Didn't VSL's Cube originally come out for EXS?)
- Something else?
I built my EXS library by all the methods you mentioned. Because it's been my primary sampler ever since it came out as a standalone purchase ($200? $300? I forget) I've had more than 15 years to use every means necessary.
- In the olden days EXS could load and convert GigaSampler and Kontakt files, as well as Akai S-1000 drives in their native format. I did a lot of this. Not sure how much of this capability still exists.
- Chicken Systems' Translator has been invaluable over the decades I've owned it. Although it can be a bit inscrutable to operate, once you've got a workflow functioning you can plow through massive amounts of content. The resulting EXS Instruments usually need a little (a lot) of massaging to bring them into compliance, but that's do-able. It does not work on protected Kontakt libraries (basically anything that is labelled a "Kontakt Player" library and/or needs a serial number to activate), and it will absolutely not work on Kontakt 6 libraries - but I've digested terabytes of libraries using Translator. If the original library has the samples saved in compressed (.ncw) format then you need to first to a convert / save-out to .wav format, otherwise Translator can't read the samples. So it's usually a multi-step process:
1 - If it's practical, open the Kontakt Instrument and delete groups that contain samples that you know you won't need, like legato groups, alternate mic positions, etc. This can speed up the Translation and reduce the hailstorm of groups in the resulting EXS Instruments, but it's your choice if you want to squint and scroll through a zillion groups in Kontakt, where they're often confusingly labelled, or deal with a slower Translation and clean 'em up in EXS.
2 - Save the cleaned Instruments to a new location, include the samples, and tell Kontakt to use WAV format for the samples. It's also possible to do the group-cleaning "upside down", where you just export the groups you want from Kontakt, so you can select and export a few groups out of thousands instead of selecting and deleting all but a few groups. If you're not doing a clean-out prior to conversion, then either save the instruments one-by-one from Kontakt's file menu (make sure to tell it to include the samples and select WAV as the format), or use the Copy / Convert function (not "Batch Re-Save", the other one) to batch convert mass quantities to wav format.
3 - At this point you can use Translator, cross your fingers, but get ready for major clean-up inside the EXS Editor - deleting unwanted groups, repairing round-robin assignments, and pasting your desired set of front-panel settings and mod matrix routings.
But I've run into lots of instruments that Translator just can't convert for whatever reason. Also, sometimes the way that samples are mapped to groups / key zones makes no sense once they're converted - like instruments that just map the samples to one key each and then use scripting to lay them out into playable maps, etc. So, in cases where the samples have their root key / velocity range / mic position embedded in the file names, I often just skip Translator and get to work with my three favorite apps: A Better File Rename (for serious massaging of file names), Sample Manager / Myriad (for "normalize by group", auto-trim, batch fade, etc.), and Redmatica Keymap. Since Keymap is long gone you're out of luck on that front, and at the moment the website for Aurchitect is down, so I'm not sure of the status of Sample Manager's replacement, called Myriad, but.... you get the idea. Fix up the sample names, batch process the samples, and then use Keymap to build instruments via drag-n-drop. You can always just drag-n-drop them right into EXS but I'm still on Logic v10.2.4 and a lot of the times this does not work as advertised (maybe it's been fixed in later versions?).
Another approach, rather than attempting a direct conversion, is to use an Auto Sampler app. Apple's MainStage has a subset of the old Redmatica Autosampler's features, and can work quite well, and there are other options out there as well. Actually I've rarely used this method. I have, however, built a Logic template that's basically a manual auto-sampling template - it contains a simplified audio environment and MIDI tracks with notes ascending chromatically up the keyboard. I load the desired instrument, open its hood to look at the sample maps, figure out whether to sample chromatically or by minor thirds or whatever and how many round-robins and velocity splits I need, estimate how long the note triggers need to sustain in order to capture the entire sample and adjust the MIDI tracks as needed, and then use offline Bounce-In-Place to create long audio files that capture all the samples.
- If the samples need to be, let's say, four bars long at 120 BPM to capture the entire sample, then I put a MIDI note every eight bars, with each note lasting four bars and four bars of silence between them. Then I can use Logic's "hold option while using scissors to divide into equal regions" feature to cut the resulting zillion-bar file into equal chunks with one click.
- If the source samples are looped with no release trigger, I can just throw away the four-bar chunks in between the samples. If the source samples are looped with release triggers, then the four-bar chunks in between the looped samples are where I get the release triggers - since my source MIDI notes last exactly four bars, the first four bars will be the looped sample, and the second four bars will be the release trigger. I drag the release triggers to a separate track so that I can shorten them and process their names separately.
- If there are multiple velocity ranges to deal with, I do each velocity range as a separate pass - all the notes in one pass will have the same velocity.
- If there are mod-wheel dynamics that I can't disable, then I do each mod-wheel position as a separate pass, similar to above.
Once the tracks are captured, I then slice them as described above, manually trim the endpoints en-masse by selecting all and then dragging the right region boundary, and then rename the regions by selecting all regions in a pass and double-clicking the region name in the Inspector in the upper left of the Main Window. When you do this, type in a new name like "Sample-01" and Logic will automatically increment the "01" for each region, so now you have regions named Sample-01, Sample-02, etc. Then I use "Export audio regions as individual files" to dump them into a folder, and with some skillful use of renaming apps you can convert names from "Sample-22" to "Sample-C#3" or whatever, as long a you remember or write down the equivalencies between the region numbers and the pitch they represent. Most renaming apps let you load and save scripts so that you can create a list that will convert "-01" to "-C1", "-22" to "-A#3", etc. A calm, careful, and organized approach is key! Since each velocity range was a separate pass, you can dump each pass's regions into a separate folder and then use the rename app to insert velocity range info into the resulting file names after the fact. Some folks like to use a pair of numbers to indicate velocity range (like 81-119) but I still use good old "ppp-pp-mp-mm-mf-ff-fff" and Keymap can interpret these (amazing!) but I fear that this approach will bite me in the ass someday, so using pairs of numbers is probably safer long-term.
If there are round-robins to deal with things can get a little tricky, but I basically have each MIDI note repeat as many times as needed to trigger, say, C4 six times in a row to capture all the round-robins. Then I separate the regions and manually drag each set of round-robins to a separate track before export them into individual folders. I haven't figured out a way to automate this yet - I have to manually select the first sample in each round-robin group and drag them to a new track, then repeat for the second sample in each group, etc. That way the first track contains only rr1, the second track only rr2, etc. THEN I do the auto-increment bulk-region-rename, export regions as audio files to separate folders, and use a renamer app to fix up the names further.
(continued next post)