vowelsdb

Abstract

A database of vowel sounds

Description

vowelsdb provides a list of speaker definitions with formant frequencies, bandwidths and amplitudes for the first 5 formants. It includes all the speaker definitions found in the csound manual plus speakers from other sources, such as praat and VocalTractLab (vtl).

The user requests formant data from a given speaker and a selection of vowels and the opcode returns three 2D arrays: frequencies, bandwidths and amplitudes. Each row contains the information for the corrsponding vowel and has always a size of 5, corresponding to the first 5 formants. The number of rows is the same as the number of vowels queried.

Even if the generated arrays can be k-arrays, the opcode only works at init time (similar to how fillarray works for k-arrays)

Speakers available:

* csound-soprano
* csound-alto
* csound-countertenor
* csound-tenor
* csound-bass
* vtl-male
* vtl-female

Vowels (not all speakers define all vowels): a, e, i, o, u, ae, oe, y

Syntax

ifreqs[][], ibandwidths[][], iamps[][] vowelsdb Sspeakername, Svowels
kfreqs[][], kbandwidths[][], kamps[][] vowelsdb Sspeakername, Svowels

Arguments

  • Sspeakername: one of the available speaker names. At thethe x coordinate of the cursor
  • Svowels: the vowels to retrieve from the database, as a space delimited list (for example: "a e i o u") The order is important, since each row in the returned data arrays corresponds to each vowel given, in the order given. In the case of "a e i o u", the first row in the ifreqs array would hold the frequencies of the first five formants of 'a'.

Output

  • ifreqs / kfreqs: a 2D array, where each row holds the frequencies of the first five formants for the corresponding vowel (there are as many rows as vowels in Svowels)
  • ibandwidths / kbandwidths: a 2D array were each row holds the bandwidths of the first five formants for the corresponding vowel
  • iamps / kamps: a 2D array were each row holds the amplitudes of the first five formants for the corresponding vowel (NB: these amplitudes are already converted to linear amplitudes and are not in dB)

See Also

Examples

<CsoundSynthesizer>
<CsOptions>
--nosound
</CsOptions>

<CsInstruments>
sr     = 44100
ksmps  = 64
nchnls = 2
0dbfs  = 1

instr 1
    ifreqs[][], ibws[][], iamps[][] vowelsdb "csound-tenor", "a e i o   u"
    printarray ifreqs, "%d", "ifreqs ="
    printarray ibws, "%d", "ibws ="
    printarray iamps, "", "iamps ="
endin

instr 2
    kfreqs[][], kbws[][], kamps[][] vowelsdb "csound-bass", "a e i o   u"
    println "kfreqs ="
    printarray kfreqs
    println "kbws ="
    printarray kbws
    println "kamps ="
    printarray kamps
    turnoff
endin

</CsInstruments>

<CsScore>

i1 0 0.1
i2 0 0.1
; f0 3600

</CsScore>
</CsoundSynthesizer>
new alloc for instr 1:
ifreqs =
   0: 650 1080 2650 2900 3250
   1: 400 1700 2600 3200 3580
   2: 290 1870 2800 3250 3540
   3: 400 800 2600 2800 3000
   4: 350 600 2700 2900 3300
ibws =
   0: 80 90 120 130 140
   1: 70 80 100 120 120
   2: 40 90 100 120 120
   3: 70 80 100 130 135
   4: 40 60 100 120 120
iamps =
   0: 1.0001 0.5012 0.4467 0.3981 0.0794
   1: 1.0001 0.1995 0.2512 0.1995 0.1000
   2: 1.0001 0.1778 0.1259 0.1000 0.0316
   3: 1.0001 0.3162 0.2512 0.2512 0.0501
   4: 1.0001 0.1000 0.1413 0.1995 0.0501
new alloc for instr 2:
kfreqs =
   0: 600.0000 1040.0000 2250.0000 2450.0000 2750.0000
   1: 400.0000 1620.0000 2400.0000 2800.0000 3100.0000
   2: 250.0000 1750.0000 2600.0000 3050.0000 3340.0000
   3: 400.0000 750.0000 2400.0000 2600.0000 2900.0000
   4: 350.0000 600.0000 2400.0000 2675.0000 2950.0000
kbws =
   0: 60.0000 70.0000 110.0000 120.0000 130.0000
   1: 40.0000 80.0000 100.0000 120.0000 120.0000
   2: 60.0000 90.0000 100.0000 120.0000 120.0000
   3: 40.0000 80.0000 100.0000 120.0000 120.0000
   4: 40.0000 80.0000 100.0000 120.0000 120.0000
kamps =
   0: 1.0001 0.4467 0.3548 0.3548 0.1000
   1: 1.0001 0.2512 0.3548 0.2512 0.1259
   2: 1.0001 0.0316 0.1585 0.0794 0.0398
   3: 1.0001 0.2818 0.0891 0.1000 0.0100
   4: 1.0001 0.1000 0.0251 0.0398 0.0158