Start · Sprachen · JavaScript · Referenz · SpeechSynthesisVoice.localService

SpeechSynthesisVoice.localService

Eigenschaft

Schreibgeschützter boolescher Wert: <code>true</code>, wenn die Stimme von einem lokalen Sprachsynthesizer stammt, <code>false</code>, wenn sie über einen Remote-Dienst bereitgestellt wird.

seit JavaScript Baseline: alle modernen Browser (Web Speech API) Kategorie: webapi

Signatur

SpeechSynthesisVoice.localService

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

Typ
boolean
Beschreibung
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);
Anna (de-DE) – lokal Google Deutsch (de-DE) – remote ...

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.');
Verwendet: Anna true

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 Ereignis voiceschanged warten, bevor man nach localService filtert.
  • Datenschutz: Bei localService === false wird 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 am SpeechSynthesisUtterance aus.
  • 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.