This is a simple program to position the finger holes on a wind instrument.
You will need Python 2. I have included some example instrument design scripts. You can try these out by running them like any normal Python program, eg:
python three_hole_pipe.py
To make your own design, I suggest copying one of these example scripts and altering the parameters to suit.
Notes:
Notes can either be given in scientific pitch notation ('A4', 'Bb5', 'F#3', etc), or as frequencies in Hz (eg 440.0).
You can specify cross fingerings, and fingerings in multiple registers. If a perfect arrangement of finger hole positions isn't possible, errors will be minimized by distributing them over all the different fingerings.
There are a variety of options which in combination will let you create a design with a fairly even spacing of holes and with none too close together or too far apart.
Deviations in bore area allow an instrument to stay in tune over several registers. A simple way to create a bore area deviation is to drill a hole and then cover it. The flute example uses this idea to produce an instrument that is in fairly good tune over two octaves, while still allowing many cross-fingerings.
The code contains support for conical instruments. However this is as yet untested.
Notes on medieval and renaissance instrument making, with some practical discussion of trade-offs imposed by instrument physics (effects of tube shapes, hole sizes, bore deviations):
Some further notes on instrument making:
My software doesn't attempt to correct for the mouthpiece's effective length. What I suggest is that you cut your tube to approximately the right length, then measure the frequency it produces and use this to trim it by a final amount. To measure the frequency: On Linux I like LINGOT. On Android, gStrings is quite good. There is also an experimental tuner script included in the package above -- this currently requires Linux and numpy.
PVC Flutes are easy to make and sound awesome. Aluminium pipe also works well.