Start · Sprachen · JavaScript · Referenz · SpeechSynthesisVoice.voiceURI

SpeechSynthesisVoice.voiceURI

Eigenschaft

Schreibgeschützte Zeichenkette, die den Sprachsynthesedienst einer Stimme über einen URI bzw. eine eindeutige Kennung identifiziert.

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

Signatur

SpeechSynthesisVoice.voiceURI

Beschreibung

Die Eigenschaft voiceURI eines SpeechSynthesisVoice-Objekts liefert eine Zeichenkette, die Art und Ort des Sprachsynthesedienstes angibt, der diese Stimme bereitstellt. Die Spezifikation beschreibt den Wert als URI. In der Praxis ist er aber oft nur eine vom Browser bzw. Betriebssystem vergebene Kennung, etwa "Google Deutsch" in Chrome oder "com.apple.voice.compact.de-DE.Anna" unter macOS/Safari.

Gut geeignet ist voiceURI, um eine Stimme eindeutig und dauerhaft wiederzuerkennen, zum Beispiel wenn eine Nutzerin in den Einstellungen eine Stimme auswählt und diese Auswahl in localStorage gespeichert werden soll. Der Anzeigename (name) ist dafür weniger verlässlich, weil mehrere Stimmen denselben Namen haben können.

Die Eigenschaft ist schreibgeschützt. Die Liste der Stimmen erhält man über speechSynthesis.getVoices(). Viele Browser laden diese Liste asynchron, deshalb sollte man auf das Ereignis voiceschanged warten, bevor man voiceURI auswertet.

Rückgabewert

Typ
string
Beschreibung
Ein URI oder eine eindeutige Kennung des Sprachsynthesedienstes bzw. der Stimme. Format und Inhalt hängen von Browser und Betriebssystem ab.

Beispiele

Alle verfügbaren Stimmen mit voiceURI auflisten

const listVoices = () => {
  const voices = speechSynthesis.getVoices();
  voices.forEach(({ name, lang, voiceURI }) => {
    console.log(`${name} (${lang}) → ${voiceURI}`);
  });
};

// Stimmen werden oft asynchron geladen
listVoices();
speechSynthesis.addEventListener('voiceschanged', listVoices);
Google Deutsch (de-DE) → Google Deutsch Microsoft Katja - German (Germany) (de-DE) → Microsoft Katja - German (Germany)

Gewählte Stimme dauerhaft speichern und wiederherstellen

const STORAGE_KEY = 'preferredVoiceURI';

const saveVoice = (voice) => {
  localStorage.setItem(STORAGE_KEY, voice.voiceURI);
};

const getSavedVoice = () => {
  const uri = localStorage.getItem(STORAGE_KEY);
  return speechSynthesis.getVoices().find((v) => v.voiceURI === uri) ?? null;
};

speechSynthesis.addEventListener('voiceschanged', () => {
  const voice = getSavedVoice();
  const utterance = new SpeechSynthesisUtterance('Willkommen zurück!');
  if (voice) utterance.voice = voice;
  speechSynthesis.speak(utterance);
});

Auswahlliste mit voiceURI als Wert befüllen

const select = document.querySelector('#voice-select');

const fillSelect = () => {
  select.replaceChildren(
    ...speechSynthesis.getVoices().map((voice) => {
      const option = document.createElement('option');
      option.value = voice.voiceURI;
      option.textContent = `${voice.name} (${voice.lang})${voice.default ? ' – Standard' : ''}`;
      return option;
    })
  );
};

fillSelect();
speechSynthesis.onvoiceschanged = fillSelect;

select.addEventListener('change', () => {
  const voice = speechSynthesis.getVoices().find((v) => v.voiceURI === select.value);
  const u = new SpeechSynthesisUtterance('Das ist meine Stimme.');
  u.voice = voice;
  speechSynthesis.speak(u);
});

// Wichtig · Fallstricke

  • Kein einheitliches Format: Obwohl die Eigenschaft „URI“ heißt, ist der Wert selten eine echte URL. Er darf weder geparst noch für Netzwerkzugriffe verwendet werden, sondern dient nur als Kennung zum Vergleichen.
  • Nicht plattformübergreifend stabil: Dieselbe Stimme kann in verschiedenen Browsern oder auf verschiedenen Geräten einen anderen voiceURI haben. Gespeicherte Werte immer mit einem Rückfall absichern, etwa auf eine Stimme mit passendem lang oder auf default.
  • Asynchrones Laden: In Chrome gibt getVoices() beim ersten Aufruf oft ein leeres Array zurück. Deshalb auf voiceschanged warten.
  • Datenschutz: Die Liste der installierten Stimmen und ihre Kennungen können zum Browser-Fingerprinting beitragen. Manche Browser schränken die Liste deshalb ein.
  • Die Web Speech API (Sprachsynthesis) wird in Chrome, Edge, Firefox und Safari unterstützt, auf Mobilgeräten stehen aber teils nur wenige Stimmen zur Verfügung.