Plapre Turbo - Dansk Tekst-til-Tale

Dansk TTS-model med talerkonditionering og stemmekloningssupport. Genererer 24kHz lyd fra dansk tekst ved hjælp af autoregressiv lydtoken-prædiktion.

Modeldetaljer

Arkitektur SmolLM2-360M (LLaMA-baseret, 32 lag, hidden_size=960)
Parametre ~327M (base) + 123K (talerprojektion)
Vocab-størrelse 20.884 (8000 BPE + 78 fonem + 12.800 lyd + separatorer)
Lydtokenizer Kanade (25 tokens/sek, 12.800 codebook)
Fonemisering espeak-ng (dansk IPA)
Samplerate 24kHz
Præcision bfloat16

Sådan virker det

Modellen tager dansk tekst, konverterer den til BPE-tokens og IPA-fonemer, og genererer autoregressivt Kanade-lydtokens, som afkodes til en lydbølge.

Sekvensformat:

[speaker_embedding] <text> BPE tokens </text> <phonemes> phone tokens </phonemes> <audio> audio tokens </audio> <eos>

Talerkonditionering: En indlært lineær projektion (nn.Linear(128, 960)) mapper en 128-dimensionel Kanade-talerembedding til modellens skjulte dimension. Denne indsættes som det første token i sekvensen, så modellen kan konditionere på taleridentitet via attention. Til stemmekloning udtrækkes talerembeddingen fra et referenceaudioklip via Kanade-encoderen.

Installation

Kræver Python 3.12+ og espeak-ng.

# Installér espeak-ng
# macOS
brew install espeak-ng
# Ubuntu/Debian
sudo apt install espeak-ng

# Installér plapre
uv add git+https://github.com/syv-ai/plapre.git

Ydeevne (RTX 4090)

Kun token-generering (ekskl. vocoder og filskrivning):

Tilstand Tokens/sek Realtidsfaktor Gennemløb
Enkelt (q8_0) 383 0,065 15,3x realtid
Enkelt (q4_k_m) 412 0,061 16,5x realtid
Batch=4 (q8_0) 869 0,029 34,8x realtid
Batch=16 (q8_0) 1.334 0,019 53,3x realtid
Batch=16 (q4_k_m) 1.507 0,017 60,3x realtid

Inferens

from plapre import Plapre

tts = Plapre("syvai/plapre-turbo")
tts.speak("Hej, hvordan har du det?", output="output.wav")

Kvantisering

GGUF-modeller downloades automatisk. Tilgængelige kvantiseringer: f16, q8_0 (standard), q6_k, q4_k_m, q4_0.

tts = Plapre("syvai/plapre-turbo", quant="q4_k_m")

Eller brug en lokal GGUF-fil:

tts = Plapre("syvai/plapre-turbo", model_path="/sti/til/model.gguf")

Vælg en taler

Indbyggede talere indlæses fra pakken. Den første taler bruges som standard.

tts.speak("Hej med dig.", output="output.wav", speaker="nic")

Stemmekloning

tts.speak("Hej med dig.", output="cloned.wav", speaker_wav="reference.wav")

Lange tekster med sætningsopdeling

Sætninger genereres parallelt i en batch for højere gennemløb:

tts.speak(
    "Første sætning. Anden sætning. Tredje sætning!",
    output="long.wav",
    split_sentences=True,
)

Genereringsparametre

tts.speak(
    "Hej verden.",
    output="output.wav",
    temperature=0.8,     # sampling-temperatur (standard: 0.8)
    top_p=0.95,          # nucleus sampling (standard: 0.95)
    top_k=50,            # top-k sampling (standard: 50)
    max_tokens=500,      # maks lydtokens at generere (standard: 500)
)

Udtræk en talerembedding

Udtræk en 128-dim talerembedding fra en wav-fil og genbrug den på tværs af flere genereringer:

speaker_emb = tts.extract_speaker("reference.wav")
tts.speak("Hej.", output="a.wav", speaker_emb=speaker_emb)
tts.speak("Farvel.", output="b.wav", speaker_emb=speaker_emb)

Udskift taler (stemmekonvertering)

Udskift taleren i en eksisterende lydfil og behold indholdet:

tts.replace_speaker("kilde.wav", output="konverteret.wav", speaker="nic")

# Eller brug en referencefil som målstemme
tts.replace_speaker("kilde.wav", output="konverteret.wav", speaker_wav="målstemme.wav")

Returværdi

speak() returnerer lyden som et numpy-array (24 kHz, float32) ud over at gemme filen:

audio = tts.speak("Hej.", output="output.wav")
print(f"Varighed: {len(audio) / 24000:.2f}s")
Downloads last month
46
Safetensors
Model size
0.3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support