soundgen (version 1.5.0)

wiggleAnchors: Randomly modify anchors

Description

Internal soundgen function.

Usage

wiggleAnchors(df, temperature = 0.05, temp_coef = 1, low = c(0,
  -Inf), high = c(1, Inf), wiggleAllRows = FALSE, sd_values = NULL,
  invalidArgAction = c("adjust", "abort", "ignore")[1])

Arguments

df

dataframe of anchors, for ex. data.frame(time = c(0, .1, .8, 1), value = c(100, 230, 180, 90))

temperature, temp_coef

regulate the amount of stochasticity ("wiggling"). Since temperature is used in several functions, temp_coef gives more flexibility by controlling how much temperature affects this particular aspect, namely random variation in anchors. These two are multiplied, so temp_coef of 0.5 halves the effect of temperature.

low, high

bounds on possible variation. Both low and high should be vectors of length 2: the first element specifies the boundary for df$time and the second for df$value. Ex.: low = c(0,1) - low bound on "time"=0, low bound on "value"=1

wiggleAllRows

should the first and last time anchors be wiggled? (TRUE for breathing, FALSE for other anchors)

sd_values

(optional) the exact value of sd used by rnorm_truncated in columns 2 and beyond

invalidArgAction

what to do if an argument is invalid or outside the range in permittedValues: 'adjust' = reset to default value, 'abort' = stop execution, 'ignore' = throw a warning and continue (may crash)

Value

Modified original dataframe.

Details

A helper function for introducing random variation into any anchors (for pitch / breathing / amplitude / ...). At higher temperatures can also add or delete an anchor. NB: make sure the lower and upper bounds are reasonable given the scale of df$value!

Examples

Run this code
# NOT RUN {
soundgen:::wiggleAnchors(df = data.frame(
  time = c(0, .1, .8, 1), value = c(100, 230, 180, 90)),
  temperature = .2, temp_coef = .1, low = c(0, 50), high = c(1, 1000),
  wiggleAllRows = FALSE) # pitch
soundgen:::wiggleAnchors(df = data.frame(time = 0, value = 240),
  temperature = .2, temp_coef = .1, low = c(0, 50), high = c(1, 1000),
  wiggleAllRows = FALSE) # pitch, single anchor
soundgen:::wiggleAnchors(df = data.frame(
  time = c(-100, 100, 600, 900), value = c(-120, -80, 0, -120)),
  temperature = .4, temp_coef = .5, low = c(-Inf, -120), high = c(+Inf, 30),
  wiggleAllRows = TRUE) # noise
# formants
formants = list(f1 = list(time = 0, freq = 860, amp = 30, width = 120),
                f2 = list(time = c(0,1), freq = 1280,
                amp = c(10,40), width = 120))
for (f in 1:length(formants)) {
  formants[[f]] = soundgen:::wiggleAnchors(
    df = formants[[f]],
    temperature = .4, temp_coef = .5,
    low = c(0, 50, 0, 1),
    high = c(1, 8000, 120, 2000),
    wiggleAllRows = FALSE
  )
}
print(formants)

# manually provided sd (temp only affects prob of adding/dropping anchors)
soundgen:::wiggleAnchors(df = data.frame(
  time = c(0, .1, .8, 1), value = c(100, 230, 180, 90)),
  wiggleAllRows = FALSE, sd_values = 5)
# }

Run the code above in your browser using DataLab