03/05/2025
I en verden, hvor mobiltelefonen er blevet en uundværlig del af vores hverdag, søger udviklere konstant nye måder at gøre weboplevelsen mere intuitiv og tilgængelig på. En af de mest spændende teknologier, der er dukket op i de seneste år, er Web Speech API. Denne API åbner døren til en helt ny dimension af interaktion ved at lade webapplikationer forstå og generere tale. Men spørgsmålet, der ofte melder sig, er: Kan Web Speech API virkelig bruges effektivt på mobile browsere? Svaret er ja, men med visse forbehold og en smart løsning på en almindelig udfordring. Lad os dykke ned i, hvordan du kan udnytte stemmens kraft på tværs af platforme og sikre, at dine brugere får en problemfri oplevelse, uanset om de bruger en desktop eller en smartphone.

- Hvad er Web Speech API?
- Stemmegenkendelse (Speech Recognition) – Sådan Fungerer Det
- Stemmesyntese (Speech Synthesis) – At Få Browseren til at Tale
- Understøttelse af Browsere og Fremtidige Udsigter
- Ofte Stillede Spørgsmål (FAQ)
- Fungerer Web Speech API på alle mobile browsere?
- Hvad er den største udfordring ved at bruge API'en på mobil?
- Skal jeg have internetforbindelse for at bruge Web Speech API?
- Er der privatlivsbekymringer ved brug af stemmegenkendelse?
- Hvor mange ord kan jeg læse op ad gangen uden at opdele teksten på mobil?
- Konklusion
Hvad er Web Speech API?
Web Speech API er en JavaScript API, der giver webudviklere mulighed for at integrere talebaserede funktioner direkte i deres webapplikationer. Den består primært af to hovedkomponenter:
- Stemmegenkendelse (Speech Recognition): Gør det muligt for din webapplikation at lytte til brugerens tale og transskribere den til tekst i realtid. Forestil dig at kunne udfylde formularer, søge på websites eller styre applikationer udelukkende med din stemme.
- Stemmesyntese (Speech Synthesis): Giver din webapplikation mulighed for at konvertere tekst til tale, så browseren kan læse indhold højt for brugeren. Dette er ideelt for tilgængelighed, læseapps eller interaktive chatbots.
Denne API er et kraftfuldt værktøj, der kan forbedre brugervenligheden og tilgængeligheden af dine webapplikationer betydeligt. Den kan bruges til alt fra enkle stemmekommandoer til komplekse transskriptionsløsninger og interaktive stemmeassistenter. Men som med mange nye webteknologier, især dem der interagerer med hardware som mikrofoner, er der nuancer og specifikke implementeringsdetaljer, der skal tages i betragtning, især når det gælder mobile enheder.
Stemmegenkendelse (Speech Recognition) – Sådan Fungerer Det
Implementering af stemmegenkendelse med Web Speech API er relativt ligetil, selvom API'en stadig er under udvikling og derfor ofte findes med en browser-specifik præfiks som webkitSpeechRecognition. Den grundlæggende idé er at skabe et SpeechRecognition-objekt, konfigurere det og derefter starte lytteprocessen.
Nøgleegenskaber og Begivenhedshåndtere
Når du arbejder med stemmegenkendelse, er der flere vigtige egenskaber og begivenhedshåndtere, du skal kende til:
continuous: Denne egenskab bestemmer, om genkendelsen skal fortsætte, selv efter brugeren holder pause med at tale. Hvis den er sat tilfalse(standard), stopper genkendelsen, så snart brugeren holder op med at tale. For længere diktering eller kontinuerlig input sættes den tiltrue.interimResults: Hvis denne er sat tiltrue, vil genkendelsessystemet løbende give foreløbige resultater, som kan ændre sig, efterhånden som mere tale behandles. Disse vises ofte som grå tekst i realtids-transskriptionssystemer. Når et resultat er endeligt, vises det typisk som sort tekst og ændres ikke mere. Dette giver en mere dynamisk og responsiv brugeroplevelse.lang: Angiver det sprog, der skal genkendes. Dette skal specificeres med en BCP-47-kode, f.eks. "da-DK" for dansk, "en-US" for amerikansk engelsk eller "es-ES" for spansk (Spanien). Web Speech API understøtter et bredt udvalg af sprog, hvilket gør det utrolig alsidigt for internationale applikationer.
Derudover er der en række begivenhedshåndtere, der lader dig reagere på forskellige stadier af genkendelsesprocessen:
onstart: Udløses, når genkendelsesprocessen starter og begynder at fange lyd.onresult: Dette er den vigtigste begivenhed, da den udløses, når der modtages nye genkendelsesresultater (både foreløbige og endelige). Her behandler du den transskriberede tekst.onerror: Udløses, hvis der opstår en fejl under genkendelsen, f.eks. hvis mikrofonen ikke er tilgængelig eller der er en netværksfejl.onend: Udløses, når genkendelsesprocessen afsluttes, enten automatisk (hviscontinuouserfalse) eller manuelt.
Sådan Starter du Genkendelsen
For at starte stemmegenkendelsen kalder du simpelthen recognition.start(). Første gang en bruger aktiverer stemmegenkendelse på et website, vil browseren typisk bede om tilladelse til at bruge mikrofonen. Websites, der hostes via HTTPS, husker ofte denne tilladelse, hvilket giver en mere flydende oplevelse ved gentagen brug, mens HTTP-sider skal bede om tilladelse hver gang. Dette understreger vigtigheden af at hoste dine webapplikationer sikkert.
Web Speech API's stemmegenkendelse er blevet demonstreret i mange applikationer, der viser realtids-tale-til-tekst-transskription, live undertekster og automatisk generering af undertekstfiler (.vtt, .srt, .json). Disse demos fungerer ofte fuldstændigt i browseren uden behov for installation eller uploads, hvilket fremhæver API'ens effektivitet og brugervenlighed.
Her er en oversigt over nogle vigtige egenskaber:
| Egenskab | Beskrivelse | Standardværdi | Anvendelse |
|---|---|---|---|
continuous | Sætter genkendelsen til at fortsætte, selv efter pauser i talen. | false | Længere diktering, stemmeassistenter. |
interimResults | Giver foreløbige resultater, der kan ændre sig. | false | Realtidsfeedback, live undertekster. |
lang | Angiver sproget for genkendelse (f.eks. "da-DK"). | Browserens standard. | Internationalisering, specifikke sprogbehov. |
Stemmesyntese (Speech Synthesis) – At Få Browseren til at Tale
Ud over at lytte kan Web Speech API også tale! Stemmesyntese-delen af API'en giver dig mulighed for at konvertere tekst til tale ved hjælp af browserens indbyggede stemmer. Dette gøres primært med SpeechSynthesisUtterance-objektet og window.speechSynthesis.speak()-funktionen.
Grundlæggende Stemmesyntese
For at få browseren til at tale, opretter du et SpeechSynthesisUtterance-objekt, tildeler den tekst, du ønsker at læse op, og kalder derefter speak()-metoden. Du kan også justere parametre som volumen (volume), hastighed (rate), tonehøjde (pitch) og sprog (lang) for at skræddersy taleoutputtet. For eksempel, for at læse tekst op på dansk, ville du sætte lang til "da-DK", hvis en passende stemme er tilgængelig i browseren.

