Eli Shapiro Eli Shapiro

Week 5: OOey-GUI!

This week I began to put the finishing touches on the instruments- more knobs and some custom graphics! 

I realized after some research that the way in which I was implementing the custom knobs last week was somewhat antiquated. That being said, I learned so much about the building blocks of the scripting language in Kontakt  and by implementing them in that manner. In Kontakt 6.0 and on, Native Instruments introduced an ancillary program simply called Kontakt Creator Tools. This program allows a developer to quickly create buttons, knobs, switches, etc, and assign those the variable names within the script of the instrument. This saves a lot of time on the front end of scripting as variables no longer need to be declared on the initialization of the instrument. Additionally, the X/Y positioning of the controllers can be manipulated through a simple dialog box rather than through the use of control parameters lines in the script. With the use of this tool, I removed the variable controls from the script, and re-implemented them through Creator Tools. 

KontaktCreatorTools.png

Unfortunately, these tools can only be used to affect the visual aspects of these controllers. The functionality must be assigned through the scripting methods I previously used. In addition to re-creating the mallet switch and reverb knob, I wanted to add a function to the Musser instrument that is characteristic of a vibraphone. I wanted to add a digital “motor.” On most vibraphones there is an electric motor that spins fans within the resonators below the bars. This serves to create a tremolo effect - The faster than fans spin the faster the tremolo is. To create a functional motor I created another custom knob that controlled the frequency setting on an LFO affecting the volume of the instrument. This was much more complex than creating a knob to control the reverb send. 

Firstly, modulators such as envelopes and LFO’s are assigned on a group level, not an instrument level. This means to keep the tremolo constant among all round robins and dynamic levels, the single knob would have to control the LFO for all twelve groups. Secondly, the syntax used to assign a control to a a modulator parameter is more complex than other engine parameters. Because modulators are assigned to groups, they have additional layers of identification that must be found to control them.  Unlike the reverb send which is identified by the labels -1 and 7 (-1 referring to an instrument level control, 7 referring to the bus it is on) Modulators are referenced through a written name, a group index, and an ID index. The ID index must be retrieved by referring to the written name. I ran into an issue when the reference of (1,MOTORFREQ) was not working. As it turns out, for a reason I do not yet understand, Group IDs in the script editor must be set to their displayed number minus 1. Group 1 is actually group 0 in the script editor. Once I realized this the knob worked as intended and I had built a functional motor onto the vibes. 

VibesWallpaperImage.png

The next big task was to truly customize the GUI (graphical user interface) with custom visuals. Though I am no graphic designer, I did my best to create at least a decent template of what the instrument could eventually look like. I used the free Japanese program “Knob Man” to create the purple knob you see on the left. The background was made with my limited photoshop skills, and I added a Musser logo to the top left instrument  badge. 

KnobManPIc.png

Here’s a clip of both the marimba and vibes playing a chorus of “Giant Steps” with some of the new features!


Thanks for reading and listening! Until next time!

Eli Shapiro




Read More
Eli Shapiro Eli Shapiro

Week 4: Going off Script

This week I implemented the Musser Vibes into Kontakt and began to learn the custom scripting process!

After the past several weeks I have really gotten the hang of sample editing work-flow in Reaper. At the onset of the project I was taking around 2 hours to fully edit and render about 20 minutes of the sample audio. Now, from importing the original audio to exporting the samples takes around 30-45 minutes. This increased efficiency is largely thanks to simply becoming more familiar with the shortcuts and actions available to me in Reaper. I sometimes find myself accidentally trying to use Reaper shortcuts in Pro Tools now! The most labor intensive part of the editing process remains the labeling of chopped-up audio “items” so that they export in a naming convention that can be easily deciphered and auto-mapped in Kontakt. There are ways to program custom actions and scripts in Reaper that would allow me to use a tuner plugin to detect the note names and auto-label each clip as such. Unfortunately, this is a bit beyond my scripting capabilities at the moment. 

Speaking of scripting, this week I took my first look at the in-program script editor in Kontakt. Within each Kontakt instrument there are a number of edit windows, the Group Editor allows you to assign names and numbers to the groups of imported notes. The Mapping editor allows you to map samples to MIDI keyboard inputs and stretch a single sample to cover a multitude of different keys (in which case the sample is pitch-shifted chromatically from the “root note”.) The wave editor allows you to edit the original audio of each sample. Finally, the scripting editor allows you to program custom UIs, controllers, and events into the instrument. 

