Rubrik: COM/OLE/Registry/DLL · Automation | VB-Versionen: VB4, VB5, VB6 | 09.09.04 |
Programme mit Text-to-Speech sprechen lassen Hier erfahren Sie, wie Sie mit Hilfe der Text-to-Speech API von Microsoft, Programm sprechen lassen. | ||
Autor: Sebastian | Bewertung: | Views: 30.794 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wer schon immer lästige MsgBoxen ablösen wollte, bspw. durch eine elegantere, persönlichere Möglichkeit, sollte sich diesen Tipp zu Gemüte führen. Es wäre doch viel cooler, wenn der Computer um Hilfe ruft, z.B. bei einer falschen Passworteingabe, als eine MsgBox anzeigt mit dem Text "Falsches Passwort". Wie man sein Programm sprechen läst, zeigt dieser Tipp.
Wichtig:
Für die "Sprechfunktion" werden nachfolgende API´s von Microsoft benötigt:
Sprachengine, ohne die läuft nix
Deutsches Sprachmodul für eine deutsche Aussprache
So, dann fangen wir mal an.
Für die Sprachausgabe wird die Komponente Microsoft Direct Text-to-Speech benötigt - also unter "Komponenten..." aktivieren.
Für das nachfolgende Beispiel benötigen wir weiterhin:
- eine Form (Name: Form1)
- DirectSS (Name: dssRead)
- ListBox (Name: lstSpeaker)
- TextBox (txtText, MultiLine: True, ScrollBars: 3 - Beides)
- CommandButton (Name: cmdRead, Caption: Lesen)
- CommandButton (Name: cmdStop, Caption: Stop)
- HScrollBar (Name: scrReadSpeed)
Und nun der Code:
Was darf nirgenwo fehlen? Genau!
Option ExplicitDas was beim Laden der Form passiert ist noch trivial, eigentlich ist alles trivial ;)
Mit .Speaker(SpeakerNr) ermittelt man den Namen des Sprechers(SpeakerNr).
Private Sub Form_Load() Dim N As Long ' Max-Wert der Scrollbar auf max-Lesegeschwindigkeit setzen scrReadSpeed.Max = dssRead.MaxSpeed ' Min-Wert der Scrollbar auf min-Lesegeschwindigkeit setzen scrReadSpeed.Min = dssRead.MinSpeed ' Die Sprecher ermitteln und der LsiBox hinzufügen N = 1 Do While Trim$(dssRead.Speaker(N)) <> "" lstSpeaker.AddItem dssRead.Speaker(N) N = N + 1 Loop End Sub
Beim Klick auf den CommandButton "cmdRead" wird einfach nur mittels .Speak(Text) ein Text vorgelesen. Auch sehr einfach
' Text der MultiLine-TextBox vorlesen Private Sub cmdRead_Click() If Trim$(txtText) = "" Then Exit Sub dssRead.Speak txtText End Sub
Durch Aufruf von .AudioReset wird die Audioausgabe zurückgesetzt. Aus Bequemlichkeit hab ich auf Pause/Weiter verzichtet, erklär aber kurz, dass Pasue mit .AudioPause und Fortsetzen mit .AudioResume möglich ist.
' Audio ausgabe zurücksetzen/stoppen Private Sub cmdStop_Click() dssRead.AudioReset End Sub
Beim Klick auf einen ListBox-Eintrag wird der ausgewählte "Sprecher" gesetzt:
Private Sub lstSpeaker_Click() With lstSpeaker If .ListIndex >= 0 Then dssRead.CurrentMode = .ListIndex + 1 ' Sprecher setzen End If End Sub
Über den horizontale Scrollbalken wird die Lesengeschwindigkeit .Speed auf den Wert der ScrollBar gesetzt.
Private Sub scrReadSpeed_Change() On Error Resume Next cmdRead.SetFocus dssRead.Speed = scrReadSpeed.Value ' Lesegeschwindikeit ändern End Sub Private Sub scrReadSpeed_Scroll() cmdRead.SetFocus dssRead.Speed = scrReadSpeed.Value ' Lesegeschwindikeit ändern End Sub
Beim Start der Textausgabe deaktivieren wir einige Teile (Controls) des Programmes, die den Lesefluss beeinträchtigen würden.
Private Sub dssRead_TextDataStarted(ByVal hi As Long, ByVal lo As Long) scrReadSpeed.Enabled = False lstSpeaker.Enabled = False cmdRead.Enabled = False cmdStop.Enabled = True End Sub
Ist die Sprachausgabe beendet, werden die Controls wieder aktiviert:
Private Sub dssRead_TextDataDone(ByVal hi As Long, ByVal lo As Long, ByVal Flags As Long) scrReadSpeed.Enabled = True lstSpeaker.Enabled = True cmdRead.Enabled = True cmdStop.Enabled = False End Sub
Das war es auch schon. Eigentlich wirklich nichts weltbewegendes
Ein paar Verwendungsmöglichkeiten:
- Ersatz von MsgBoxen
- Seinem Programmen Persönlickeit verleihen
- Mit der zweiten DLL, die bei der Sprachengine dabbei ist (der Spracherkennungsengine) kombinieren. Damit habe ich mich aber noch nicht auseinander gesetzt, da mein schönes Mikrophone kaputt ist
Und jetzt viel Spaß mit Ihren sprechenden Programmen!