an open-source digital signal processing and sound synthesis language
about · links · contact
METAFLUTE -- physical model flute
in RTcmix/insts/std


quick syntax:
SFLUTE(outskip, dur, noiseamp, length1 (samples), length2 (samples), amp[, pan])


VSFLUTE(outskip, dur, noiseamp, length1low (samples), length1high (samples), length2low (samples), length2high (samples), amp, vibfreq1low (Hz), vibfreq1high (Hz), vibfreq2low (Hz), vibfreq2high (Hz)[, pan])


BSFLUTE(outskip, dur, noiseamp, length1low (samples), length1high (samples), length2low (samples), length2high (samples), amp[, pan])


LSFLUTE(outskip, dur, noiseamp, length1 (samples), length2 (samples), amp[, pan])
    These instruments have no pfield-enabled parameters. Parameters after the [bracket] are optional and default to 0 unless otherwise noted.


METAFLUTE is a family of instruments implmenting a physical model of a flute. The different versions allow for pitch-bending (BSFLUTE, vibrato (VSFLUTE), and an 'unarticulated' (legato) attack (LSFLUTE -- SFLUTE is the basic model).


SFLUTE
   p0 = output start time (seconds)
   p1 = duration (seconds)
   p2 = noise amplitude (relative to overall amplitude; usually 0-1)
   p3 = length1 (samples, usually 5-200)
   p4 = length2 (samples, usually 5-200)
   p5 = amplitude multiplier (relative multiplier of input signal)
   p6 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0]

   Because this instrument has not been updated for pfield control,
   the older makegen control envelope sysystem should be used:

   assumes function table 1 is the noise amplitude envelope
   function table 2 is the overall amplitude envelope
 
   Parameters after the [bracket] are optional and default to 0 unless
   otherwise noted.

   Author: Brad Garton

VSFLUTE
   p0 = output start time (seconds)
   p1 = duration (seconds)
   p2 = noise amplitude (relative to overall amplitude; usually 0-1)
   p3 = length1 low value (samples, usually 5-200)
   p4 = length1 high value (samples, usually 5-200)
   p5 = length2 low value (samples, usually 5-200)
   p6 = length2 high value (samples, usually 5-200)
   p7 = amplitude multiplier (relative multiplier of input signal)
   p8 = vibrato frequency 1 low value (Hz, usually < 20)
   p9 = vibrato frequency 1 high value (Hz, usually < 20)
   p10 = vibrato frequency 2 low value (Hz, usually < 20)
   p11 = vibrato frequency 2 high value (Hz, usually < 20)
   p12 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0]

   Because this instrument has not been updated for pfield control,
   the older makegen control envelope sysystem should be used:

   assumes function table 1 is the noise amplitude envelope
   function table 2 is the overall amplitude envelope,
   function table 3 is the vibrato waveform for length1 (between p3 and p4),
   function table 4 is the vibrato waveform for length2 (between p5 and p6)

   Parameters after the [bracket] are optional and default to 0 unless
   otherwise noted.

   Author: Brad Garton

BSFLUTE
   p0 = output start time (seconds)
   p1 = duration (seconds)
   p2 = noise amplitude (relative to overall amplitude; usually 0-1)
   p3 = length1 low value (samples, usually 5-200)
   p4 = length1 high value (samples, usually 5-200)
   p5 = length2 low value (samples, usually 5-200)
   p6 = length2 high value (samples, usually 5-200)
   p7 = amplitude multiplier (relative multiplier of input signal)
   p8 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0]

   Because this instrument has not been updated for pfield control,
   the older makegen control envelope sysystem should be used:

   assumes function table 1 is the noise amplitude envelope
   function table 2 is the overall amplitude envelope,
   function table 3 is the control envelope for length1 (between p3 and p4),
   function table 4 is the control envelope for length2 (between p5 and p6)

   Parameters after the [bracket] are optional and default to 0 unless
   otherwise noted.

   Author: Brad Garton

LSFLUTE
   p0 = output start time (seconds)
   p1 = duration (seconds)
   p2 = noise amplitude (relative to overall amplitude; usually 0-1)
   p3 = length1 (samples, usually 5-200)
   p4 = length2 (samples, usually 5-200)
   p5 = amplitude multiplier (relative multiplier of input signal)
   p6 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0]

   Because this instrument has not been updated for pfield control,
   the older makegen control envelope sysystem should be used:

   assumes function table 1 is the noise amplitude envelope
   function table 2 is the overall amplitude envelope
 
   Parameters after the [bracket] are optional and default to 0 unless
   otherwise noted.

   Author: Brad Garton

