# [a] with only F1-F3 visible, with no stochasticity
e = getSpectralEnvelope(nr = 512, nc = 50, duration = 300,
formants = soundgen:::convertStringToFormants('a'),
temperature = 0, plot = TRUE, col = heat.colors(150))
# image(t(e)) # to plot the output on a linear scale instead of dB
# some "wiggling" of specified formants plus extra formants on top
e = getSpectralEnvelope(nr = 512, nc = 50,
formants = c(860, 1430, 2900),
temperature = 0.1, formantDepStoch = 1, plot = TRUE)
# a schwa based on variable length of vocal tract
e = getSpectralEnvelope(nr = 512, nc = 100, formants = NA,
vocalTract = list(time = c(0, .4, 1), value = c(13, 18, 17)),
temperature = .1, plot = TRUE)
# no formants at all, only lip radiation
e = getSpectralEnvelope(nr = 512, nc = 50, lipRad = 6,
formants = NA, temperature = 0, plot = FALSE)
plot(e[, 1], type = 'l') # linear scale
plot(20 * log10(e[, 1]), type = 'l') # dB scale - 6 dB/oct
# mouth opening
e = getSpectralEnvelope(nr = 512, nc = 50,
vocalTract = 16, plot = TRUE, lipRad = 6, noseRad = 4,
mouth = data.frame(time = c(0, .5, 1), value = c(0, 0, .5)))
# scale formant amplitude and/or bandwidth
e1 = getSpectralEnvelope(nr = 512, nc = 50,
formants = soundgen:::convertStringToFormants('a'),
formantWidth = 1, formantDep = 1) # defaults
e2 = getSpectralEnvelope(nr = 512, nc = 50,
formants = soundgen:::convertStringToFormants('a'),
formantWidth = 1.5, formantDep = 1.5)
plot(as.numeric(rownames(e2)), 20 * log10(e2[, 1]),
type = 'l', xlab = 'KHz', ylab = 'dB', col = 'red', lty = 2)
points(as.numeric(rownames(e1)), 20 * log10(e1[, 1]), type = 'l')
# manual specification of formants
e3 = getSpectralEnvelope(
nr = 512, nc = 50, samplingRate = 16000, plot = TRUE,
formants = list(
f1 = list(freq = c(900, 500), amp = c(30, 35), width = c(80, 50)),
f2 = list(freq = c(1900, 2500), amp = c(25, 30), width = 100),
f3 = list(freq = 3400, amp = 30, width = 120)
))
# extra zero-pole pair (doesn't affect estimated VTL and thus the extra
# formants added on top)
e4 = getSpectralEnvelope(
nr = 512, nc = 50, samplingRate = 16000, plot = TRUE,
formants = list(
f1 = list(freq = c(900, 500), amp = c(30, 35), width = c(80, 50)),
f1.5 = list(freq = 1300, amp = -15),
f1.7 = list(freq = 1500, amp = 15),
f2 = list(freq = c(1900, 2500), amp = c(25, 30), width = 100),
f3 = list(freq = 3400, amp = 30, width = 120)
))
plot(as.numeric(rownames(e4)), 20 * log10(e3[, ncol(e3)]),
type = 'l', xlab = 'KHz', ylab = 'dB')
points(as.numeric(rownames(e4)), 20 * log10(e4[, ncol(e4)]),
type = 'l', col = 'red', lty = 2)
Run the code above in your browser using DataLab