Den Mobile Udfordring: "Synthesis Failed"-fejlen
Dette er kernen i mange udvikleres frustration, når de forsøger at implementere stemmesyntese på mobile enheder. Selvom Web Speech API'en understøttes af de fleste moderne browsere, herunder Chrome og Safari på mobil, støder man ofte på en "Synthesis Failed"-fejl, når man forsøger at læse længere tekster op. Denne fejlmeddelelse opstår, fordi mobile browsere har en tegnbegrænsning for, hvor mange tegn stemmesyntesen kan læse op ad gangen.
Denne begrænsning ligger typisk et sted omkring 600 ord, selvom det nøjagtige tal kan variere afhængigt af browseren, længden af ordene, tegnsætning og mellemrum – alt, der tæller som et tegn, kan påvirke den samlede længde. Dette er en optimering, der sandsynligvis er implementeret for at spare på enhedens ressourcer, da stemmesyntese kan være en ressourcekrævende proces på mindre kraftige mobile processorer.
Løsningen: Opdeling af Tekst og Kø-Mekanisme
Heldigvis er der en effektiv løsning på denne tegnbegrænsning, som udnytter en indbygget funktion i Web Speech API: kø-mekanismen. API'en kan behandle flere SpeechSynthesisUtterance-objekter i en kø, hvilket betyder, at hvis du kalder speak() flere gange i træk, vil browseren læse dem op efter hinanden, sekventielt. Dette giver os mulighed for at omgå tegnbegrænsningen ved at opdele lange tekster i mindre "bidder" eller "chunks" og derefter føje hver bid til køen.
Trinvis Tilgang til Løsningen:
Opdel Teksten i Ordbaseret Chunks: Først skal du opdele den fulde tekst i mindre stykker. En god tommelfingerregel er at sigte efter omkring 500 ord pr. chunk, da dette er under den observerede 600-ords grænse og giver plads til variationer i ordlængde og tegnsætning.
Du kan beregne det nødvendige antal chunks ved at tælle det samlede antal ord i teksten og dividere det med din ønskede chunk-størrelse (f.eks. 500). Funktionen
Math.ceil()er nyttig her for at sikre, at du altid får et helt tal, der dækker hele teksten, selvom det sidste chunk er kortere.Eksempelvis logik:
let tekst = "Din meget lange tekst her..."; let antalOrd = tekst.split(" ").length; let chunkStørrelse = 500; let antalChunks = Math.ceil(antalOrd / chunkStørrelse);Opret et 2D Array til Sætninger: For at organisere dine tekstbidder kan du bruge et todimensionelt array. Dette array vil holde styr på hvert chunk, som igen vil indeholde en række ord.

