RealSinger
Technische achtergrond
|
 |
Opmerking: Deze pagina
geeft een kort overzicht van de
wijze waarop RealSinger een stem
produceert.
Voor het gebruik van RealSinger is
het niet nodig om dit hoofdstuk
door te lezen. Dit hoofdstuk is
bedoeld om technische vragen die
sommige gebruikers hebben over de
interne algoritmen te
beantwoorden. Om het product te
gebruiken, is het niet nodig dit
te kennen.
|
|
Inleiding
|
 |
Om een realistische zangstem te synthetiseren, is
het eerste dat bij een programmeur opkomt om
hiervoor gebruik te maken van een verzameling van
opgenomen fonemen. Hiermee kan een stem worden
gegenereerd.
Drie problemen worden daarbij al snel zichtbaar:
- De algoritmen die gebruikt worden voor het
genereren van een foneem bij een iedere
toonhoogte (fundamentele frequentie).
Het opnemen van ieder foneem bij alle
toonhoogten is vrijwel niet haalbaar. Dit zou
een langdurig een groot opnameproject worden,
waarbij grote stembestanden ontstaan;
- Het algoritme moet in staat zijn om een foneem
uit te kunnen rekken of te verlengen tot iedere
tijdsduur;
- Het algoritme moet in staat zijn om een nette
overgang te genereren van de ene foneem naar de
volgende. Hiermee moet coarticulatie worden
gesimuleerd (het volgende foneem wordt al
gehoord voordat het huidige foneem afgelopen
is).
Voor ieder probleem kan in de computerliteratuur een
oplossing worden gevonden.
Er zijn efficiënte algoritmen die problemen 1 en 2
oplossen. Zij verwerken de digitaal opgenomen data
onmiddellijk. De programmeur kan nu de frequentie
(toonhoogte) en de tijdsduur aanpassen. Deze
algoritmen worden in de meeste populaire
geluidseditors gebruikt om de toonhoogte en snelheid
van een geluid onafhankelijk aan te passen. Zij
worden ook met succes in spraaksynthese gebruikt,
omdat de variaties in frequentie (de toonhoogte)
nogal klein zijn.
Maar in het geval van een zangstem kunnen deze
algoritmen niet gebruikt worden. Zij zijn niet
efficiënt genoeg als de toonverandering te groot is.
Het resultaat is als zodanig niet "slecht", maar de
stem wordt vervormd, ongeveer als een magnetische
tape die te snel wordt afgedraaid (waardoor je
eekhoornstemmetjes krijgt).
Voor probleem 3 worden niet alleen de individuele
fonemen opgenomen. Ook worden alle mogelijke
combinaties van twee of drie fonemen (twee- en
drievoudige fonemen) opgenomen. Dit systeem slaat
het effect van de coarticulatie op en maakt de
gegenereerde stem realistischer. Maar ook hier geldt
dat het proces van opnemen nogal moeilijk en
intensief is. Het kost soms vele uren van de spreker
of de zanger. Het resulterende stembestand is vaak
ook behoorlijk groot (verschillende megabytes).
RealSinger gebruikt originele algoritmen om al deze
problemen tegelijkertijd op te lossen. RealSinger
manipuleert
frequentie spectra.
Sommige spraakgeneratoren hebben in het verleden
geprobeerd om de frequentie spectra van de stem te
gebruiken om een nieuwe stem te genereren. Deze
methode bleek helaas te lastig om hem werkend te
krijgen. Dit kwam omdat het opnieuw opbouwen van
het geluid vanuit een verwerkt spectrum gebruik
moest maken van een omgekeerde (dus inverse) Fast
Fourier Transform (IFFT). De oorspronkelijke
fasewaarden moesten opnieuw correct worden
samengesteld. Als dit niet nauwkeurig gebeurde,
dan konden opeenvolgende stukken geluid niet
netjes naast elkaar worden geplaatst en werd een
ongewenste ruis op de achtergrond gehoord.
Het stemspectrum
|
 |
In spraak of gezang is de trillingsvorm die uit de
stemspleet voortkomt (dat is het geluid dat
gemaakt wordt door de stembanden zodra zij gaan
trillen als er lucht uit de longen langsstroomt)
een combinatie van harmonieën (meervouden van de
fundamentele frequentie f0).
Op een sterkte/frequentie (power/frequency) grafiek
lijkt deze trillingsvorm eruit als een kam. Iedere
tand van de kam staat precies op een frequentie die
een meervoud is van de fundamentele f0:

Zodra de toonhoogte van de stem toeneemt, dan
verschuift de fundamentele frequentie f0 naar
rechts (dus naar een hogere frequentie). De start
van de frequentie tussen de twee opeenvolgende
harmonieën neemt eveneens toe, maar blijft gelijk
aan f0.

Bij het passeren van het stemkanaal worden sommige
frequenties versterkt door de resonanties in de
holten, terwijl anderen juist weer worden verzacht.
Het resultaat is dat sommige harmonieën luid klinken
en andere wat zachter. Het spectrum van het
stemkanaal hangt af van het foneem dat op dat moment
wordt uitgesproken of gezongen. Hij verandert niet
erg sterk als de frequentie (dus toonhoogte)
toeneemt of afneemt.
De samensmelting van deze twee spectra (de
stemspleet en het stemkanaal) resulteert in het
hoorbare spectrum. De luisteraar kan dan onderscheid
maken tussen zowel het foneem (dus wat er gezegd
wordt) en de toonhoogte (de gezongen noot).
De grondslag van RealSinger
|
 |
Het doel van RealSinger is om voor ieder foneem van
een bepaalde taal een opsplitsing te maken in het
opgenomen signaal. Daaruit kunnen dan de spectra van
de stemspleet en het stemkanaal worden gehaald.
Alleen het spectrum van het stemkanaal wordt
opgeslagen. Dit spectrum kan later worden toegepast
op een gegenereerd spectrum van de stemspleet om het
originele geluid opnieuw op te kunnen bouwen. Dat
kan dan bij iedere toonhoogte.
Het leerproces
|
 |
- Aan de spreker wordt gevraagd om een woord uit
te spreken voor ieder foneem van de gekozen
taal;
- Ieder woord wordt als normale geluidsdata
opgenomen;
- Daarna wordt het foneem geïsoleerd binnen het
woord. Het signaal wordt afgesneden om alleen
dit gedeelte over te houden;
- Een gemiddeld frequentiespectrum van het
geluid wordt nu berekend;
- Dit spectrum wordt uit elkaar gehaald om de
invloed van de spectra van de stemspleet eruit
te halen. Alleen de curve van het spectrum van
het stemkanaal blijft dan over;
- Dit pseudo-spectrum wordt dan opgeslagen
(minder dan 100 gebroken getallen voor ieder
foneem);
- Voor fonemen die, zoals plosieven, in de tijd
veranderen, zijn er meerdere pseudo-spectra
opgeslagen om de informatie over veranderingen
in het spectrum te kunnen behouden.
Dit algoritme zorgt ervoor dat RealSinger slechts
enkele waarden voor ieder foneem hoeft op te slaan.
Dit betekent dat de stembestanden erg klein zijn
(kleiner dan 40kB zodra zij zijn gecomprimeerd).
Genereren van de stem
|
 |
- Van ieder foneem dat gezongen wordt, zal het
bijbehorende pseudo-spectrum eruit gehaald
worden. In overgangsgedeelten tussen twee
fonemen, zijn beide pseudo-spectra vervormd om
daarna samengebracht te worden om het proces van
coarticulatie te simuleren;
- Er wordt nu een spectrum voor de stemspleet
gegenereerd, bij de gewenste toonhoogte. Dit
spectrum kan eenvoudig worden veranderd door de
algemeen geldende klankkleur te wijzigen (voor
de equalizatie of voor het toepassen van
verschillende vocoder effecten);
- Dit spectrum van de stemspleet wordt nu
opnieuw omgevormd met het pseudo-spectrum van
het foneem;
- Het spectrum wordt dan verwerkt door een derde
fase omgekeerde transformatie om de normale
geluidsdata te genereren.
Dit algoritme simuleert de coarticulatie effecten.
Daarom is het niet nodig om de hele set van twee- of
drieklanken op te nemen. Alleen de zuivere fonemen
zijn nodig.
|