De 87 referansefilene bar en plain-text `| Verified: <dato>`-hale på **Last updated:**-linjen i 500B-header-vinduet — usynlig for den bold-only kontrakt-stacken (kb-headers.mjs / audit RE_VERIFIED), og claimet en verifisering judgen aldri gjorde (samme poison-klasse som de 14 bold **Verified:** MCP Spor 1 fjernet). Uhåndtert springer den også dual-Verified-fellen: R7s insertVerifiedFields ville stemplet en bold-verdi ved siden av den plain → to motstridende provenance-claims per fil. - ny driver strip-stale-verified-pipe.mjs: frosset 87-manifest (18 advisor + 45 eng + 8 gov + 16 sec), pure verdi-bevarende strip (kun ` | Verified: …`-halen; **Last updated:**-dato byte-eksakt), hard per-fil-invariant (linjeantall uendret, body byte-identisk, dato bevart), idempotent, atomicWriteSync (RX-OPS2 recovery-kontrakt). - audit-corpus-headers.mjs: ny plain-Verified-deteksjon (RE_PLAIN_VERIFIED + plainVerifiedPipe) — gjør M4-blindheten synlig så en stale plain-hale ikke kan gjenoppstå stille (non-advisor scope). - 87 filer strippet; plain Verified i vinduet 0/389; live-audit plainVerifiedPipe 0. Mekanisme: +15 tester (12 strip + 3 audit). Suite 875→890 exit 0. validate-plugin.sh 250/0. Utsatt → RX-KB1b: footer-dato-avvik + label-whitelist (annen dialekt, flag-to-human).
539 lines
25 KiB
Markdown
539 lines
25 KiB
Markdown
# Speech Services - Text-to-Speech and Neural Voices
|
||
|
||
**Last updated:** 2026-06-19
|
||
**Status:** GA
|
||
**Type:** reference
|
||
**Source:** https://learn.microsoft.com/azure/ai-services/speech-service/personal-voice-overview
|
||
|
||
> **Status 2026-04:** Azure Neural TTS og Custom Neural Voice er begge bekreftet GA og aktivt vedlikeholdt. `nb-NO-PernilleNeural` og `nb-NO-FinnNeural` er de primære norske stemmene. Custom Neural Voice Pro tilbyr ytterligere tilpasning for enterprise-bruk.
|
||
|
||
**Category:** Azure AI Services (Foundry Tools)
|
||
|
||
---
|
||
|
||
## Innhold
|
||
|
||
- [Introduksjon](#introduksjon)
|
||
- [Kjernekomponenter / Nøkkelegenskaper](#kjernekomponenter--nøkkelegenskaper)
|
||
- [Arkitekturmønstre](#arkitekturmønstre)
|
||
- [Beslutningsveiledning](#beslutningsveiledning)
|
||
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
|
||
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
|
||
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
|
||
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
|
||
- [Kilder og verifisering](#kilder-og-verifisering)
|
||
|
||
## Introduksjon
|
||
|
||
Azure Speech Services sitt Text-to-Speech (TTS) API konverterer tekst til naturlig syntetisk tale ved hjelp av deep neural networks. Tjenesten er en del av Microsoft Foundry Tools og tilbyr over 400 stemmer på 140+ språk og dialekter. TTS gjør det mulig å lage applikasjoner som leser opp tekst, generere lydbøker, bygge chatbots med naturlig tale, og forbedre tilgjengelighet.
|
||
|
||
Kjernen i moderne TTS er neural voices som bruker dype nevrale nettverk for å overkomme begrensningene til tradisjonell talesyntese når det gjelder stress og intonasjon. Prosody-prediksjon og stemmesyntese skjer samtidig, noe som gir mer flytende og naturlige resultater. Hvert standard neural voice-modell er tilgjengelig i 24 kHz og høy-fidelitet 48 kHz, og output kan opp- eller ned-samples til andre formater.
|
||
|
||
Microsoft tilbyr tre kategorier av stemmer: **standard voices** (out-of-the-box neural voices), **custom voices** (professional voice fine-tuning med Limited Access), og **personal voice** (rask stemmeopprettelse fra korte prøver). For produksjonsmiljøer er standard voices den vanligste løsningen, mens custom voice krever søknad og godkjenning fra Microsoft.
|
||
|
||
## Kjernekomponenter / Nøkkelegenskaper
|
||
|
||
| Komponent | Beskrivelse | Bruk |
|
||
|-----------|-------------|------|
|
||
| **Standard Neural Voices** | Over 400 ferdigtrente stemmer i 140+ språk/dialekter, tilgjengelig i 24kHz og 48kHz | Generell talesyntese, chatbots, accessibility |
|
||
| **Multilingual Voices** | Stemmer som flytende snakker flere språk (eks. `en-US-AvaMultilingualNeural` støtter 91 locales) | Flerspråklige applikasjoner, globalreach |
|
||
| **High Definition (HD) Voices** | Høyere kvalitet neural voices for krevende scenarioer | Premium lydkvalitet, professional content |
|
||
| **OpenAI TTS Voices** | OpenAI-stemmer tilgjengelig via Azure Speech (North Central US, Sweden Central) | Integrasjon med OpenAI-baserte løsninger |
|
||
| **Custom Neural Voice** | Limited Access-funksjon for å trene unike merkestemmer | Brand identity, spesialiserte use cases |
|
||
| **Personal Voice** | Rask stemmekloning fra korte lydprøver | Personaliserte applikasjoner, voice assistants |
|
||
| **SSML** | Speech Synthesis Markup Language for kontroll over prosody, rate, pitch, volume, styles | Avansert stemmekontroll |
|
||
| **Batch Synthesis API** | Asynkron syntese for lange lydfiler (>10 min, eks. lydbøker) | Long-form content, batch processing |
|
||
| **Real-time Synthesis** | Speech SDK eller REST API for sanntidssyntese | Interactive applications, voice agents |
|
||
| **Visemes** | Ansiktsposisjoner (leppe-synkronisering) for hver fonem | Leppe-lesing, avatars, animation |
|
||
| **Audio Effect Processor** | Optimalisering for spesifikke miljøer (`eq_car`, `eq_telecomhp8k`) | Bil-audio, telecom, noisy environments |
|
||
| **Text-to-Speech Avatar** | Syntetisk video av avatar som snakker (prebuilt og custom) | Visual chatbots, kiosks, metaverse |
|
||
|
||
### SSML Prosody-kontroll
|
||
|
||
Med SSML kan du justere følgende prosodiske elementer:
|
||
|
||
| Element | Verdier | Eksempel |
|
||
|---------|---------|----------|
|
||
| **Rate** | `0.5` til `2` (eller `x-slow`, `slow`, `medium`, `fast`, `x-fast`) | `<prosody rate="+30%">` |
|
||
| **Pitch** | `0.5` til `1.5` × original (Hz, semitones, %, `x-low/low/medium/high/x-high`) | `<prosody pitch="high">` |
|
||
| **Volume** | `0.0` til `100.0` (eller `silent`, `x-soft`, `soft`, `medium`, `loud`, `x-loud`) | `<prosody volume="+20%">` |
|
||
| **Contour** | Array av pitch-endringer over tid | `<prosody contour="(0%,+20Hz)(10%,-2st)">` |
|
||
| **Emphasis** | `reduced`, `none`, `moderate`, `strong` (kun visse stemmer) | `<emphasis level="moderate">` |
|
||
| **Style** | Språk- og stemmespesifikke stiler (eks. `cheerful`, `sad`, `angry`, `newscast`) | `<mstts:express-as style="cheerful">` |
|
||
| **Role** | Aldersrolle/kjønn-imitasjon (`Girl`, `Boy`, `YoungAdultFemale`, etc.) | `<mstts:express-as role="OlderAdultMale">` |
|
||
|
||
### Kodeeksempel (C# med Speech SDK)
|
||
|
||
```csharp
|
||
using Microsoft.CognitiveServices.Speech;
|
||
|
||
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
|
||
|
||
// Velg standard neural voice
|
||
speechConfig.SpeechSynthesisLanguage = "en-US";
|
||
speechConfig.SpeechSynthesisVoiceName = "en-US-Ava:DragonHDLatestNeural";
|
||
|
||
// Syntetiser til speaker
|
||
using var speechSynthesizer = new SpeechSynthesizer(speechConfig);
|
||
await speechSynthesizer.SpeakTextAsync("I'm excited to try text to speech");
|
||
|
||
// Eller til fil
|
||
using var audioConfig = AudioConfig.FromWavFileOutput("output.wav");
|
||
using var fileSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
|
||
await fileSynthesizer.SpeakTextAsync("This goes to a file");
|
||
```
|
||
|
||
### SSML-eksempel (med prosody og style)
|
||
|
||
```xml
|
||
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
|
||
xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
|
||
<voice name="en-US-AvaMultilingualNeural">
|
||
<mstts:express-as style="cheerful" styledegree="2">
|
||
<prosody rate="+10%" pitch="+5%">
|
||
Welcome to Azure Speech Services!
|
||
</prosody>
|
||
</mstts:express-as>
|
||
</voice>
|
||
</speak>
|
||
```
|
||
|
||
## Arkitekturmønstre
|
||
|
||
### Mønster 1: Real-time Interactive Speech
|
||
|
||
**Beskrivelse:** Sanntidssyntetisering av tale for chatbots, voice assistants og IVR-systemer.
|
||
|
||
**Implementering:**
|
||
- Bruk Speech SDK (C#, Python, JavaScript, Java, C++, Objective-C, Swift)
|
||
- Konfigurer SpeechConfig med subscription key og region
|
||
- Velg neural voice basert på use case (standard/multilingual/HD)
|
||
- Send tekst eller SSML til SpeakTextAsync() / SpeakSsmlAsync()
|
||
- Output til speaker, fil eller in-memory stream
|
||
|
||
**Fordeler:**
|
||
- Lav latency (optimalisert for sanntidsrespons)
|
||
- Støtter streaming audio output
|
||
- Integrasjon med Speech-to-Text for full voice conversation loop
|
||
- Viseme-events for ansiktsanimasjon
|
||
|
||
**Ulemper:**
|
||
- Rate limits per Speech resource (justerbar med business justification)
|
||
- Krever konstant nettverkstilkobling
|
||
- Ikke egnet for batch-generering av lange lydfiler
|
||
|
||
**Best for:** Conversational AI, voice agents, accessibility features, in-car assistants.
|
||
|
||
---
|
||
|
||
### Mønster 2: Batch Synthesis for Long-Form Content
|
||
|
||
**Beskrivelse:** Asynkron syntese av lange lydfiler (>10 min) som lydbøker, podcasts, e-læring.
|
||
|
||
**Implementering:**
|
||
- Bruk Batch Synthesis REST API (preview)
|
||
- Send text eller SSML med metadata
|
||
- Poll for status (pending → running → succeeded)
|
||
- Download synthesized audio når klar
|
||
- Støtter custom voices og personal voices
|
||
|
||
**Fordeler:**
|
||
- Ingen tidsbegrensning (støtter timer-lange filer)
|
||
- Asynkron prosessering (fire-and-forget)
|
||
- Støtter alle output-formater (inkl. 48kHz)
|
||
- Optimalisert for throughput over latency
|
||
|
||
**Ulemper:**
|
||
- Ikke sanntid (kan ta minutter avhengig av lengde)
|
||
- Krever polling-logikk i applikasjon
|
||
- Ikke støtte for audio-element i SSML (men batch synthesis API har det)
|
||
|
||
**Best for:** Audiobooks, training materials, podcast-generering, large-scale content creation.
|
||
|
||
---
|
||
|
||
### Mønster 3: Custom Brand Voice med Professional Fine-Tuning
|
||
|
||
**Beskrivelse:** Opprett unik merkestemme med professional voice fine-tuning (Limited Access).
|
||
|
||
**Implementering:**
|
||
1. Søk om tilgang via intake form (https://aka.ms/customneural)
|
||
2. Samle høykvalitets voice recordings (voice talent consent påkrevd)
|
||
3. Opprett prosjekt i Speech Studio
|
||
4. Last opp recording scripts og audio (20-40 compute hours training)
|
||
5. Train modell (cap: 96 compute hours fakturering)
|
||
6. Deploy endpoint (hosting faktureres per time)
|
||
7. Bruk custom voice name i SSML
|
||
|
||
**Fordeler:**
|
||
- Unik brand identity
|
||
- Støtter multi-style training (ca. 90 compute hours)
|
||
- 48kHz output etter engine upgrade
|
||
- Kan kombineres med SSML for ekstra kontroll
|
||
|
||
**Ulemper:**
|
||
- Limited Access (krever godkjenning)
|
||
- Koster å trene ($$ per compute hour)
|
||
- Koster å hoste endpoint ($$ per time)
|
||
- Voice talent consent og juridiske krav
|
||
- Ikke egnet for quick prototyping
|
||
|
||
**Best for:** Enterprise brand voice, customer service, media production, long-term investments.
|
||
|
||
## Beslutningsveiledning
|
||
|
||
### Når bruke Standard Neural Voices?
|
||
|
||
| Scenario | Anbefaling |
|
||
|----------|------------|
|
||
| **Prototype/MVP** | ✅ Ja — rask oppstart, ingen godkjenning |
|
||
| **Budget-begrenset** | ✅ Ja — kun pay-per-character |
|
||
| **Global reach** | ✅ Ja — 140+ språk out-of-the-box |
|
||
| **Kort time-to-market** | ✅ Ja — ingen training-tid |
|
||
| **Generic voice OK** | ✅ Ja — bred støtte, god kvalitet |
|
||
|
||
### Når bruke Custom Neural Voice?
|
||
|
||
| Scenario | Anbefaling |
|
||
|----------|------------|
|
||
| **Brand identity kritisk** | ✅ Ja — unik merkestemme |
|
||
| **Celebrity/character voice** | ✅ Ja — med consent |
|
||
| **Langsiktig investering** | ✅ Ja — ROI over tid |
|
||
| **Compliance med voice talent** | ✅ Ja — juridisk rammeverk på plass |
|
||
| **Quick POC** | ❌ Nei — for lang lead time |
|
||
|
||
### Når bruke Personal Voice?
|
||
|
||
| Scenario | Anbefaling |
|
||
|----------|------------|
|
||
| **User-generated voices** | ✅ Ja — rask kloning |
|
||
| **Personaliserte assistenter** | ✅ Ja — hver bruker sin stemme |
|
||
| **Skalering (mange stemmer)** | ✅ Ja — per-voice-per-day fakturering |
|
||
| **Høy kvalitetskrav** | ⚠️ Vurder — lavere kvalitet enn professional |
|
||
|
||
### Beslutningstabell: Batch vs. Real-time
|
||
|
||
| Kriterium | Real-time Synthesis | Batch Synthesis |
|
||
|-----------|---------------------|-----------------|
|
||
| **Latency** | <1 sekund | Minutter (asynkront) |
|
||
| **Audio lengde** | <10 minutter | Ubegrenset |
|
||
| **Use case** | Interactive/conversational | Long-form content |
|
||
| **SDK support** | Ja (alle språk) | REST API only |
|
||
| **Streaming** | Ja | Nei (download når ferdig) |
|
||
|
||
### Vanlige feil og røde flagg
|
||
|
||
| Feil | Konsekvens | Løsning |
|
||
|------|------------|---------|
|
||
| **Hardkodet SSML-stemmer** | Ikke flerspråklig-kompatibel | Bruk multilingual voices + lang element |
|
||
| **Ignorer audio effects** | Dårlig lydkvalitet i bil/telefon | Bruk `effect="eq_car"` eller `eq_telecomhp8k` |
|
||
| **Over-tuning prosody** | Unaturlig robotlyd | Hold rate mellom 0.5-2, pitch 0.5-1.5 |
|
||
| **Glemmer rate limits** | Throttling i prod | Request rate increase proaktivt |
|
||
| **Ingen error handling** | Dårlig brukeropplevelse | Implementer fallback til alternativ stemme |
|
||
| **Custom voice uten hosting** | Voice ikke tilgjengelig | Budsjett for endpoint hosting-kostnader |
|
||
| **Chinese characters** | Dobbel billing | 1 kinesisk tegn = 2 billable characters |
|
||
|
||
## Integrasjon med Microsoft-stakken
|
||
|
||
### Microsoft Foundry
|
||
|
||
- TTS er innebygd i AI Foundry Playground
|
||
- Testverktøy: Speech Studio Voice Gallery, Audio Content Creation
|
||
- Ingen kode-tilnærming: Audio Content Creation tool
|
||
- Prosjekt-basert deployment med Foundry resources
|
||
|
||
### Microsoft 365 Copilot & Copilot Studio
|
||
|
||
- TTS kan integreres via custom connectors (Power Automate)
|
||
- Ikke native i M365 Copilot per januar 2026
|
||
- Copilot Studio: kan bruke TTS via Power Automate action
|
||
|
||
### Power Platform
|
||
|
||
- Power Automate: Speech Services-connector tilgjengelig
|
||
- Custom connectors: REST API-basert integrasjon
|
||
- AI Builder: Ikke direkte TTS-støtte (men kan kalle via Power Automate)
|
||
|
||
### Azure OpenAI
|
||
|
||
- OpenAI TTS voices tilgjengelig i Azure Speech (North Central US, Sweden Central)
|
||
- Også tilgjengelig direkte via Azure OpenAI TTS API
|
||
- Støtter `tts-1` og `tts-1-hd` modeller (alloy, echo, fable, onyx, nova, shimmer)
|
||
|
||
### Microsoft Agent Framework
|
||
|
||
- TTS kan brukes som output-kanal i agent-arkitektur
|
||
- Voice Live API: Kombinerer STT, LLM, og TTS i én WebSocket-forbindelse
|
||
- Avatar-integrasjon: Real-time avatar synthesis med TTS
|
||
|
||
### Azure Services
|
||
|
||
| Tjeneste | Integrasjonspunkt |
|
||
|----------|-------------------|
|
||
| **Azure Functions** | Call Speech SDK fra serverless function |
|
||
| **Azure Logic Apps** | HTTP action til REST API |
|
||
| **Azure Bot Service** | Innebygd TTS-støtte via Bot Framework |
|
||
| **Azure Media Services** | TTS output kan lagres i Media Services |
|
||
| **Azure Blob Storage** | Lagring av synthesized audio files |
|
||
| **Azure CDN** | Distribusjon av pre-generated audio |
|
||
|
||
## Offentlig sektor (Norge)
|
||
|
||
### GDPR og personvern
|
||
|
||
**Data som prosesseres:**
|
||
- Input text (kan inneholde personopplysninger)
|
||
- Voice samples (for custom/personal voice — biometrisk data)
|
||
- Synthesized audio output
|
||
|
||
**GDPR-vurdering:**
|
||
- Text input logges ikke av Microsoft (processed in-memory)
|
||
- Custom voice training data lagres i Speech resource (customer-controlled)
|
||
- Personal voice profiles er biometrisk data — krever eksplisitt consent
|
||
- Audio output er ikke persondata med mindre innholdet er det
|
||
|
||
**Anbefalinger:**
|
||
- Bruk Azure regions i EU (West Europe, North Europe) for data residency
|
||
- For custom voice: DPIA (Data Protection Impact Assessment) påkrevd
|
||
- Voice talent consent må dekke GDPR Art. 9 (biometric data)
|
||
- Implementer logging og audit trail for TTS requests
|
||
|
||
### Schrems II og datasuverenitet
|
||
|
||
**Utfordringer:**
|
||
- Azure Speech kjører i Microsoft-kontrollerte datasentre
|
||
- EU-US Data Privacy Framework gjelder for data transfers
|
||
- Custom voice modeller lagres i Azure region (customer choice)
|
||
|
||
**Mitigering:**
|
||
- Velg EU-baserte regions (West Europe, North Europe)
|
||
- Bruk Azure Confidential Computing for ekstra isolasjon (ikke direkte støttet for Speech per jan 2026)
|
||
- Contractual clauses: Standard Contractual Clauses (SCCs) dekker transfers
|
||
|
||
### AI Act (EU)
|
||
|
||
**Risikoklassifisering:**
|
||
- TTS er generelt **lav-risiko** AI (ikke i high-risk categories)
|
||
- **Unntak:** TTS for deepfakes eller manipulation → transparency-krav
|
||
- **Custom voice med voice cloning** → disclosure-krav
|
||
|
||
**Compliance-krav:**
|
||
- Disclosure: Brukere må informeres om at stemmen er syntetisk
|
||
- Transparency note: Microsoft tilbyr transparency note for custom voice
|
||
- Prohibited uses: Ikke bruk for manipulation, misinformation eller skade
|
||
|
||
**Anbefalinger:**
|
||
- Implementer explicit disclosure i UI ("This voice is AI-generated")
|
||
- Følg Microsoft's Code of Conduct for TTS integrations
|
||
- Voice talent consent må dekke AI Act-krav
|
||
|
||
### Forvaltningsloven og universell utforming
|
||
|
||
**Tilgjengelighetskrav:**
|
||
- TTS forbedrer tilgjengelighet for synshemmede (WCAG 2.1 AA)
|
||
- Offentlige nettsteder skal tilby skjermleserstøtte (Forvaltningsloven § 42)
|
||
|
||
**Anbefalinger:**
|
||
- Implementer TTS som standard accessibility feature
|
||
- Test med norske stemmer (nb-NO) for norsk offentlig sektor
|
||
- Kombiner med STT for full voice-basert navigasjon
|
||
|
||
### Språk og dialekter (Norge)
|
||
|
||
| Språk | Stemmer tilgjengelig | Kvalitet |
|
||
|-------|----------------------|----------|
|
||
| **Norwegian Bokmål (`nb-NO`)** | `nb-NO-PernilleNeural` (F), `nb-NO-FinnNeural` (M) | ⭐⭐⭐⭐ |
|
||
| **Norwegian Nynorsk** | Ikke støttet (bruk `nb-NO` med tekst-tilpasning) | — |
|
||
| **Samisk** | Ikke støttet | — |
|
||
|
||
**Utfordring:** Nynorsk og samisk ikke native støttet. Løsning: Translasjon før TTS eller custom voice training.
|
||
|
||
## Kostnad og lisensiering
|
||
|
||
### Prismodell (pr. januar 2026)
|
||
|
||
| Kategori | Enhet | Pris (estimat, sjekk Azure pricing) |
|
||
|----------|-------|-------------------------------------|
|
||
| **Standard Neural Voices** | Per character | ~$0.015 per 1000 characters |
|
||
| **HD Voices** | Per character | ~$0.03 per 1000 characters |
|
||
| **Custom Voice Training** | Per compute hour | ~$10-$50 per hour (cap: 96h) |
|
||
| **Custom Voice Hosting** | Per endpoint per hour | ~$0.05-$0.50 per hour |
|
||
| **Personal Voice Storage** | Per voice per day | ~$1-$5 per voice per day |
|
||
| **Personal Voice Synthesis** | Per character | Samme som standard voices |
|
||
| **Batch Synthesis** | Per character | Samme som standard voices |
|
||
| **Text-to-Speech Avatar** | Per second of video | ~$0.02-$0.10 per second |
|
||
|
||
**Viktig:** Priser varierer per region og er illustrative. Sjekk [Azure Pricing Calculator](https://azure.microsoft.com/pricing/details/cognitive-services/speech-services/) for eksakt prisnivå.
|
||
|
||
### Fakturering av tegn (billable characters)
|
||
|
||
- **Alle tegn teller:** bokstaver, tall, mellomrom, tegnsetting
|
||
- **SSML markup teller:** Alt unntatt `<speak>` og `<voice>` tags
|
||
- **Kinesiske tegn = 2× tegn** (også kanji, hanja, hanzi)
|
||
- **Ingen output = faktureres likevel** (hvis request er valid)
|
||
|
||
**Eksempel:**
|
||
```xml
|
||
<speak><voice name="en-US-AvaNeural">Hello, world!</voice></speak>
|
||
```
|
||
Billable characters: `Hello, world!` = 13 tegn (ikke `<speak>` eller `<voice>`)
|
||
|
||
### Kostnadsoptimalisering
|
||
|
||
| Strategi | Besparelse |
|
||
|----------|------------|
|
||
| **Cache synthesized audio** | 90%+ (for statisk innhold) |
|
||
| **Use standard voices over HD** | 50% |
|
||
| **Pre-generate common phrases** | 100% (ingen runtime-kostnad) |
|
||
| **Batch synthesis for long-form** | Ingen direkte saving, men bedre throughput |
|
||
| **Rate limit management** | Unngå throttling-kostnader |
|
||
| **Suspend custom voice endpoints** | 100% hosting-kostnad når ikke i bruk |
|
||
|
||
### Lisenskrav
|
||
|
||
- **Azure subscription** påkrevd (Pay-as-you-go, EA, CSP)
|
||
- **Speech resource** i Azure portal (S0 tier for production)
|
||
- **Free tier (F0)** tilgjengelig: 5 audio requests/month, 0.5M characters/month
|
||
- **Custom voice:** Krever Microsoft Foundry resource + Limited Access approval
|
||
|
||
### TCO-estimat (Total Cost of Ownership) — Eksempel
|
||
|
||
**Scenario:** Voice assistant for offentlig sektor (10,000 brukere/måned, 50 requests/bruker, 200 characters/request)
|
||
|
||
| Komponent | Kalkyle | Kostnad/måned (NOK) |
|
||
|-----------|---------|---------------------|
|
||
| **Characters** | 10,000 × 50 × 200 = 100M chars | ~15,000 kr |
|
||
| **Speech resource (S0)** | Fixed cost | 0 kr (PAYG) |
|
||
| **Bandwidth (egress)** | ~100 GB @ 48kHz WAV | ~100 kr |
|
||
| **Storage (cache)** | ~500 GB Blob Storage | ~100 kr |
|
||
| **Total** | — | **~15,200 kr/måned** |
|
||
|
||
**Custom voice-tillegg:**
|
||
- Training (one-time): ~20,000-50,000 kr (40 compute hours × ~500 kr/h)
|
||
- Hosting: ~4,000 kr/måned (24/7 endpoint)
|
||
- **Total første år:** ~230,000 kr
|
||
|
||
## For arkitekten (Cosmo)
|
||
|
||
### Spørsmål å stille kunden
|
||
|
||
1. **Hvilke språk må støttes, og er norsk bokmål tilstrekkelig eller trengs nynorsk/samisk?**
|
||
- Hvis nynorsk: vurder custom voice training eller tekst-tilpasning før TTS.
|
||
|
||
2. **Er det behov for unik merkestemme, eller er standard neural voices godt nok?**
|
||
- Custom voice krever Limited Access approval (4-6 ukers lead time) og voice talent consent.
|
||
|
||
3. **Skal TTS brukes i sanntid (chatbot) eller batch (audiobook)?**
|
||
- Sanntid: Speech SDK med low-latency konfigurering.
|
||
- Batch: Batch Synthesis API for filer >10 minutter.
|
||
|
||
4. **Hva er volumet av characters per måned, og hva er budsjettet?**
|
||
- Bruk Azure Pricing Calculator for estimat. Cache statisk innhold for å spare penger.
|
||
|
||
5. **Er det krav til disclosure (AI-generert stemme) eller voice talent consent?**
|
||
- Offentlig sektor + EU AI Act: Disclosure påkrevd for transparency.
|
||
|
||
6. **Skal løsningen integreres med eksisterende Microsoft-stack (Teams, Power Platform, Azure OpenAI)?**
|
||
- Power Automate connector tilgjengelig. Azure OpenAI har egen TTS API.
|
||
|
||
7. **Hva er kravet til lydkvalitet: standard (24kHz), HD (48kHz), eller professional custom voice?**
|
||
- HD voices koster 2× standard. Custom voice for ultimate kvalitet.
|
||
|
||
8. **Er det behov for prosody-kontroll (SSML) eller holder plain text?**
|
||
- SSML gir kontroll over rate, pitch, volume, style — anbefalt for advanced use cases.
|
||
|
||
### Fallgruver og vanlige feil
|
||
|
||
| Fallgruve | Konsekvens | Hvordan unngå |
|
||
|-----------|------------|---------------|
|
||
| **Ikke test med norske stemmer** | Dårlig brukeropplevelse | Test `nb-NO-PernilleNeural` tidlig i prosjektet |
|
||
| **Over-estimert custom voice ROI** | Høye kostnader uten verdi | Start med standard voices, vurder custom etter MVP |
|
||
| **Glemmer voice talent consent** | Juridisk risiko | Følg Microsoft's consent guidelines og mal |
|
||
| **Ingen error handling** | App crasher ved rate limits | Implementer retry logic og fallback-stemme |
|
||
| **Hard-kodet stemmer** | Ikke skalerbart | Bruk konfigurasjon/database for voice selection |
|
||
| **Ignorerer GDPR** | Brudd på personvernforskriften | DPIA for custom voice, data residency i EU |
|
||
|
||
### Anbefalinger per modenhetsnivå
|
||
|
||
#### Nivå 1: Pilot / POC
|
||
|
||
- **Bruk:** Standard neural voices (`nb-NO-PernilleNeural`)
|
||
- **SDK:** Speech SDK (C# eller Python)
|
||
- **Output:** Speaker eller in-memory stream
|
||
- **Kostnad:** Free tier (F0) eller minimal PAYG
|
||
- **Tid:** 1-2 uker implementering
|
||
|
||
#### Nivå 2: MVP / Production
|
||
|
||
- **Bruk:** Standard neural voices eller HD voices
|
||
- **SDK:** Speech SDK med error handling og retry logic
|
||
- **Caching:** Azure Blob Storage for statisk innhold
|
||
- **Monitoring:** Application Insights for latency tracking
|
||
- **Kostnad:** PAYG (S0 tier)
|
||
- **Tid:** 4-6 uker implementering
|
||
|
||
#### Nivå 3: Enterprise / Custom Voice
|
||
|
||
- **Bruk:** Custom neural voice (Limited Access)
|
||
- **Training:** 40-90 compute hours (single/multi-style)
|
||
- **Hosting:** 24/7 endpoint deployment
|
||
- **Integration:** Power Platform, Azure OpenAI, Teams
|
||
- **Compliance:** GDPR, AI Act, voice talent consent
|
||
- **Kostnad:** 200,000-500,000 kr første år (training + hosting)
|
||
- **Tid:** 3-6 måneder (inkl. approval process)
|
||
|
||
#### Nivå 4: Advanced / Multi-Region / Avatar
|
||
|
||
- **Bruk:** Multi-region deployment (HA/DR)
|
||
- **Avatar:** Text-to-Speech Avatar (prebuilt eller custom)
|
||
- **Voice Live API:** Integrated STT + LLM + TTS pipeline
|
||
- **Geo-redundancy:** Multiple Speech resources (West Europe + North Europe)
|
||
- **Kostnad:** 500,000+ kr/år
|
||
- **Tid:** 6-12 måneder
|
||
|
||
### Sikkerhetsdesign-tips
|
||
|
||
- **API keys:** Bruk Azure Key Vault, ikke hardkod i kode
|
||
- **Managed Identity:** Foretrekk over service principals for Azure-integrasjoner
|
||
- **Network isolation:** Private Endpoints for Speech resources hvis mulig
|
||
- **Rate limiting:** Implementer client-side throttling før Azure rate limits
|
||
- **Audit logging:** Log alle TTS requests for compliance (Analytics Workspace)
|
||
|
||
## Kilder og verifisering
|
||
|
||
### Microsoft Learn (Verified via MCP)
|
||
|
||
| Kilde | Confidence | URL |
|
||
|-------|------------|-----|
|
||
| What is Text-to-Speech? | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/text-to-speech |
|
||
| Customize voice and sound with SSML | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-synthesis-markup-voice |
|
||
| How to synthesize speech from text | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-speech-synthesis |
|
||
| Text-to-Speech FAQ | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/faq-tts |
|
||
| Transparency note for TTS | ✅ Documented | https://learn.microsoft.com/en-us/azure/foundry/responsible-ai/speech-service/text-to-speech/transparency-note |
|
||
| Language support | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts |
|
||
| Speech service pricing | ✅ Documented | https://azure.microsoft.com/pricing/details/cognitive-services/speech-services/ |
|
||
| Batch synthesis API | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/batch-synthesis |
|
||
| Custom neural voice | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/custom-neural-voice |
|
||
| Personal voice | ✅ Documented | https://learn.microsoft.com/en-us/azure/ai-services/speech-service/personal-voice-overview |
|
||
|
||
### Code Samples (Verified via MCP)
|
||
|
||
- C# Speech SDK: https://github.com/Azure-Samples/cognitive-services-speech-sdk
|
||
- Batch Synthesis samples: https://github.com/Azure-Samples/Cognitive-Speech-TTS
|
||
- Avatar samples: https://github.com/Azure-Samples/cognitive-services-speech-sdk/tree/master/samples/js/browser/avatar
|
||
|
||
### Confidence per seksjon
|
||
|
||
| Seksjon | Confidence | Basert på |
|
||
|---------|------------|-----------|
|
||
| Introduksjon | ✅ Documented | MCP docs_search + docs_fetch |
|
||
| Kjernekomponenter | ✅ Documented | MCP docs + code samples |
|
||
| Arkitekturmønstre | ⚠️ Baseline + Verified | Patterns fra docs + erfaring |
|
||
| Beslutningsveiledning | ⚠️ Baseline | Best practices (ikke eksplisitt i docs) |
|
||
| Integrasjon Microsoft-stakken | ✅ Documented (delvis) | Dokumentert for noen, baseline for andre |
|
||
| Offentlig sektor (Norge) | ⚠️ Baseline | GDPR/AI Act-vurdering ikke i MS docs |
|
||
| Kostnad og lisensiering | ✅ Documented | Pricing docs + examples |
|
||
| For arkitekten | ⚠️ Baseline | Praktisk erfaring, ikke dokumentert i MCP |
|
||
|
||
**Totalt antall MCP-kall:** 7 (4 × docs_search, 3 × docs_fetch, 1 × code_sample_search)
|
||
**Unike kilder:** 10+ Microsoft Learn-artikler
|