/** * Die Sprechgeschwindigkeit der Vorlesefunktion. * * **Warum es das gibt.** `useVorlesen` setzte an der Äußerung bis 0.22.0 nur * `lang` und `voice`; `rate` blieb auf der Systemvorgabe. Wer schneller oder * langsamer hören musste, konnte nichts tun. Die Zielgruppe der Funktion ist * im Quelltext selbst benannt – Menschen mit Lese-Rechtschreib-Störung und * ermüdeten Augen –, und für sie ist ein festes Tempo bei einer über eine * Minute langen Erklärung eine echte Hürde. * * **Warum die Leiter eng bleibt.** Unter 0,75 klingen die Systemstimmen unter * Windows verwaschen, über 1,5 verschlucken sie Endungen. Beides schadet dem * Verstehen mehr, als der Zeitgewinn nützt — und eine Stufe, die niemand * benutzen kann, ist keine Wahl, sondern eine Falle. * * **Warum hier und nicht bei der Sprachausgabe.** Der Hauptprozess muss den * Wert bereinigen, bevor er in `einstellungen.json` geht, und er darf keinen * Renderer-Code laden. */ /** Die wählbaren Geschwindigkeiten als `rate` der Web Speech API. */ export const SPRECHTEMPI = [0.75, 1, 1.25, 1.5] as const; export type Sprechtempo = (typeof SPRECHTEMPI)[number]; export const SPRECHTEMPO_STANDARD: Sprechtempo = 1; /** „Langsam“, „Normal“ … – für Beschriftung und Ansage. */ export const SPRECHTEMPO_BEZEICHNUNG: Readonly> = Object.freeze({ '0.75': 'Langsam', '1': 'Normal', '1.25': 'Zügig', '1.5': 'Schnell', }); export function sprechtempoBereinigen(wert: unknown): Sprechtempo { return typeof wert === 'number' && (SPRECHTEMPI as readonly number[]).includes(wert) ? (wert as Sprechtempo) : SPRECHTEMPO_STANDARD; } /** „Normal“ – die Beschriftung zur Stufe. */ export function sprechtempoText(tempo: number): string { return SPRECHTEMPO_BEZEICHNUNG[String(sprechtempoBereinigen(tempo))] ?? 'Normal'; } /** „Sprechtempo: Zügig.“ – für die Live-Region nach dem Umstellen. */ export function sprechtempoAnsage(tempo: number): string { return `Sprechtempo: ${sprechtempoText(tempo)}.`; }