Here are (some of) the results of my experimenting with "re-tuning" bagpipe midifiles to match the temperament of real bagpipes. I used a Ruby script to add a pitchbend event to each (chanter) note, so that the resulting note frequencies should match "MacNeill" tuning. [And see the bottom of the page for another script that does this for live playing...]

Most of the files use the GM Bassoon voice as the "Bagpipe", but I've included a couple with the GM Bagpipe as well. The original 'Scotland the Brave' from the other site uses a Clarinet rather than the Bassoon, but the retuned file is switched to Bassoon too.

I see that Jeremy has posted a link to this page, so perhaps I should add a little more info for those arriving from that direction. The tuning table in the script was derived from the table of tunings in Ewan Macpherson's page on the topic. I chose the 'MacNeill' offsets (cents from Equal Temerament), which may not have been the best. If you're playing with it, you can easily adjust the table to your liking.

(The midifiles I converted were chosen pretty much at random — not for any reasons of taste!)


All these have the same adjusted tuning except for the unretuned originals.

from 'Bagpipe Midi Files' site (http://www.cs.uleth.ca/~kaminski/midi/)

"Devil's Kitchen"
original: devkitchenO.mid
bassoon voice: devkitchenB.mid
bagpipe voice: devkitchenP.mid
"Irish Washerwoman"
original: irishwasherO.mid
bassoon voice: irishwasherB.mid
bagpipe voice: irishwasherP.mid

from 'Canadian Bagpipe Links' (http://web.ripnet.com/~nimmos/music.html)

"Scotland the Brave"
original: scotland_the_brave.mid
bassoon: scotland_the_braveB.mid

Here's a zip of the script itself. It includes a (hopefully adequate) README, and the necessary 'midifile.rb' utility module.:

pipebend.zip
[Please note -- midifile.rb as supplied won't work in Ruby 1.9 (because of a drastic change they've made!). See the link below to the midifile_rb page itself for the reason and a fix.]

There is a main page for midifile.rb where you can find a fuller description and some other utilities that use it.

...And one more thing...(:-)

It dawned on me that it's fairly easy in Linux to connect a live MIDI stream from an input device to the stdin of a program, and similarly to connect the output stream of the program to drive a MIDI device. So I developed another Ruby script that does in real-time approximately what the above script does for files. You can send MIDI from your keyboard to the script and have it send appropriately 'bent' notes to a device mimicking a bagpipe. Here is bagpipe.rb — directly downloadable. It needs 'midifile.rb' too, which you can get from either the other script zip-file or the above page link.

On my system, the command is something like:

   ./bagpipe.rb </dev/snd/midiC1D0 >/dev/snd/midiC1D0
(Adjust according to your own connections.)


                                Pete Goodeve
                                Berkeley, California

                e-mail: pete@GoodeveCa.NET
                         pete.goodeve@computer.org