Sunday, March 29, 2015

Electric Noisebow

Electric Noisebow is imaginary virtual instrument for Kontakt sampler. It can generate drone sounds, noise soundscapes, ambient atmospheres or unfolding distortions. It is based on two sample sets I made by playing modified Reno electric guitar with an E-Bow. The clean set is built of sustained tone samples. The dirty set contains distorted sounds, I've got by putting the E-Bow very close to the vibrating string, so the string would start to collide with E-Bow housing. I edited all samples by hand to get more or less seamless loops, which are rather lengthy. Especially noise loops which span for 20-30 seconds. The instrument has double convolution reverb unit, which can be used to sweep between reverb and sound types. There is note doubler and round robin mechanism synchronized with transport position, so used in a project, the instrument should render repeatable results.
Here's example track created with one instance of the instrument in a single take:

And here's a small walk-through video:

The instrument is available at Kontakt Hub. Note, that it requires full version of Native Instruments Kontakt 4.2 or newer to work. There are 36 WAV samples, 88,2 kHz, 24 bit and the whole instrument takes about 220MB or drive space.

Monday, March 23, 2015

Note looper/recorder/player multiscript for Kontakt

This is probably pointless exercise, because it is what people use sequencers for, but I made an attempt at writing a script which would record and playback incoming note sequences in Kontakt. I was aiming at something that would allow me to record sequences while playing and then switch through them from keyboard. I took it to a point where I'm able to jam with it, e.g. trigger different drum loops and bass loops while playing another instrument. Feel free to try it out.

