non-standard scale/tuning playback via midi

In my composition studies at “lietuvos muzikos ir teatro akademija” in Vilnius I came across using 12 tone techniques from Schoenberg/Hauer in combination with the Bohlen-Pierce[1] scale discovered independently by Heinz Bohlen in early 1970’s and John Pierce.

This scale is based on mainly odd frequency ratios and divides the duodezime (ratio 3:1) into 13 steps. You can listen to the equally tempered scale here:

If you want to know how to use non-standard tunings and scales in combination with your MIDI keyboard or favourite music notation software read on!

There is a very handy tool for all kind of non-standard tunings which is called Scala[2].

This tool will be the central part of the setup.
Your MIDI Sequencer, notation software or MIDI keyboard will send MIDI notes to Scala. Scala will interprete them according a loaded scale and loaded key mapping.
Scala will output MIDI notes plus pitch bend to your sampler/synthesizer.
Your sampler/synthesizer will hopefully playback the desired pitch.

To route the MIDI signals you can use the built in functions of Mac OSX, namely IAC-Driver. (Inter-Application-Communication Driver).
On Linux you can use Jack and on Windows loopMIDI or LoopBe1

Lets start with Scala…

This tool can receive MIDI Notes and Map them to a specific scale/tuning that is loaded.
Download a huge set of different scales/tunings here:

with bohlen-pierce scale loaded and corresponding mapping for chromatic notationScala is receiving MIDI Notes and translates them according to the loaded scale/tuning.
It sends the nearest MIDI note to the desired frequency and a pitch bend message to exactly match this frequency.

The problem with pitch bend in MIDI is that it affects the whole MIDI channel. Every note played back or is stil sounding over this channel will be detuned by a new pitch bend message.
Therefore Scala iterates through all available 16 MIDI channels in a cirle. That means the first note is sent on first MIDI channel, the second note on the second MIDI channel and so on. The note after the 16th note will be sent on MIDI channel 1 again.
Keep in mind, that wrong tunings may accure if still a sound is played back on channel one when already playing the 17th note. The same happens if more than 16 Notes played together as cluster.

I made a custom keymapping to playback Bohlen-Pierce scale in chromatic notation for Scala. Download here.

In Scala you can either use the menu to load scales and mappings or you use commands like in unix shell.
I rather use the command line…
For opening a scale/tuning change to the directory (File->Change directory) where you downloaded the scales linked from above. Then type LOAD bohlen-p_et.scl. This will load the equally tempered Bohlen-Pierce scale.
MIDI note relay dialogIf you download my custom mapping[*] you can load it with the command LOAD/MAPPING bohlen_pierce_sibelius.kbm.
If you now click the Relay button you can setup your MIDI input and output device.
For the input choose your MIDI keyboard or virtual MIDI cable where you send notes from your other application (Sibelius, Finale, whatever…).
The output should be your sampler or synthesizer. We will see how to use Linuxsampler for that purpose later.
There is a strange behaviour in my version of Scala. Each time i start relaying the mapping resets itself. So after i click Start Relaying i have to load the mapping again.

<< for some more info about Scala check the official website[2] >>


You also need a Sampler which plays back the MIDI notes including correct pitch bend interpretation.
Linuxsampler[3] is a very powerful and free of charge Sampler.
Use can use the Maestro Concert Grand v2 Sample Library for good sounding piano playback.
The only problem with this version is that the pitch bend range is set to zero. That means it won’t react to pitch bend values and playback in alternative tunings is not possible “out-of-the-box”.

You can change this by using the tool gigedit. It’s available from the Linuxsampler Homepage[3] or as packet in most Linux distributions packet manager. Unfortunately its not available for Mac OSX.
Open the file maestro_concert_grand_v2.gig with gigedit and right click on the instrument -> choose settings and set pitch bend range to 2. (two semitones)
Now save it – maybe under a different name maestro_concert_grand_v2_pb.gig. (pb for pitch bend)

Qsampler frontendLinuxsampler is basically a command line program. To make it easy accessible the GUI qsampler can be used.
You have to create 16 channels of the maestro_concert_grand_v2_pb.gig [0] Instrument. Every channel listens to one MIDI channel. Thats because the earlier mentioned pitch bend message affects every note played back via this channel.

You can download my configuration for Linuxsampler here.

If you want to record the music played back by Linuxsampler you have to use the Jack enabled version.
With Jack you can connect the audio output of Linuxsampler to your favourite audio recording software and record the performance.

  1. [1]Bohlen-Pierce Site
  2. [2]Scala
  3. [3]Linuxsampler

Leave a Reply

Your email address will not be published. Required fields are marked *

Spam protection: * Time limit is exhausted. Please reload CAPTCHA.