Mit der Speech API hat es Microsoft Entwicklern sehr einfach gemacht, eine Sprachausgabe in eigene Software zu integrieren. Wie das am Beispiel eines Workshop oder Meeting Timers aussehen kann, erfahren Sie in diesem Artikel.
Microsoft Speech API
Die Bibliothek kann in allen Microsoft Office Anwendungen über VBA verwendet werden. Sie ist zwar schon ziemlich alt, funktioniert aber auch unter Windows 10. Der große Funktionsumfang von Sprachausgabe bis zur Spracherkennung kling am Anfang sehr komplex – und er ist es auch.
Soll aber nur eine Sprachausgabe erfolgen, sind die notwendigen Funktionen einfach zu integrieren. Das ist neben Microsoft Produktion, auch mit anderen Programmiersprachen, wie Lazarus oder Delphi möglich.
Ich möchte in diesem Artikel zeigen, wie eine einfache Sprachausgabe realisiert wird. Mein Beispiel ist ein Workshop-Timer. Der Timer zählt einen Count-Down von einer beliebigen Startdauer auf 0 Sekunden. Das soll jetzt durch eine zusätzliche Sprachausgabe verbessert werden.
Einbau im Lazarus-Projekt
Die Bibliothek wird über ein OLE-Objekt eingebunden. Deshalb muss in der uses-Anweisung die Unit ComObj aufgenommen werden.
uses Classes, SysUtils, ... ComObj;
Der Bezeichner SpVoice, für das Objekt der Sprachausgabe, wird am besten global als variant definiert.
var SpVoice: variant;
Im FormCreate-Ereignis wird die Sprachengine dann als OLE-Objekt erzeugt.
//Spracheausgabe vorbereiten SpVoice := CreateOleObject('SAPI.SpVoice'); SpVoice.Rate:=1; //Sprechgeschwindigkeit von -10 bis 10 SpVoice.Volume:=90; //Lautstärke von 0 bis 100
Mehr Vorbereitungen sind nicht notwendig. Als nächstes kommt bereits die Umsetzung der Spracheausgabe im Workshop-Timer. Das geschieht über die Prozedur SpeechOutput. In meinem Fall soll der Workshop-Timer diese Zeitangaben sprechen:
- Alle 10 Minuten: NOCH X MINUTEN
- Kleiner als 10 Minuten, jede Minute: NOCH X MINUTEN
- Kleiner als 60 Sekunden, jede 10 Sekunden: NOCH X SEKUNDEN
- am Ende: ZEIT VORBEI
procedure TMainForm.SpeechOutput(time : integer); var min,sec : integer; text1,text2 : string; begin if Speech=false then exit; min:=time div 60; sec:=time-min*60; text1:=''; text2:=''; if time=0 then text1:='Zeit vorbei' else begin //Jede ab 10 Minuten jede Minute ansagen if (time mod 60=0) then begin if (min<=10) or (min mod 10=0) then begin text1:='noch '+IntToStr(min); text2:='Minute'; if min>1 then text2:=text2+'n' end; end; if (time<60) and (sec mod 10=0) then begin text1:= 'noch '+IntToStr(sec); text2:='Sekunde'; if sec>1 then text2:=text2+'n' end; end;
Die eigentliche Sprachausgabe erfolgt über die Methode Speak. Der erste Parameter ist der zu sprechende Text. Als zweiter Parameter kann ein Flag angegeben werden. Die 1 steht für eine asynchrone Ausgabe.
SpVoice.Speak(WideString(text1+' '+text2),1); end;
Man sollte auf jeden Fall beachten, dass die Methode Speak nur korrekt arbeitet, wenn ein WideString übergeben wird. Deshalb ist hier immer eine Konvertierung erforderlich.
Das war es schon! Mehr ist für eine einfache Sprachausgabe nicht erforderlich.
Wenn Sie jetzt Lust bekommen haben, selbst mit der Sprachausgabe über die Microsoft Speech API zu experimentieren, finden Sie unter Download ein kleines Test-Projekt vorbereitet.
Den den Workshop-Timer finden Sie natürlich auch unter Download.
Ich wünsche Ihnen viel Spaß beim Ausprobieren.
Download
Workshop-Timer Upgrade mit Spracheausgabe
Beispiel-Projekt zum Testen der Sprachausgabe
Links
Dokumentation zur Microsoft Speech API 5.3
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms723627(v%3dvs.85)
Für die Sprachausgabe schauen Sie am besten auf das Objekt SpVoice
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms720149(v%3dvs.85)
Artikel Schnelle Ideen in Workshops
Meine Artikel zur ersten Version des Workshop-Timers:
Besprechungs- und Workshop Timer
Besprechungszeit visualisieren
Pingback: Workshop-Timer Sprachausgabe Upgrade – tangielskyblog
Pingback: Excel Timer für bessere Produktivität - Tech+Code