Plapre Nano - 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 | ~334.6M (base) + 123K (talerprojektion) |
| Vocab-størrelse | 20.802 (8000 BPE + 12.800 lyd + separatorer) |
| Lydtokenizer | Kanade (25 tokens/sek, 12.800 codebook) |
| Samplerate | 24kHz |
| Præcision | bfloat16 |
Sådan virker det
Modellen tager dansk tekst, konverterer den til BPE-tokens, og genererer autoregressivt Kanade-lydtokens, som afkodes til en lydbølge.
Sekvensformat:
[speaker_embedding] <text> BPE tokens <audio> audio tokens <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.
Træningsdata
- NST-DA
- FTSpeech
Installation
uv add git+https://github.com/syv-ai/plapre.git
Inferens
Grundlæggende brug
from plapre import Plapre
tts = Plapre("syvai/plapre-nano")
tts.speak("Hej, hvordan har du det?", output="output.wav")
Vis tilgængelige talere
print(tts.list_speakers())
# ['tor', 'ida', 'liv', 'ask', 'kaj']
Vælg en taler
tts.speak("Hej med dig.", output="output.wav", speaker="ida")
Stemmekloning
tts.speak("Hej med dig.", output="cloned.wav", speaker_wav="reference.wav")
Lange tekster med sætningsopdeling
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)
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
- 829