I had two basic scripting goals this week: 

  1. Create the backbone for a custom UI starting off with a custom background image (even if the image is a placeholder.)

  2. Create a switch to allow the player the ability to swap between the two set of mallets I recorded. 

To create a custom background I first had to create a “performance view.” Normally when a default or new Kontakt instrument is created the interface looks like this: 

Something so plain is not terribly conducive to creative music production let alone user-friendly. The scripting to create a performance view is as follows: 

PerfViewCode.png

The “on init” is a callback that executes whenever the instrument is opened or “initialized.” The subsequent lines tell Kontakt to simply create a performance view for the instrument that is a certain height. The message command is left blank to refresh the message area at the bottom from any prior instrument messages. Once the performance view was created, adding a custom background was as simple as adding an image to the “resources” folder of the instrument and and setting that as the background in a dialog box.

KontaktVibesWallpaper.png

Creating a working switch was a bit more complicated. 

As to not get overly technical instead of going step-by-step here I’ll show you the code that created the switch, and the code that makes it a functional mallet selector and describe a bit about how it works: 

MalletSwitchCode.jpg

The first several lines starting with “declare ui_switch $Malletswitch” create the switch and name it , while displaying “Soft Mallets” as the default text the user sees. 

Next “on ui_control ($Malletswitch)” switched the displayed text from “Soft Mallets” to “Hard Mallets” depending on the current state of the switch. 

Finally “on note” activates each time a note is played and looks at the state of the switch. If the switch is off (0) it will mute or “disallow” any of the hard mallet groups from playing. If the switch is on (1) the soft mallet groups will be muted, playing only the hard mallet groups. 

Here’s a clip of a simple chord progress being played by the instrument with the different mallets- made possible with just one click! 

Thanks so much for reading and listening! Until next time, 

Eli Shapiro 

Read More
Eli Shapiro Eli Shapiro

Week 3: More-o-DeMorrow

This week I recorded the one-of-a-kind 5.3(!) octave marimba made by DeMorrow, and began importing into kontakt! 

As I discussed in my post from week 1, the DeMorrow is a beautiful instrument that is unfortunately stuck in a practice room that could not be worse for recording! Hard dry wall, stiff resonant drums all over, a loud airstream flowing above, all of these make that room a nightmare to record in. But, seeing as I was determined to sample this instrument I had to find a way to treat the room just enough to make it a suitable recording environment. Being inspired by the cold weather (and some acoustical knowledge of course) I knew that the easiest solution was to fill the room with as many blankets as I could find! So I gathered sheets of all shapes and sizes and scoured the percussion studio for various stands and tripods to hang them on. The end result was a DIY marimba-fort recording booth. 

DeMorrowMarimbaFort.jpg

To maintain a sleek workflow while recording, I decided to for-go a second mic as I did not find having a coincident mic terribly useful while editing the vibraphone samples. I chose to do a slightly different variation of sample numbers for the marimba as opposed to what I recorded for the vibraphone. Because the marimba is a naturally decaying instrument with no controlled sustain, having a sufficient number of round robins will greatly increase the quality of the MIDI. In general, transient based instruments favor having more round robins. This is because the burst of extra-harmonic vibrations that occur at transients are what inform the ear of the nuisances of the sound. In fact, when the transients are clipped off of recordings of various different instruments, a piano and flute for example, the sustains sound largely similar. Within a single instrument, or even a single marimba bar, hearing the same transient over and over becomes very noticeable. Because the harmonics contained within the transients are shaping what the listener hears, having a number of ever so slightly varied samples for a transient-based instrument makes it sound much more natural and humanized. 

Though different mallets greatly affect the sound I only recorded with one set of mallets. The Robert Van Sice signature series are made of yarn wrapped around a rubber core, attached to a maple wood shaft. The way the yarn is wrapped decreases the sound of the yarn on the bar which is ideal for capturing the sound of the bars. The rubber core brings out the upper-harmonics of the bars at higher dynamics without sounding “slappy” at softer levels.  Additionally, with a fully graduated set I was able to record separate ranges of the marimba with separate mallets. For A1-A3 I used the M112, Bb3-B4 M113, C5-B6 M114, and C6-C7 the M115.  

Robert Van Sice Mallets.jpg

To make up for using only a single series of mallets, I recorded the marimba at 3 dynamics, piano, mezzo-forte, and forte. These three velocity layers, along with 5 round robins, and 63 bars means I recorded 945 individual marimba samples. 

Kontakt_Velocity.png

Once they were recorded I began the process of editing them in Reaper and importing them into Kontakt. I learned much more about the functionality of implementing dynamics in  Kontakt. By creating separate groups for each dynamic level I can assign each group’s velocity range discreetly. For the first trial of this I implemented the piano samples from 1-65, mezzo-forte from 50-110, and forte from 95-127. As you may have seen these values overlap! Kontakt has the ability to apply crossfades between these velocity layers within an instrument. By overlapping the P/MF and MF/F I created a more gradual shades of dynamics within the instrument as opposed to immediate swaps. This makes for a much more musical instrument as there is much more nuisance to dynamics than discontinuous levels. 

After placing the samples and polishing the dynamics I programmed the beginning for a marimba standard, Virginia Tate by Paul Smadbeck to be played by it!



Read More
Eli Shapiro Eli Shapiro

Week 2: Good Vibes

This week I recorded over 400 samples from the Musser Vibraphone and delved into the complex interface of the Kontakt sampler. 

DSC01835.jpg

Set up the mics, grab some mallets, hit record, then whack away! Sounds easy right? 

In reality recording these samples was a test of my physical endurance, mental fortitude, and musicianship.

To create a convincing sampled instrument one must record each note several time for a variety of reasons. For one, even the best musicians cannot always make their sounds 100% consistent. If only one sample were recorded, it would sound more like a childrens toy than a real instrument. This is especially true with percussion instruments with distinct transients. To add a semblance of human-like playing to the MIDI instrument “round robins” must be recorded. This is simply playing the same note several times to capture that slight difference.I have chosen to record 3 round robins per bar. Perhaps the mallets placement was different on the second hit, or velocity was just a hair greater on the third. These inconsistencies bring life to a sampled instrument. 

Another reason to record each note several times is to create “velocity layers” within the sample instrument. When recording MIDI each note is assigned a “Velocity” value from 1-127. Though velocity can be programmed to change any number of parameters it is most often associated with volume, and to be precise the timberal variations that come from playing at different volumes. Certainly playing at different dynamic levels changes the volume, but more importantly it will often change the harmonic structure of the sound. This is apparent in almost every acoustic instrument. For example, one of the primary harmonics of a marimba bar sounds 3 octaves and a major third above the fundamental. The vibes do not have as clear harmonics that contribute to their sound and are actually quite close to sine-waves, nevertheless the variation of harmonics contributes greatly to the perception of the sound. For the scope of this project I have chosen 2 velocity layers: Piano and Forte. 

The final reason to expand the number of samples is to create a choice of mallets within the instrument. Similar to velocity, mallets have a clear effect on the timbre of the bars, but not necessarily the volume. I have chosen two different mallets, a medium-soft and medium-hard to record. In summary, with 36 bars, recorded at 2 dynamic levels with 2 different mallets, and each variation receiving 3 round robins, this totals 432 samples. 

 Unlike wind instruments, the volume of a mallet keyboard cannot be manually sustained once activated. In the case of a vibraphone, once the bar had been struck, the sound will slowly decay until the bar is no longer vibrating, or the pedal is lifted to dampen the sound. The decay time varies slightly from bar to bar and can last nearly 20 seconds from activation to silence. Though I did not feel the need to record a full decay of each bar, I did want to capture around 10 seconds of each bar ringing and decaying. This meant being as quiet as possible  while the bar was still sounding. One wrong move would result in a shirt ruffle, shoe tap, or floor creak that would come across in the recording. Even a heavy breath would disturb the pristine decrescendo of the instrument. So there I stood for recording each bar until I had amassed over and hour of recorded sounds.

DSC01834.jpg

