Virtual Singer
Bewerken van fonemen
|
 |
Zeer belangrijk: Dit
hoofdstuk gaat over geavanceerde
concepten van de digitale
signaal verwerking. Enige
kennis van akoestiek en van
digitale signaal verwerking is
nodig om daarvan gebruik van te
kunnen maken.
|
|
Eerder zag u al dat fonemen onderdeel zijn van de
basis akoestische elementen voor de sprekende of
zingende stem (zie hierover de hoofdstukken in de "Technische achtergrond voor
stemgeluid").
Virtual Singer gebruikt ingewikkelde
algoritmen om deze fonemen te kunstmatig voort te
brengen.
Deze voortbrenging, die formanten (of
geluidsfrequenties) worden genoemd, gebruikt
originele interne algoritmen. Zij zijn vooral
geïnspireerd door de documenten van D. Klatt
en
andere informatieve bronnen.
Het algoritme werd ontworpen en verfijnd volgens ons
eigen onderzoek naar de reproductie van de zangstem.
Als de klankkleur van een stem wordt bewerkt, dan
opent een "Geavanceerd" knop de dialoog waarin de
individuele fonemen kunnen worden ingesteld.
Veranderingen die in hier worden aangebracht,
wijzigen alleen de huidige zangstem. Andere stemmen
blijven ongewijzigd.
Een paar technische details
|
 |
 |
Vraag: Hoe genereert
Virtual Singer een foneem? |
|
Er wordt een excitatie digitaal signaal
(historisch wordt dit een "glotted source"
genoemd) gegenereerd. Hij is afhankelijk van de
kracht en de fundamentele frequentie van het
foneem dat gezongen moet worden. Het signaal is
samengesteld uit parabolische halve perioden,
gevolgd door een stille halve periode (glottal
stop). De eerste harmonische (de
fundamentele frequentie), de tweede harmonische
(tweemaal de fundamentele frequentie) en de derde
harmonische (drie keer de fundamentele frequentie)
worden nu versterkt. Dit wordt gedaan om ongeveer
zo dicht mogelijk bij de mogelijke mondelinge
voortbrenging van de zangstem te kunnen komen. Dit
signaal wordt dan versterkt in een grotere of
kleinere mate, die afhankelijk is van de stem
waarde.
Vervolgens wordt het verwerken gesplitst in twee
onderdelen:
Cascade verwerking: een geluid, aspiratie
geluid genoemd, wordt toegevoegd aan de bron van
de excitatie. Dit signaal wordt dan verwerkt door
een seriële filter sequentie (cascade),
waarbij
ieder filter overeenkomt met een formant.
Parallelle verwerking: een geluid, fricatie
geluid genoemd, wordt toegevoegd aan de bron
van excitatie. De eerste graad afgeleide van dit
signaal wordt verwerkt door een parallelle
groep filters, waarbij ieder filter
overeenkomt met een formant. De
versterking van ieder formant wordt verwerkt, om
de respectievelijke invloeden van iedere formant
in het uitvoersignaal te vergroten of te
verkleinen.
De resultaten van de twee bovenstaande
verwerkingsstappen worden dan toegevoegd. Als het
nodig is worden zij aangepast door een laag
frequente (20Hz) oscillator om het rollende
effect te kunnen simuleren (zoals in de Spaanse
"R"ren).
Na het toepassen van de output gain en de
treble/bas instelling, is het uitvoersignaal
compleet.
Concreet gezien heeft dit algoritme grote
implicaties op hoe een foneem wordt verwerkt:
- De amplitude voor ieder formant wordt
allen verwerkt door het parallelle deel
van het verwerkende algoritme. Dus zelfs als de
formant amplitude nul is, dan heeft dit formant
nog steeds een effect op het resulterende
signaal. Dit komt door zijn acties in de cascade
verwerking.
- Aspiratie geluid gaat door groep van de
cascade filters. Hij wordt dan flink
vervormd door de formanten van de fonemen. Zijn
uitvoer is een meer gefilterd (zachter) geluid,
dat gebruikt kan worden om het effect van
ademhaling te simuleren, die achteraan het
stemkanaal plaatsvindt.
- De eerste graad afgeleide van het fricatie
geluid wordt doorgegeven door de groep van
de parallelle filters. Dit zorg voor
een geluid met een hogere toon, dat gebruikt kan
worden om de sissende, fluitende geluiden te
simuleren. Zij worden door het eerste deel van
de mond gevormd.
Fragmenten
|
 |
Het basis fonetische element is de foneem.
Maar u heeft ook gezien dat sommige, complexe
fonemen, zoals tweeklanken, opgebouwd kunnen
worden uit verschillende opeenvolgende staten.
Dit is de reden dat we de notie van een fragment
definiëren, dat een "statische" staat binnen een
foneem voorstelt. Dit betekent dus dat een foneem
opgebouwd is uit één of meerdere fragmenten.
De lijst aan de linkerkant van het venster geeft
de complete lijst van alle fragmenten weer
die nodig zijn om ieder foneem in iedere
taal uit te kunnen spreken. Fragmenten die vetgedrukt
zijn weergegeven, worden door de nu gekozen taal
gebruikt.
 |
Belangrijke opmerking: In
dit venster kunt u de uitspraak
van één of meerdere fragmenten
wijzigen. Deze wijzigingen worden
alleen toegepast op de
zangstem die op dat moment wordt
bewerkt. Wijzigingen van een
fragment in dit venster hebben
alleen gevolgen voor de uitspraak
van deze zangstem en niet op dat
van anderen. |
|
Zodra een fragment gewijzigd is, wordt het met een
kleur in de lijst aangegeven. Als u een gewijzigd
fragment kiest, dan is het mogelijk om hem naar zijn
standaard waarden terug te brengen, door op de "Origineel"
knop onderaan de lijst te klikken.
Aan de rechterkant van het venster vindt u een
grafisch deel. Hierin kunt u de data van het
fragment wijzigen.
Bovenaan het venster toont een pop-up menu het type
fragment:
Klinker betekent dat dit fragment gerekt kan
worden als de lettergreep waarin hij zit in de tijd
verlengd wordt.
Als de lettergreep geen klinkers bevat, dan zal
Virtual Singer proberen om de fragmenten met transitionele
klinkers te verlengen.
Als beide niet aanwezig zijn, dan worden de gevocaliseerde
medeklinkers gerekt en daarna de niet
gevocaliseerde medeklinkers.
De tijdsduur van het fragment kan worden
veranderd met een schuifbalk.
Deze waarde is de natuurlijke tijd voor
het fragment. Als dit fragment wordt gerekt, dan
wordt zijn tijdsduur vergroot.
 |
Opmerking: Als een waarde
grafisch wordt gewijzigd
(bijvoorbeeld met een schuifbalk),
dan verschijnt zijn digitale
waarde rechtsonder in het venster.
|
|
Het statische deel van een fragment
|
 |
Dit is een groep van waarden die
gebruikt wordt in het statische deel van
het fragment - dus in het deel dat niet afhangt
van iedere overgang naar of van naastliggende
fragmenten. Deze parameters kunnen worden
gewijzigd door gebruik te maken van de het grote
grafische gebied aan de rechterkant van het
venster.
Formanten worden weergegeven als driehoeken
met gekleurde lijnen. Van ieder formant kunnen
de centrale
frequentie (in Hertz), Amplitude
(dB) en de bandbreedte (breedte van de
onderste lijn van de driehoek in Hz) worden
gewijzigd. Een groep checkboxen onder de grafiek
helpt u om iedere formant te kunnen activeren of
deactiveren in het parallelle gedeelte van de
stemgenerator.
 |
Opmerking: Zoals
hierboven uitgelegd, geldt dat
van iedere formant die niet
actief is, en niet meer op de
grafiek staat, zijn frequentie
en bandbreedte nog
steeds gebruikt wordt in het cascade
deel van de stemgenerator. |
|
Helemaal rechts staat een groep verticale
schuifbalken. Zij helpen u om de niveaus van het stemmen
(av), rollen (Rl), aspiratie (asp)
en fricatie (af) in te kunnen stellen.
 |
Tip: Als u de middelste
frequentie of de bandbreedte
van een formant grafisch
wijzigt, dan worden er twee
verticale lijnen weergegeven.
Zij tonen van de gewijzigde
parameter de bovenste en
onderste grenzen, tussen alle
andere fonemen in de lijst. Dit
helpt om te voorkomen dat u de
parameter in een al te
"exotische" waarde instelt. |
|
Overgangscurven voor fragmenten
|
 |
Gedurende een gesproken of gezongen deel geldt dat
de overgang van het ene fragment naar het andere
niet onmiddellijk plaatsvindt. Het volgende
fragment start al voordat het vorige volledig
beëindigd is. Deze soepele overgang tussen
fragmenten wordt coarticulatie
genoemd.
Voor iedere parameter (formant frequentie,
amplitude, bandbreedte en verschillende niveaus)
geldt dat het grafisch gebied onderaan het venster u
helpt bij het definiëren van de overgangscurve in de
tijd. De parameter waarvan de curve wordt
weergegeven, is in het bovenste venster rood
omcirkeld.
Conventioneel wordt op de overgangscurve de vorige
waarde van de parameter weergegeven door de laagste
waarde op de verticale as van de grafiek. De
statische waarde voor het huidige, geselecteerde
fragment (in de bovenste grafiek geselecteerd) wordt
weergegeven door de hoogste waarde op de verticale
as.
 |
Opmerking: dit is een
schematische weergave, die niet
direct gekoppeld is aan de
effectieve of relatieve waarden
van de beschreven parameter.
|
|
De overgang van de parameter van zijn vorige
waarde naar de huidige statische waarde, wordt
weergegeven in de vorm van twee segmenten:
Het eerste segment links heeft
een tijdsduur die "gestolen" is van de tijdsduur
van het vorige fragment. Dit segment zorgt ervoor
dat de parameter overgaat van de vorige statische
waarde naar een intermediaire waarde, die
gedefinieerd wordt door de twee verticale
schuifbalken aan de linkerzijde van de curve.
De ratio schuifbalk
(Ra) helpt u bij het kiezen van het belang
van de vorige parameterwaarde, gerelateerd aan
dat van de huidige statische waarde van het
fragment (dat is de waarde die bereikt wordt
tijdens de overgang).
Een voorbeeld: een 0% ratio stelt de
intermediaire waarde gelijk aan de waarde die
bereikt moet worden.
Een 100% ratio stelt de intermediaire waarde
gelijk aan de vorige parameterwaarde.
Een 50% ratio stelt de intermediaire waarde
gelijk aan het gemiddelde van de vorige en de
huidige waarden.
Het start offset (Od) helpt u om een
vaste waarde toe te kennen aan de
intermediaire waarden.
Een voorbeeld: met een ratio (Ra) van 50% en
een offset (Od) van 100 wordt de intermediaire
waarde gelijk gesteld aan 100 + het gemiddelde
van de vorige en de huidige waarden.
Op de curve geeft het tweede segment
de tijd weer van de overgang tussen de
intermediaire waarde en de waarde die bereikt
moet worden (de statische waarde van deze
parameter voor het huidige fragment). Zijn
tijd is "gestolen" van het huidige fragment.
Symmetrisch gezien geven de twee segmenten
rechts, met een bijbehorend paar aan schuifbalken, u
de mogelijkheid om de overgang te definiëren tussen
de huidige statische waarde en de statische waarde
van het volgende fragment.
Dit betekent dat een overgangscurve gedefinieerd
kan worden vanuit de statische waarde van
het
vorige fragment, maar ook naar de
statische waarde van het volgende fragment.
De overgangscurve voor de segmenten die gebruikt
zal worden, hangt af van welk fragment een hogere
prioriteit heeft gekregen. Als het huidige
fragment een hogere prioriteit heeft gekregen dan
het vorige, dan zal zijn "overgang van de vorige"
segmenten gebruikt worden. Uiteraard in plaats van
de "overgang naar de volgende" segmenten vanuit
het vorige fragment. De prioriteit wordt gegeven
door de volgorde van de fragmenten in de
fragmentenlijst: hoe hoger in de lijst,
hoe groter de prioriteit.
Voorbeeld:
Als de lijst slechts drie fragmenten bevatte, "a,
b, c" in deze volgorde, en de lettergreep die
gezongen moet worden "babc" luidt, dan worden de
volgende overgangen gemaakt voor iedere
fragmentparameter:
- statische waarde van fragment "b",
- overgang naar de waarde van fragment
"a", waarbij gebruik wordt gemaakt van de eerste
twee segmenten van de "a" overgangscurve (omdat
"a" een grotere prioriteit heeft dan "b").
- statische waarde van fragment "a",
- overgang naar de waarde van fragment
"c", waarbij gebruik wordt gemaakt van de
laatste twee segmenten van de "a" overgangscurve
(omdat "a" een grotere prioriteit heeft dan
"c"),
- statische waarde van fragment "c",
- overgang naar de waarde van fragment
"b", waarbij gebruik wordt gemaakt van de
laatste twee segmenten van de "b" overgangscurve
(omdat "b" een grotere prioriteit heeft dan
"c"),
- statische waarde van fragment "b".
Actie knoppen
|
 |
Deze knoppen, die rechtsonder in het venster
staan, zorgen voor verschillende acties:
Proberen knop
U kunt het gewijzigde fragment proberen
door een eenvoudige zin in het bijbehorende
tekstvak te typen. Daarna klikt u op de knop. Er
wordt nu een lijst van fragmenten gebruikt
voor het uitvoeren van de zin die u heeft
opgegeven. De symbolen > en <
tussen de namen van de fragmenten geven de
relatieve prioriteit weer van ieder fragment
vergeleken met de naastliggende fragmenten.
Opmerking: zodra u een fragment in de lijst van
fragmenten selecteert, dan wordt een
voorbeeldwoord voor dat fragment in het tekstvak
getoond.
Pop-up menu voor de taal
Als er een andere taal geselecteerd is,
dan worden de fragmenten die in die taal gebruikt
worden vetgedrukt in de lijst weergegeven.
Kopiëren/Plakken knoppen
Deze knoppen helpen u om alle parameters
en overgangscurven van een fragment te kopiëren,
om hen vervolgens bij een ander fragment te kunnen
plakken. |