Signatur
Beschreibung
Die Eigenschaft localService eines SpeechSynthesisVoice-Objekts zeigt an, ob die Sprachausgabe dieser Stimme lokal auf dem Gerät erzeugt wird (true) oder ob der Text an einen entfernten Dienst (z. B. einen Cloud-Server des Browserherstellers) geschickt wird (false).
Das ist in der Praxis aus mehreren Gründen wichtig: Lokale Stimmen funktionieren offline, haben meist eine geringere Latenz und senden den vorgelesenen Text nicht über das Netzwerk – relevant für Datenschutz und vertrauliche Inhalte. Remote-Stimmen (etwa die „Google“-Stimmen in Chrome) klingen oft natürlicher, benötigen aber eine Internetverbindung.
Typischerweise filtert man die Liste aus speechSynthesis.getVoices() nach localService, um z. B. eine Offline-fähige Stimme zu bevorzugen oder Nutzern in einer Auswahlliste anzuzeigen, welche Stimmen Daten ins Netz senden.
Rückgabewert
true bei einem lokalen Sprachsynthesizer, false bei einem Remote-Dienst. Die Eigenschaft ist schreibgeschützt.Beispiele
Alle Stimmen mit Herkunft auflisten
const listVoices = () => {
const voices = speechSynthesis.getVoices();
voices.forEach((voice) => {
const art = voice.localService ? 'lokal' : 'remote';
console.log(`${voice.name} (${voice.lang}) – ${art}`);
});
};
// Stimmen werden oft asynchron geladen
listVoices();
speechSynthesis.addEventListener('voiceschanged', listVoices);
Offline-fähige deutsche Stimme bevorzugen
const getVoicesAsync = () =>
new Promise((resolve) => {
const voices = speechSynthesis.getVoices();
if (voices.length) return resolve(voices);
speechSynthesis.addEventListener('voiceschanged',
() => resolve(speechSynthesis.getVoices()), { once: true });
});
const speak = async (text) => {
const voices = await getVoicesAsync();
const german = voices.filter((v) => v.lang.startsWith('de'));
// Lokale Stimme zuerst, sonst beliebige deutsche Stimme
const voice = german.find((v) => v.localService) ?? german[0];
const utterance = new SpeechSynthesisUtterance(text);
if (voice) utterance.voice = voice;
speechSynthesis.speak(utterance);
console.log('Verwendet:', voice?.name, voice?.localService);
};
speak('Guten Tag, dies ist ein Test.');
Datenschutz: nur lokale Stimmen für vertrauliche Texte
const speakPrivately = (text) => {
const localVoices = speechSynthesis.getVoices().filter((v) => v.localService);
if (localVoices.length === 0) {
console.warn('Keine lokale Stimme verfügbar – Vorlesen abgebrochen.');
return;
}
const utterance = new SpeechSynthesisUtterance(text);
utterance.voice = localVoices[0];
speechSynthesis.speak(utterance);
};
speakPrivately('Ihr Kontostand beträgt 1.234 Euro.');
// Wichtig · Fallstricke
- Leere Stimmenliste:
speechSynthesis.getVoices()liefert in Chrome beim ersten Aufruf oft ein leeres Array. Auf das Ereignisvoiceschangedwarten, bevor man nachlocalServicefiltert. - Datenschutz: Bei
localService === falsewird der vorgelesene Text in der Regel an einen Server des Browserherstellers übertragen. Für sensible Inhalte nur lokale Stimmen verwenden. - Offline: Remote-Stimmen scheitern ohne Netzwerk häufig stillschweigend oder lösen ein
error-Ereignis amSpeechSynthesisUtteranceaus. - Kompatibilität: Wird von Chrome, Edge, Safari und Firefox unterstützt. Welche Stimmen es gibt und ob sie lokal sind, hängt stark von Betriebssystem und Browser ab – Firefox und Safari bieten meist nur lokale Systemstimmen an.