Wat me verbaasde over het uitvoeren van tekst naar spraak op onze eigen hardware, is hoe klein het model is. Eén bestand, 78 MB, met 904 verschillende luidsprekers. Dat is minder dan een telefoonfoto-burst en ongeveer een tiende van wat een enkel middellangs taalmodel weegt, en daaruit komt een stem die je niet meteen als synthetisch zou plaatsen. Ik heb drie van de acht stemmen gemeten die de tool blootlegt: hun mediane toonhoogtes zijn 103 Hz, 184 Hz en 242 Hz, wat een echt bereik is van een lage mannelijke stem tot een hoge vrouwelijke, uit hetzelfde bestand met een ander nummer dat is doorgegeven.
tl;dr: De motor is Piper die op de eigen doos van de site draait, met behulp van het LiBritts-R-model. Gemeten: 113 karakters produceerden 5,8 tot 6,1 seconden audio in ongeveer 3 tot 4 seconden muurtijd, dus het syntheteert sneller dan je kunt luisteren. Je krijgt een 22.050 Hz mono WAV, wat ongeveer 2,6 MB per minuut is. De snelheidsregeling werkt maar wordt gecomprimeerd: het volledige bereik van 0,7 tot 1,5 produceert een spreiding van 1,61x in plaats van de 2,14x De getallen impliceren, en 0,85 is niet te onderscheiden van 1.0. Dezelfde tekst is nooit twee keer dezelfde audio. de Tekst naar spraak tool caps-invoer op 3.000 tekens.
Wat doet het spreken?
Piper, een neurale tekst-naar-spraak-engine, die als zijn eigen container naast de web-app draait, met een model getraind op LIBRITTS-R.
Dat corpus is het waard om te weten over, omdat het zowel de kwaliteit als het karakter van de output verklaart. Het is ongeveer 585 uur lang gelezen Engelse spraak, oorspronkelijk van LibriVox-audioboekopnames, en vervolgens een spraakherstelmodel doorlopen om de opnamekwaliteit van het bronmateriaal op te ruimen. De sprekers zijn vrijwilligers die boeken van het publiek domein lezen.
Dus de stemmen klinken als mensen die hardop lezen, want dat is precies wat ze deden. Het model is goed in declaratieve zinnen en paragrafen van proza, wat het hoorde. Het is minder overtuigend in wat voor gemoedelijken ook, omdat niemand in de trainingsgegevens een gesprek aan het voeren was.
Het modelbestand bevat 904 luidsprekers en de tool legt er acht bloot. De ID's in de code zijn het model van het model, gekozen om het bereik te overspannen in plaats van de beste acht te zijn, wat een onderscheiding waard is als geen van de acht bij jou past.
verschillen de acht stemmen van elkaar?
Ja, meetbaar. Ik heb dezelfde zin in drie van hen gegenereerd en de mediane grondfrequentie van de stemhebbende frames berekend:
| geluid | Spreker-ID | mediane f0 |
|---|---|---|
| Stem 2 | 3 | 103,3 Hz |
| stem 5 | 45 | 183,8 Hz |
| stem 8 | 150 | 242,3 Hz |
Dat zijn geen variaties op een thema. Toespraak van volwassen mannelijke spraak centreert meestal rond de 85 tot 155 Hz en volwassen vrouwelijke spraak rond 165 tot 255 Hz, dus deze drie zitten onderaan, het midden en de top van het normale menselijke bereik.
De duur was bijna identiek, 2,07 tot 2,08 seconden voor dezelfde zin, dus het wisselen van stem verandert timbre en toonhoogte zonder van tempo te veranderen. Dat maakt de acht echt uitwisselbaar voor een bepaald script, wat van belang is als je een set clips produceert en er een opnieuw wilt opnemen.
Hoe snel is het?
Sneller dan luisteren, dat is het getal dat ertoe doet.
| Measure | waarde |
|---|---|
| Invoer | 113 tekens |
| Geproduceerd geluid | 5,77 tot 6,08 seconden |
| muurtijd | 2.994 tot 3.929 ms |
| verhouding | Ongeveer 1,5 tot 1,9 keer realtime |
Dus een minuut audio duurt dertig tot veertig seconden om te maken, en het maximum van 3.000 personages werkt op ongeveer twee en drie kwartier minuten spraak voor iets minder dan twee minuten wachten.
Het voorbehoud is dat één verzoek tegelijk wordt betekend. De server draait opzettelijk een enkele synthesesleuf: gemeten op de doos, duurt één tekst alleen ongeveer 2,2 seconden en drie tegelijk duren ongeveer 9 seconden, dus parallellisme koopt niets in de totale doorvoer en kost de eerste persoon zeven seconden in de rij. Er kunnen maximaal twintig verzoeken wachten; voorbij dat de tool zegt dat het druk is in plaats van u enkele minuten te laten wachten.
Er is ook een budget per bezoek van twintig generaties per tien minuten, wat hoog genoeg is dat normaal gebruik er nooit aan voldoet en laag genoeg dat niemand de doos in een gratis audioboekfabriek verandert.
Wat krijg je terug?
Een WAV-bestand, niet gecomprimeerd, en de grootte is het waard om te weten voordat je een lange maakt.
codec pcm_s16le
sample rate 22,050 Hz
channels 1 (mono)
bit depth 16
Dat is 44,1 kb per seconde audio, dus ruwweg 2,6 MB per minuut, en een volledige run van 3.000 personages landt bijna 7 MB. Het bovenstaande monster van 113 tekens was 254.508 bytes gedurende 5,77 seconden.
Uncompressed is de juiste standaard voor iets dat u gaat bewerken of converteren, omdat het het formaat is dat elke editor zonder klacht aanneemt en het geen generatieverlies heeft om toe te voegen. Het is de verkeerde standaard voor iets dat u gaat uploaden of e-mailen, en de oplossing is één stap: voer de wav door de audio-omzetter En neem de mp3 of m4a. zijn gids Dekt die u moet kiezen, en het korte antwoord voor spraak is dat alles op of boven 128 kbps prima is.
De 22.050 Hz-snelheid is het model van het model en het is de helft van het CD-tarief. Het is de moeite waard om op te merken dat Libritts-R wordt gedistribueerd op 24 kHz, dus het model outputs onder de snelheid van het corpus waarvan het heeft geleerd, dat is de eigen configuratie van Piper in plaats van iets dat hier verloren is gegaan. Voor een stem is het hoe dan ook onopvallend, aangezien spraakenergie ver onder de 11 kHz ligt, wat 22.050 Hz draagt. Het betekent wel dat de uitvoer niet wordt doorgegeven als een studio-opname, en het opnieuw bemonsteren ervan voegt niets toe.
Doet de snelheidsregeling wat hij zegt?
Het verandert de snelheid, en niet zoveel als het aantal doet vermoeden. Dit is de gemeten curve:
| Snelheid instelling | duur | Verhouding tot 1,0 | lineair zou geven |
|---|---|---|---|
| 0.7 | 7.268 s | 1.195 | 1.429 |
| 0,85 | 6.142 s | 1.010 | 1.176 |
| 1.0 | 6.084 s | 1.000 | 1.000 |
| 1.25 | 5.271 s | 0.866 | 0.800 |
| 1,5 | 4.516 s | 0.742 | 0,667 |
monotoon, dus de besturing werkt in de richting die u verwacht, en gecomprimeerd aan beide uiteinden. Het volledige bereik van 0,7 tot 1,5 moet een spreiding van 2,14x zijn in duur en meet 1,61x. De instelling van 0,85 ligt binnen 1% van 1,0, dat wil zeggen dat het niets doet dat je kunt horen.
Het mechanisme is dat de instelling wordt doorgegeven aan het model als een duurschaal, en de eigen durationvoorspeller van het model bepaalt hoe lang elk foneem wordt. Het behandelt de schaal als een sterke hint in plaats van een vermenigvuldiger.
De praktische lezing: gebruik 0,7 of 1,5 als je een merkbaar ander tempo wilt, en verwacht niet dat de tussenliggende instellingen je een goede controle geven. Als je een exacte duur nodig hebt, genereer dan bij 1.0 en verander het tempo in een audio-editor, waarbij het nummer betekent wat het zegt.
Waarom is dezelfde tekst nooit twee keer hetzelfde audio?
Omdat het model bij elke run een nieuwe beslissing neemt over de timing.
Ik heb twee keer een identiek verzoek verzonden, dezelfde tekst, dezelfde stem, dezelfde snelheid. De resultaten waren 6,084 seconden en 6,002 seconden, en de bestanden verschillen byte voor byte. Niets wordt gecached en niets wordt gezaaid.
Dat is inherent aan deze familie van modellen: de duurvoorspeller is stochastisch, dus de lengte van de foneem varieert enigszins tussen runs, zelfs met elke vaste invoer. De hier gemeten variatie is ongeveer 1,4%, wat onhoorbaar is als een verschil in tempo en duidelijk zichtbaar als een verschil in bestandslengte.
Twee gevolgen. Als een take een ongemakkelijke pauze heeft of een woord dat vreemd is geland, is het opnieuw genereren ervan een echte oplossing in plaats van een bijgeloof. En als je een set clips produceert die moeten matchen, genereer ze dan in één sessie en behoud wat je krijgt, want als je morgen terugkomt voor één vervangende regel, krijg je een regel die een fractie van een seconde anders is.
Waarom is er een limiet van 3.000 tekens?
vanwege wat erachter zit, in plaats van iets over de tekst.
Drieduizend karakters zijn ongeveer twee en drie kwartier spraak en ongeveer 7 MB WAV, geproduceerd in een enkele syntheseslot die iedereen deelt. Een hoofdstuk van 30.000 tekens zou dat slot gedurende twintig minuten in beslag nemen en een buffer van 70 MB in het geheugen vasthouden terwijl hij dat deed.
Splits voor alles langer alineagrenzen en sluit je aan bij de onderdelen. Dat is sowieso beter: een fout in paragraaf negen kost je paragraaf negen in plaats van het hele hoofdstuk, en de audio-omzetter zal zich aansluiten en de set nadien converteren.
Het splitsen van halverwege de zin is het enige dat u moet vermijden, omdat het model de intonatie per uiting bepaalt. Een zin in tweeën gesneden produceert twee fragmenten die beide klinken als volledige zinnen, met een vallende toon in het midden van de gedachte.
Waar is het goed voor, en wat is het niet?
Goed voor alles wat is geschreven om hardop te worden voorgelezen, wat een smallere categorie is dan het klinkt.
| werkt goed | Werkt slecht |
|---|---|
| Vertelling over een video of dia's | Dialoog tussen personages |
| Een audioversie van een artikel | Alles wat emotie of nadruk nodig heeft |
| Toegankelijkheid: je eigen concept horen | Namen en plaatsen buiten het gemeenschappelijk Engels |
| Placeholder stem voor een prototype | Nauwkeurige timing voor een video-cut |
| Uitspraak van een zin die je schreef | zingen, of iets muzikaal |
Het patroon in de rechterkolom is Controle. Het model geeft je een stem, een snelheid en een stoel om van te luisteren. Er is geen manier om een bepaald woord te benadrukken, een pauze van een bepaalde lengte in te voegen, de intonatie van een vraag te veranderen of een acroniem te spellen. Dat zijn de dingen die een professionele TTS API blootlegt door middel van markup, en dit heeft er niets van.
De eerste rij van de linkerkolom is waar het zijn plaats verdient. Een stem die je eigen schrijven terugleest, is de snelste proefleestool die er is, omdat een zin die niet werkt duidelijk is op het moment dat iemand anders het zegt.
Kun je een stem horen voordat je je eraan verbindt?
Nee, en dat is het enige deel van de interface dat ik zou veranderen.
De acht stemmen zijn een vervolgkeuzelijst van labels: stem 1 tot stem 8, zonder dat er aan een van hen is bevestigd. De enige manier om erachter te komen hoe Voice 6 klinkt, is door ermee te genereren, die de gedeelde syntheseslot in beslag neemt, een paar seconden duurt en telt tegen je twintig generaties per tien minuten.
Voor een eenmalige is dat prima. Voor het kiezen van een stem voor een project betekent het dat je auditie doet voor acht takes van dezelfde regel voordat je begint, wat het grootste deel van een tiende is van je budget dat je aan beslissingsbesteding besteedt.
De praktische benadering is om auditie te doen met een korte regel in plaats van je script. Een zin van een dozijn woorden komt terug in ongeveer twee seconden en vertelt je de toonhoogte en het karakter, wat alles is waar je uit kiest. Schakel dan naar de echte tekst zodra u hebt gekozen.
De tabel eerder in deze handleiding is een gedeeltelijke snelkoppeling: Voice 2 is laag, Voice 5 is midden, Voice 8 is hoog. De vijf die ik niet heb gemeten, zaten ergens tussen hen.
Hoe verhoudt het zich tot een cloudstem?
Niet gunstig voor Pools, en dat is niet de vergelijking die hier van belang is.
Een commerciële API geeft je betere prosodie, tientallen talen, markup-controle over pauzes en nadruk, en stemmen die zijn getraind voor uitzending. Als je iets voor publicatie maakt, is het het geld waard.
Wat dit u in plaats daarvan geeft, is dat de tekst de eigen hardware van de site nooit verlaat, en de output is van u zonder factuur per teken en zonder account. Voor het gebruik in de linkerkolom hierboven, vooral het horen van uw eigen conceptlezing, is het verschil in Pools geen cloudaccount en een API-sleutel waard.
De eerlijke samenvatting is dat dit het TTS-equivalent is van een degelijke ingebouwde microfoon. Het is goed genoeg dat je niet meer merkt dat het er is, en niet wat je zou gebruiken om een album op te nemen.
Kun je de audio commercieel gebruiken?
Waarschijnlijk, met attributie, en de licentie verdient een zorgvuldige blik in plaats van een ja.
De Piper-motor is MIT-licentie. Het model is hier getraind op Libritts-R, dat Openslr verdeelt als "Licentie: CC BY 4.0", en CC BY 4.0 Vergunningen Commercieel gebruik mits toeschrijving wordt gegeven.
De zorg is gerechtvaardigd omdat de eigen citatiemetadata van Libritts-R Paper een andere licentiereeks bevat, de niet-commerciële variant zonder derivatieve middelen. Dat is hoogstwaarschijnlijk een overgebleven citaatsjabloon in plaats van een intentieverklaring, en de distributiepagina is het sterkere signaal, maar de twee zijn het niet eens en ik ben niet in staat om het voor je op te lossen.
Dus: voor alles wat incidenteel is, is dit geen vraag die iemand zal stellen. Voor een commercieel product dat op de audio is gebouwd, leest u zelf de licentie op het specifieke stemmodel en volg ik advies in plaats van mijn lezing van een datasetpagina.
Wat moet u controleren voordat u audio publiceert?
Vier dingen, in de volgorde dat ze fout gaan.
- Luister naar het geheel. Dit klinkt voor de hand liggend en wordt routinematig overgeslagen, en het is de enige manier om een verkeerd uitgesproken naam te vangen.
- elk eigennaam, acroniem of eenheid. Het model heeft geen woordenboek dat u kunt bewerken. Als "osei" of "GDPR" verkeerd uitkomt, is de oplossing het fonetisch in de invoertekst en accepteert dat de invoer nu lelijk is.
- De lengte, tegen de sleuf die het moet vullen. Onthoud dat het tempo slechts losjes controleerbaar is, dus verlaat ruimte in plaats van te plannen tot het tweede.
- Converteren voordat u uploadt. 2,6 MB per minuut WAV is niet wat je wilt op een webpagina.
Waarom draait het op de eigen server van de site?
Omdat de teksten die mensen hardop hebben voorgelezen vaak hun eigen ongepubliceerde schrift zijn.
Een concept, een script, een begeleidende brief, een toespraak, een bericht dat ze niet zeker weten over het verzenden. Het conventionele alternatief plaatst het op een dienst die per personage factureert, de tekst onder de voorwaarden houdt die niemand leest en een account nodig heeft voor het eerste woord.
Hier gaat het naar een container naast de web-app, wordt gesynthetiseerd en komt terug als een bestand. De kosten zijn zichtbaar in elke meting hierboven: één slot per keer, een plafond van 3.000 karakters, 22 kHz mono en een stem die in plaats van uitzendt. In ruil daarvoor werd de tekst gelezen door een machine die u al vertrouwde met de pagina.