Last week I detailed my work flow in Reaper, and this week it has remained largely the same with on added step. I need to find a way to export each clip as an individually labeled file. The process I chose was quite manual, but worked just fine (Though I am sure there is a more automated way to accomplish this. I created “Regions” for each time selection of each sample. I then labeled each region by its note name and round robin number (I.E Bb4_2). Then using the “Render Matrix” view in Reaper I can select each region to export manually. By adding the “wildcard” $region to the export name, Reaper individually names each exported clip using the name of the region I had given.  

image.jpg

Now, finally I was able to start bringing in sound to Kontakt. Thanks to the detailed labeling I had done to each sample in Reaper, mapping the sounds to their given keys in Kontakt could not have been easier. Kontakt features an “auto-map” function that will place audio clips on a certain key depending on the name of the file. There are several ways to label audio that Kontakt will recognize using this feature. Labeling the audio based on the key number (1-88) will allow Kontakt to auto map, or by simply labeling them by their note name Kontakt will read the file name and automatically assign them to the correct key. Once I did this with one round robin I created a new group and imported the next round robin. Assigning these groups to cycle within Kontakt implements them as true round robins triggering randomly on their assigned notes. So far, I only have the Piano/Hard mallet samples implemented into Kontakt.

Screen Shot 2021-01-29 at 5.41.35 PM.png

There is definitely some fine tuning to do but I now have a playable instrument! Most urgently, I need to refine the De-noise setting I am using in RX. The aggressive settings I had on to combat ambience has sanded the sound down. Though it didn't bother me while editing in Reaper, once actually playing the instrument the high-end is severely lacking. Next week I will work on continuing to streamline and improve the process while also getting in the practice room studio to record some marimba! Until then enjoy this rendition of “Twinkle Twinkle Little Star” played by the new vibraphone sample instrument! 







Thanks for reading and listening! 

Eli Shapiro






Read More
Eli Shapiro Eli Shapiro

Week 1: Testing 1.2.3.

This week, I pitched my project idea: creating a sample library of some of the amazing percussion instruments around Capital University.

This week, I began to experiment with my recording setups and started to learn the nuances of the editing process in Reaper. 

The instruments are currently housed in the percussion studio practice rooms located in the basement of the Conservatory of Music. These are great practice spaces, and the rooms are relatively soundproof, however, the excess of hard surfaces and parallel walls creates a less-than-ideal recording environment, especially when trying to capture clear, high-quality samples. The size of these keyboards makes moving them to more ideal spaces almost impossible. So this week I created test recordings in the spaces for both the Musser Vibraphone and the DeMorrow marimba. 

VibesPicture.jpg

Some of my fears were confirmed, but I was also pleasantly surprised at the quality of certain ranges of the instruments in these rooms. Generally, the low end was incredibly “boomy” leading me to believe that I might need to change the mic placement based on the range of each octave I am recording at the time to increase or decrease the presence of the fundamental frequency. 

The undesirable resonance and standing waves in the rooms were most heavily showcased in the middle of the keyboards. Some notes would resonate within the room to create an extremely muddy sound. In others, the high-harmonics would make the room buzz to create a harsh high-end in the recording. To combat this, I plan to acoustically treat the room by hanging various blankets from the walls and bringing in large foam dividers to create a make-shift isolation booth.  

In the high end I encountered another problem, the frames of the instruments would buzz or rattle when activating certain bars. Unlike the other issues which I believe can be fixed with mic placement and acoustical treating, this is an issue inherent with the instrument. Mic placement might help in reducing the issue, but I plan to treat the bars individually when this issue arises. There are several ways to silence their rattle for recordings. By tying a small piece of string between the cross boards that hold the bars this can reduce by rattle by keeping the pieces of the instrument in place. 

Here are some examples of the marimba recordings at different ranges:

Of course, the main objective of these recordings was to learn about the instruments and the spaces so I can solve these problems for the final product. However, these recordings have also doubled as wonderful DAW test subjects! I recorded these tests directly into reaper using a Scarlet 2i2 interface with a 96kHz sample rate and a 24-bit depth. (In the final product I will likely reduce the sample rate to 48kHz as is standard in Kontakt instruments to maintain good fidelity, but reduce the hard drive space needed.) Once recorded I imported the recordings into RX Elements, an iZotope software/series of plugins that specialize in cleaning and repairing audio. Within RX I applied noise removal to get rid of any unwanted ambiance or otherwise distracting noise.

DeNoisePic.jpg

I then re-imported these cleaned files into Reaper. Once in Reaper, I began experimenting with the wide variety of actions available. There is a built-in function called “Dynamic Split Items”  that is similar to “Strip Silence” in Pro Tools. This function allows me to both remove period of noise beneath a certain threshold but also split the clips at the beginning of loud enough transients. In short, this function both removes excess times, and separate each sample into its own clip. From this stage I selected every clip and using the “relative edge edit” function was able to trim the clips further and apply a fade-out to every clip. The next step was to go to each individual clips and label it with the note name, and take number. With 5 octaves and 3-6 takes of each note this is a very tedious process that I am researching some ways to streamline. Until that method is found I did practice going clip by clip and renaming them. 

DynamicSplit.png

Next week the plan is to go back into the spaces and make another set of test recordings implementing the various things I learned about the instrument and the spaces. I also plan on diving into the Kontakt implementation process to make “Alpha” versions of the instruments with the revised recordings! 

Thanks for checking out my project update! 

Until next time, 

Eli Shapiro 

Read More