METAFLUTE is a physical modeling instrument based on Perry Cook's original "Slide Flute" waveguide model. METAFLUTE has several variants: a simple flute model (SFLUTE), a model with pitch-bending (BSFLUTE), and a model with wavetable-defined vibrato (VSFLUTE). These could be consolidated into a single instrument with pfield control. Hasn't happened yet, but probably should, because there really isn't an equivalent in the STK instruments (MBLOWBOTL, etc.).

LSFLUTE does the same thing as SFLUTE, but without reinitializing the internal buffers, allowing you to get legato and slurred-note effects -- just like a REAL flute!

Usage Notes

The METAFLUTE instruments are older, reflected in the use of the old makegen control envelope and waveform table system as well as the use of different instruments to accomplish tasks (pitch bending, vibrato) that could easily be handled via pfield controls. The modeled flutes are also tricky to use; the tuning is dependent on the length of the slides and the 'context' of the note when it is played.

Specifying pitch via two slide lengths isn't optimum, but that's the way the model was constructed. (remember this was one of the first ones Perry did) Here is a rough tuning-table for length1 and length2 to produce a given note:

  c8 == middle "C", 8.00 in oct.pc

  note   length1   length2
   g7      112       25
   ab7     106       24
   a7      100       19
   bb7     95        21
   b7      89        19
   c8      84        18
   db8     79        23
   d8      75        19
   eb8     70        15
   e8      67        16
   f8      63        19
   gb8     59        17
   g8      56        17
   ab8     53        25
   a8      50        16
   bb8     47        12
   b8      44        11
   c9      42        10
   db9     39        10
   d9      37        8
   eb9     35        9
   e9      33        18
   f9      31        18
   gb9     29        39
   g9      28        14
   ab9     26        15
   a9      24        17
   bb9     23        14
   b9      22        34
   c10     21        9
These are approximate (in fact, they were done "by ear"), so your mileage may vary.

LSFLUTE will not work if more than one SFLUTE is active. An SFLUTE note has to precede it, although it can have 0 duration. To be honest, LSFLUTE isn't all that effectve (and I'm not sure it functions properly).

Sample Scores

SFLUTE:
   rtsetparams(44100, 2)
   load("METAFLUTE")

   makegen(1, 24, 1000, 0,1, 1.5,1)
   makegen(2, 24, 1000, 0,0, 0.05,1, 1.49,1, 1.5,0)
   SFLUTE(0, 1.5, 0.1, 40, 28, 7000)
   SFLUTE(1.5, 1.5, 0.1, 40, 22, 7000)


VSFLUTE:
   rtsetparams(44100, 2)
   load("METAFLUTE")
   
   makegen(1, 7, 1000, 1, 1000, 1)
   makegen(2, 7, 1000, 1, 1000, 1)
   makegen(3, 10, 1000, 1)
   makegen(4, 10, 1000, 1)
   VSFLUTE(0, 3.5, 0.1, 60,62, 30,40, 5000, 1.0,4.0, 1.0,5.0)
   VSFLUTE(4, 3.5, 0.1, 48,50, 30,45, 5000, 4.0,7.0, 3.0,5.0)


BSFLUTE:
   rtsetparams(44100, 2)
   load("METAFLUTE")

   makegen(1, 7, 1000, 1, 1000, 1)
   makegen(2, 7, 1000, 1, 1000, 1)
   makegen(3, 7, 1000, 0, 500, 1, 500, 0)
   makegen(4, 7, 1000, 0, 1000, 1)
   BSFLUTE(0, 1.5, 0.1, 40,50, 28,40, 5000)


LSFLUTE:
   rtsetparams(44100, 2) 
   load("METAFLUTE")
   
   makegen(1, 24, 1000, 0, 1, 1.5, 1)
   makegen(2, 24, 1000, 0, 1, 1.5, 1)
   SFLUTE(0.000000, 0.100000, 0.050000, 100.000000, 100.000000, 5000.000000)
   LSFLUTE(0.000000, 0.280000, 0.040000, 50.000000, 16.000000, 5000.000000)
   LSFLUTE(0.280000, 0.280000, 0.040000, 50.000000, 26.000000, 5000.000000)
   LSFLUTE(0.560000, 0.280000, 0.040000, 20.000000, 46.000000, 5000.000000)
   LSFLUTE(0.840000, 0.280000, 0.040000, 50.000000, 16.000000, 5000.000000)


See Also

makegen, CLAR, MBLOWBOTL, MBLOWHOLE, MBRASS, MCLAR, MSAXOFONY