Source-filter synthesis 3. The ba-da continuum

As an example, we are going to create a male [ba]-[da] continuum in six steps. The acoustic difference between [ba] and [da] is the initial F2, which is 500 Hz for [ba], and 2500 Hz for [da].

We use the same PitchTier throughout, to model a falling intonation contour:

Create PitchTier: "f0", 0.00, 0.50
Add point: 0.00, 150
Add point: 0.50, 100

The first and last 50 milliseconds are voiceless:

To PointProcess
Remove points between: 0.00, 0.05
Remove points between: 0.45, 0.50

Generate the glottal source signal:

To Sound (phonation): 44100, 0.6, 0.05, 0.7, 0.03, 3.0, 4.0

During the labial or coronal closure, the sound is almost silent, so we use an IntensityTier that models this:

Create IntensityTier: "intens", 0.00, 0.50
Add point: 0.05, 60
Add point: 0.10, 80

Generate the source signal:

plusObject: "Sound f0"
Multiply
Rename: "source"

The ten sounds are generated in a loop:

for i from 1 to 10
    f2_locus = 500 + (2500/9) * (i - 1) ; variable names start with lower case!
    Create FormantGrid: "filter", 0.0, 0.5, 9, 800, 1000, 60, 80
    Remove formant points between: 1, 0.0, 0.5
    Add formant point: 1, 0.05, 100
    Add bandwidth point: 1, 0.05, 50
    Add formant point: 2, 0.05, f2_locus
    Add bandwidth point: 2, 0.05, 100
    plusObject: "Sound source"
    Filter (no scale)
    Rename: "bada" + string$ (i)
    removeObject: "FormantGrid filter"
endfor

Clean up:

removeObject: "Sound source", "Sound f0", "IntensityTier intens",
... "PointProcess f0", "PitchTier f0"

In this example, filtering was done without automatic scaling, so that the resulting signals have equal intensities in the areas where they have equal formants. You will probably want to multiply all these signals with the same value in order to bring their amplitudes in a suitable range between -1 and +1 Pascal.

Links to this page


© ppgb, April 21, 2014