Using Web Speech Api on mobile browsers. Using Web Speech Api on mobile browsers. The Web Speech API enables you to incorporate voice data into web apps. Have you tried adding speech synthesis to your website and ran into a bug on mobile browsers? Where it doesn't run and it throws the "Synthesis Failed" error when you debug it. let listeAfSætninger = []; for (let i = 0; i < antalChunks; i++) { listeAfSætninger[i] = []; }Fyld Arrayet med Ord: Brug derefter indlejrede løkker til at iterere gennem den oprindelige tekst og fylde dit 2D array med ord, indtil hvert chunk når sin definerede størrelse (f.eks. 500 ord). En tæller kan bruges til at holde styr på, hvilket ord i den oprindelige tekst du er nået til.
let ordTæller = 0; for (let x = 0; x < antalChunks; x++) { for (let j = 0; j < chunkStørrelse; j++) { if (tekst.split(" ")[ordTæller]) { // Tjek om ordet eksisterer listeAfSætninger[x][j] = tekst.split(" ")[ordTæller++]; } } }Kald
speak()for Hvert Chunk: Endelig, når du har dine tekstbidder organiseret i arrayet, kan du iterere gennem dette array. For hvert chunk samler du ordene til en streng (f.eks. med.join(" ")), opretter etSpeechSynthesisUtterance-objekt med denne streng og kalderwindow.speechSynthesis.speak().for (let x = 0; x < antalChunks; x++) { let chunkTekst = listeAfSætninger[x].join(" "); let udtalelse = new SpeechSynthesisUtterance(chunkTekst); // Indstil sprog, hastighed, etc. for 'udtalelse' window.speechSynthesis.speak(udtalelse); }
Denne metode sikrer, at ingen enkelt opkald til speak() overskrider den mobile browsers tegnbegrænsning, og takket være API'ens kø-mekanisme vil alle tekstbidder blive læst op i den korrekte rækkefølge, hvilket giver en illusion af en ubrudt læsning. Denne løsning fungerer både på mobile og desktop browsere, der understøtter Web Speech API, og den løser den specifikke begrænsning for ordlængde, ikke den generelle browserunderstøttelse.
Fordele og Ulemper ved Chunking
Fordele:
- Løser mobilbuggen: Den primære fordel er, at den eliminerer "Synthesis Failed"-fejlen på mobile browsere for lange tekster.
- Bedre ydeevne: At behandle mindre tekstbidder ad gangen kan potentielt forbedre ydeevnen og responsiviteten, især på mindre kraftfulde enheder.
- Fleksibilitet: Giver dig kontrol over, hvor meget tekst der behandles ad gangen, hvilket kan finjusteres for den bedste brugeroplevelse.
Ulemper:
- Implementeringskompleksitet: Kræver mere kode og logik for at opdele og administrere tekstbidderne.
- Potentiel forsinkelse: Afhængigt af chunk-størrelsen og browserens ydeevne kan der opstå en meget lille, men mærkbar, pause mellem hver chunk, når den næste udtalelse aktiveres. Mindre chunks kan starte hurtigere, men potentielt give flere overgange, mens større chunks kan give en mere glidende overgang, men en langsommere start.
Understøttelse af Browsere og Fremtidige Udsigter
Web Speech API har set stigende understøttelse, især i Chromium-baserede browsere. Stemmegenkendelsesdelen har været tilgængelig i Chrome 25 og nyere versioner, og stemmesyntese er også bredt understøttet i moderne versioner af Chrome og Safari på både desktop og mobil. Det er vigtigt at bemærke, at selvom løsningen med tekstopdeling afhjælper tegnbegrænsningen, løser den ikke en potentiel mangel på browserunderstøttelse for selve API'en.
Som en W3C-standard er Web Speech API fortsat under udvikling, og vi kan forvente at se forbedret og mere ensartet understøttelse på tværs af browsere i fremtiden. Denne teknologi har et enormt potentiale til at revolutionere, hvordan vi interagerer med websteder og applikationer, hvilket gør dem mere intuitive og tilgængelige for et bredere publikum.
Ofte Stillede Spørgsmål (FAQ)
Fungerer Web Speech API på alle mobile browsere?
Nej, ikke på alle. De store browsere som Chrome og Safari på mobil understøtter det, men ofte med den nævnte tegnbegrænsning for stemmesyntese. Det er altid en god idé at teste din implementering på de specifikke browsere og enheder, dine brugere anvender.

Hvad er den største udfordring ved at bruge API'en på mobil?
Den største udfordring for stemmesyntese er tegnbegrænsningen, der kan føre til "Synthesis Failed"-fejlen for længere tekster. For stemmegenkendelse kan mikrofontilladelser og baggrundsstøj være faktorer.
Skal jeg have internetforbindelse for at bruge Web Speech API?
For stemmegenkendelse er en internetforbindelse ofte nødvendig, da mange browsere sender lyddata til cloud-baserede tjenester for at opnå den bedste genkendelsesnøjagtighed. Stemmesyntese kan i nogle tilfælde fungere offline, hvis browseren har indbyggede stemmer, men det varierer.
Er der privatlivsbekymringer ved brug af stemmegenkendelse?
Ja, da stemmegenkendelse kræver adgang til mikrofonen, er privatliv et vigtigt aspekt. Browsere beder om brugerens tilladelse, og det er vigtigt at informere brugerne om, hvordan deres stemmedata behandles. Google har eksempelvis en privatlivsrapport for Chrome, der beskriver, hvordan stemmedata håndteres.
Hvor mange ord kan jeg læse op ad gangen uden at opdele teksten på mobil?
Uden at bruge den beskrevne opdelingsmetode er grænsen typisk omkring 600 ord. Hvis du overskrider denne grænse, vil du sandsynligvis opleve "Synthesis Failed"-fejlen. Med opdelingsmetoden kan du i princippet læse ubegrænset tekst op.
Konklusion
Web Speech API er en utrolig kraftfuld og spændende teknologi, der giver webudviklere mulighed for at skabe rigere og mere interaktive brugeroplevelser. Selvom der er en specifik udfordring med tegnbegrænsningen for stemmesyntese på mobilbrowsere, er den nem at overkomme med en simpel, men effektiv opdelings- og kø-mekanisme. Ved at anvende denne løsning kan du sikre, at dine webapplikationer leverer en ensartet og høj kvalitet stemmefunktion, uanset hvilken enhed dine brugere benytter.
Fremtiden for webudvikling er utvivlsomt mere stemmebaseret, og Web Speech API er din port til at bygge applikationer, der ikke kun reagerer på berøring og klik, men også lytter og taler. Ved at omfavne disse muligheder kan du forbedre tilgængeligheden og skabe en dybere, mere intuitiv interaktion for alle dine brugere.
Hvis du vil læse andre artikler, der ligner Web Speech API på Mobil: Stemmestyring for Alle, kan du besøge kategorien Teknologi.
