Description Usage Arguments Details Value Examples

This function performs several conceptually related types of conversion of
formant frequencies in relation to the neutral schwa sound based on the
one-tube model of the vocal tract. Case 1: if we know vocal tract length
(VTL) but not formant frequencies, `schwa()`

estimates formants
corresponding to a neutral schwa sound in this vocal tract, assuming that it
is perfectly cylindrical. Case 2: if we know the frequencies of a few lower
formants, `schwa()`

estimates the deviation of observed formant
frequencies from the neutral values expected in a perfectly cylindrical vocal
tract (based on the VTL as specified or as estimated from formant
dispersion). Case 3: if we want to geneate a sound with particular relative
formant frequencies (e.g. high F1 and low F2 relative to the schwa for this
vocal tract), `schwa()`

calculates the corresponding formant frequencies
in Hz. See examples below for an illustration of these three suggested uses.

1 2 |

`formants` |
a numeric vector of observed (measured) formant frequencies, Hz |

`vocalTract` |
the length of vocal tract, cm |

`formants_relative` |
a numeric vector of target relative formant frequencies, % deviation from schwa (see examples) |

`nForm` |
the number of formants to estimate (integer) |

`speedSound` |
speed of sound in warm air, cm/s. Stevens (2000) "Acoustic phonetics", p. 138 |

Algorithm: the expected formant dispersion is given by *speedSound / (2 *
vocalTract)*, and F1 is expected at half the value of formant dispersion. See
e.g. Stevens (2000) "Acoustic phonetics", p. 139. Basically, we estimate
vocal tract length and see if each formant is higher or lower than expected
for this vocal tract. For this to work, we have to know either the
frequencies of enough formants (not just the first two) or the true length of
the vocal tract. See also `estimateVTL`

on the algorithm for
estimating formant dispersion if VTL is not known.

Returns a list with the following components:

- vtl_measured
VTL as provided by the user, cm

- vocalTract_apparent
VTL estimated based on formants frequencies provided by the user, cm

- formantDispersion
average distance between formants, Hz

- ff_measured
formant frequencies as provided by the user, Hz

- ff_schwa
formant frequencies corresponding to a neutral schwa sound in this vocal tract, Hz

- ff_theoretical
formant frequencies corresponding to the user-provided relative formant frequencies, Hz

- ff_relative
deviation of formant frequencies from those expected for a schwa, % (e.g. if the first ff_relative is -25, it means that F1 is 25% lower than expected for a schwa in this vocal tract)

- ff_relative_semitones
deviation of formant frequencies from those expected for a schwa, semitones

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ```
## CASE 1: known VTL
# If vocal tract length is known, we calculate expected formant frequencies
schwa(vocalTract = 17.5)
schwa(vocalTract = 13, nForm = 5)
## CASE 2: known (observed) formant frequencies
# Let's take formant frequencies in three vocalizations
# (/a/, /i/, /roar/) by the same male speaker:
formants_a = c(860, 1430, 2900, 4200, 5200)
s_a = schwa(formants = formants_a)
s_a
# We get an estimate of VTL (s_a$vtl_apparent = 15.2 cm),
# same as with estimateVTL(formants_a)
# We also get theoretical schwa formants: s_a$ff_schwa
# And we get the difference (% and semitones) in observed vs expected
# formant frequencies: s_a[c('ff_relative', 'ff_relative_semitones')]
# [a]: F1 much higher than expected, F2 slightly lower
formants_i = c(300, 2700, 3400, 4400, 5300, 6400)
s_i = schwa(formants = formants_i)
s_i
# The apparent VTL is slightly smaller (14.5 cm)
# [i]: very low F1, very high F2
formants_roar = c(550, 1000, 1460, 2280, 3350,
4300, 4900, 5800, 6900, 7900)
s_roar = schwa(formants = formants_roar)
s_roar
# Note the enormous apparent VTL (22.5 cm!)
# (lowered larynx and rounded lips exaggerate the apparent size)
# s_roar$ff_relative: high F1 and low F2-F4
schwa(formants = formants_roar[1:4])
# based on F1-F4, apparent VTL is almost 28 cm!
# Since the lowest formants are the most salient,
# the apparent size is exaggerated even further
# If you know VTL, a few lower formants are enough to get
# a good estimate of the relative formant values:
schwa(formants = formants_roar[1:4], vocalTract = 19)
# NB: in this case theoretical and relative formants are calculated
# based on user-provided VTL (vtl_measured) rather than vtl_apparent
## CASE 3: from relative to absolute formant frequencies
# Say we want to generate a vowel sound with F1 20% below schwa
# and F2 40% above schwa, with VTL = 15 cm
s = schwa(formants_relative = c(-20, 40), vocalTract = 15)
# s$ff_schwa gives formant frequencies for a schwa, while
# s$ff_theoretical gives formant frequencies for a sound with
# target relative formant values (low F1, high F2)
schwa(formants = s$ff_theoretical)
``` |

soundgen documentation built on Oct. 4, 2018, 9:04 a.m.

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.