DOWNLOAD revision C
These are script preset files, they need to be uncompressed to multiscript preset folder (in my Windows it's "my documents\Native Instruments\Kontakt 4\presets\multiscripts"). This is multiscript, so you load it on top of some instruments. It has been written in Kontakt 4.2.4.

Update: revision C scripts should fix incompatibility with midi controllers, which use zero velocity note on command instead of note off command. Also midi learn function, may be a bit more bulletproof in this version and key cluster tape change automation functionality is fixed for reel 2. Rev C pack contains x2 and x4 versions.

It is an experiment and it is possible, it may have some bugs, so be cautious with it. I don't have the drive for bulletproof testing of this script, so take it as it is, maybe you will find it useful, but have in mind that it may go south at some point.

Note, if you re-save the preset, all recorded sequences will be saved within the preset, so you can easily make sequence sets.

A little guide to the script.

The script will memorize incoming note on and note off messages (no other MIDI data is processed) and then play back the sequence on request.
There are two versions of the script "x1" is a kind of one track recorder and "x2" has two tracks, so you can playback two sequences simultaneously.
Press record to start recording, which actually starts on first incoming note (the gap before pressing record button and receiving first note is ignored). When done press record again to stop the recording, or press play to stop recording and start playback right away. If loop switch is on, recorded sequence will play in a loop, else it will stop after last note. If auto rewind switch is on, the recorded sequence will start from beginning, when you press play button, else it will start from where it stopped.
There are 8 "tapes" per reel, so you can record up to 8 sequences which you can switch through while playing. If play button is on, tape will not change immediately, but it will be scheduled. After coming to the end of currently playing sequence, the machine will load selected sequence. This way you can switch loops "in advance". Each tape can store up to 2040 events, so a bit more than 1000 notes. If the limit is reached, the recording should stop automatically.
Play, record and tape change commands can be automated with midi keyboard. Note, that key used for automation will be unavailable for triggering notes. Tape change command has three automation modes, you can use CC message, a series of 8 keys, where pressing a key will load corresponding tape, or use one key to toggle through tapes. In last mode there is option named "select empty", when the switch is off, the machine will only toggle through recorded sequences, skipping empty tapes (as selecting empty tape will stop playback).
Snap is function, which will try to align recorded sequences to current tempo. When it's activated, the machine will wait for sync when starting to play the sequence, on play button or when restarting a loop. There is no synchronization in between, so this machine is not suitable to playback whole songs, better stick to 1-6 measure loops. So, e.g., if you pick snap resolution to whole note in 4/4 meter, have snap switches enabled and press play, the sequence will start at beginning of next measure.
Synchronize is function which will attempt to recalculate recorded times to fit a recording to different tempo. This is somewhat tricky, as the machine memorize events like this: note on, wait some thousands milliseconds, note off, etc. At the moment of recording, the quarter note length is stored, which is then being compared to current quarter note length and used to recalculate waiting times throughout the recording. Tempo changes while recording are not stored.
Key setting is simple transpose function, it will add key value to note numbers on playback.
Input port and channel settings can be used to pick a source of data, in case you have multiple controllers. "x2" version of the script has simple data router, so you can switch instruments while playing/recording. Changing channel/port can be automated with a key or CC.
There are somewhat limited "sequencing" options in Kontakt multiscript, so I made this script using "wait" command together with, $KSP_TIMER and $DISTANCE_BAR_START variables (first to detect event times, second to sync with tempo). The second variable is only being updated in Kontakt when transport is running, so synchronization will fail, if the play button is off in host. In standalone mode, it will always work, as Kontakt assumes transport is always on.

Feel free to write me, if you find it usable, yet limited or bugged in some aspect. I may look into it again.

Friday, March 6, 2015

Keyboard splitter multiscript for Kontakt

I wrote a little script for splitting keyboard in Kontakt. This may be handy, if you'd like to send part of the keyboard to one instrument and the other part to another instrument. Keyboard splitting can be done in many ways, but multiscipt is probably the most convenient to use. The script front looks like this:

You can split and re-direct data from any port/channel, in which case all midi inputs will be routed to destination channels. Or you can split selected channel only, in case you have multiply controllers connected. There is midi learn function for split position and octave transpose function for each part of the keyboard. The script is splitting "note on", "note off" and "polyphonic aftertouch" messages, however as I don't have any keyboard with poly aftertouch, this last function is somewhat untested. "Other messages" (pitch bend, CC, program change, etc.) can be blocked, send to one or both of destinations. The script sends "all notes off" messages to all channels, each time you manipulate its settings, to avoid "stuck notes".

If you think it might be useful to you, you cab grab it HERE. It will work Kontakt 4.2 or newer, I'm not sure about earlier versions. Remember that it is multiscript, you insert it in multi rack, on top of all instruments (use the "scroll" button to activate multiscript rack).

If you feel like splitting the keyboard further, you can insert copies of this script into following script slots, use specific channel in that case. E.g. split all inputs to channel 1 and channel 2 with first script, then split channel 2 to channel 2 and channel 3 with second script. With 5 script slots you could split the keyboard up to 6 parts, which, I bet, would be a lot of fun...

Thursday, March 5, 2015

Fuzzy Beeps

My first computer was ZX Spectrum, it had the most simple possible sound setup, a buzzer connected to a chip, which was generating only two states on output. Initially it seemed limited to one channel square beeps, but people found ways to generate polyphonic music within its hardware limitations. If you search for "1-bit music" phrase, you will find that it is still an active niche of chiptune music. Multichannel 1-bit tunes could be created using some form of impulse trains, as series of short waveform spikes. They had specific, one of the kind flavor, fuzzy, quiet, soft and yet somewhat razor-sharp. See here for example.
I wanted to have this flavor available in sampled form to use with modern virtual instruments. I edited a set of 44,1 kHz samples, using one sample long impulses, looped to match the tune, then mapped them to sfz, so I've got a handy 1-bit, impulse train oscillator. Here's an example of the sound. And here's a look at the waveform, compared to sine.

You can DOWNLOAD it here. There are 61 wav files, one file per note, 44,1 kHz, 8 bit (for compatibility reasons). Included simple maps for sfz and Kontakt 2 (it's just one drag and drop to place them in, so it doesn't really save you any work).

Wednesday, March 4, 2015


Index of instruments, sample sets, sound machines and Kontakt scripts:

instruments for Kontakt


Kontakt machines:
These are more Kontakt based music machines than sample packs.

Sample based instruments:

Percussion sample kits (wav):

Kontakt scripts: