MUMT 307: Music & Audio Computing II [course page]
Winter 2012 :: Final Project
Hannah Robertson [home page]

Mimicking the fipple sound in STK


Jump to:
[ Objective ] [ Implementation ] [ Challenges ] [ Future work ] [ Resources ] [ Bibliography ]


This project involved mimicking a fipple excitation source for a penny-whistle class in STK. The fipple is a type of mouthpiece found on penny-whistles (aka tin whistles), recorders, and other end-blown flutes. A fipple consists of a narrow windway called the flue that directs a thin stream of air across a blade, or labium lip. The induced pressure variation then excites resonances in a whistle body. Figure 1 shows a two-dimensional diagram of the fipple; the flue jet is on the left, the blade is the dark region on the top right. The sound is driven by air blown through the flue jet from left to right.

Figure 1: Two-dimensional diagram of fipple; h is the width of the flue jet; W is the flue channel width, which is distance between the flue exit and the blade; and H is the diameter of resonance tube (Verge et al. 1997).

As discussed at length by Verge et al. in the context of recorders (1997), the physics and modeling of fipples is extremely complicated. Many factors affect the sound production in a fipple: jet oscillations, vortex shedding at the edge of the blade, and turbulence in the mouth of the instrument (Verge et al. 1997). When attempting to model the fipple, each of these factors must be carefully instantiated and fine-tuned in order to actually create realistic sound --- or any sound at all! For this reason, this project does not attempt to tackle all the variables that affect these factors independently. Instead, slight variations were made to the excitation method of the STK Flute class and it was attached to a multi-hole penny-whistle resonator (created for MUMT 618!). Since the end goal of this project was a realistic fipple sound for realtime playing, noise and jet variables were then selected to mimic slow and fast articulation in both low and high registers.

In addition to modifications made directly to the penny-whistle class (stk::Feadog), this implementation can be tried with both SKINI scores and realtime MIDI input. An accompanying MaxMSP patch allows realtime MIDI variables to be modified and tweaked.

Try it for yourself: [ Code and usage ]



The physics behind the fipple are complicated, due to the chaotic nature of the turbulence that occurs. Verge et al. (1997) derive an equation for the fipple coupled to a resonator with a single variable, where the pressure at any point in the system can be calculated relative to the incoming jet velocity Uj, and such that "during steady-state operation, the pressure source Δp is the main driving mechanism, while during the early stages of the attack transient the sound production is dominated by the effects of the jet velocity fluctuations." This dynamic pressure source,

consists of the following terms:

Block diagram

In general, this fipple model is based on the excitation input to Perry Cook's slide flute model (1992). Figure 2 shows the block diagram of his model, which has been implemented in stk::Flute

Figure 2: Block diagram for a simple jet wind instrument model (Cook 1992).

The excitation portion of this model consists of the everything except the "1 Pole filter" and "dl", the main resonance delay line. These two items make up the resonator for Cook's model, and for this project are replaced by the multi-tone hole resonator created for the stk::Feadog class. The "*" terms to the right of dl2 make up the non-linear flue jet drive, the Δpjd term. "Noise gen" is the noise envelope discussed above as part of the remaining Δp terms. "Amplitude envelope" is a term representing the amplitude of the input velocity. This fipple model contains an additional filter to block dc reflection; it is located just before the "r" gain in Figure 2.

In this fipple model, the delay line "dl2" represents the flue channel width (W in Figure 1), which is equivalent to the jet length, or distance air travels from the lips to the blade, in a transverse flute (Fletcher 1991). It is included in the model to account for the "phase shift along the air jet caused by the finite wave propagation speed" (Karjalainen et al. 1991). Empirical measures have shown the phase delay to be ~.25 the phase of means that the delay line length must be

While by definition the jet delay is fixed in a fipple mouthpiece -- it is impossible to change the distance from the flue exit to the blade, since the whole fipple is a solid piece of plastic, wood, or metal! -- the effects of increased jet length on the sound excitation are inversely proportional to the effects of increased jet velocity. Since jet velocity *is* variable in a fipple, the delay line is a useful modeling tool to represent the jet velocity. Longer jet lengths can be balanced by greater blowing pressure (jet velocity!), so the faster the jet velocity, the shorter the delay line needs to be, and the higher the output resonance.

The jet delay is necessarily proportional to the delay in the resonator: even though the multi-tone hole penny-whistle model has a constant total delay line length, each note has its own ideal delay line length, which corresponds to the frequency of the sounding note, which of course has to do with the sum of the delay lines between the excitation source and the "open" holes. Rossing (1991) gives the average relation between the jet delay in meters l and the resonant frequency f in Hertz as

l ≈ 0.14f -1/2,

which corresponds to an octave jump for every factor of 2 the pressure (or jet velocity) increases. For every set of fingerings, the penny-whistle can play two different octaves, where the jet delay delay line of the higher octave is half the delay line length of the lower octave. Setting the jet delay ratio much larger than this ratio mimics overblowing -- an interesting, if painful, effect!

Functions and variables

Several additional functions have been built into the stk::Feadog class to allow manipulation of fipple variables:

[ Top ]


There were two main challenges in this project. The first was figuring out what variables to focus on and what range of adjustments to allow the user. After starting out with too many variables, which quickly made tuning unwieldy and hard to predict, it was cut back to contain just the variables used for mouthpiece control in the stk::Flute class.

The second challenge was finding combinations of the variables (noise, amplitude, and jet delay) that would give good, realistic sound, as even these few variables are tricky to manipulate dynamically. While it is possible to create more "realistic" whistle sounds than those created by the basic reed table excitation model (as in the BlowHole class) for specific steady states, this success goes out the window when the fipple model is combined with multiple tone holes and used to play multiple notes in a row. The transient behavior is not well behaved or controlled by this model, due both to the adverse filtering affects of the tone hole scattering junctions and the difficulty of selecting global delay line length ratios.

Examples are provided with the code so that these behaviors can be played with both through a MaxMSP patch that allows interaction with the individual variables and demonstration SKINI files. To try it , see the code and usage page.

[ Top ]

Future work

The next step is hooking up air controller and mapping the musician breath input directly to the variables in this STK class. Unlike Boehm flutes, for which both air jet velocity and air jet direction must be taken into account (da Silva et al. 2005), only jet velocity need be measured for the fipple input, as air jet direction is based on the physical structure of the mouthpiece itself and so hard-coded into each model.

Additional work could focus on adding variables to better map between the physical constants in a whistle build (slit width, distance between flue opening and blade, etc.) and the response of the model. Other work is currently being done to study the actual response of edgetone excitation methods; results from these studies could be incorporated into more realistic response of this model.

[ Top ]



Jump to:
[ Objective ] [ Implementation ] [ Challenges ] [ Future work ] [ Resources ] [ Bibliography ]