Hallo OGGI,
ich hatte mich etwas zu früh gefreut und muss dich noch einmal "belästigen". Denn ich bin auf ein Problem gestoßen, dass ich mangels Know-how nicht lösen kann, dass Dich aber wahrscheinlich nur ein müdes Lächeln kostet. Vielleicht kannst Du helfen:
[u]Hier der Status:
1. Ich habe ein Projekt, in dem es mehrere Formen gibt. Um die Stimme nach deinem Code zu ändern habe ich ein eigenständiges Fenster, in dem man die Stimme per Listbox wählen kann.
Über einen Command-Button wird der Name der ausgewählten Stimme dann vorgelesen und die Form verlassen.
Option Explicit
Private V As SpeechLib.SpVoice
Private T As SpeechLib.ISpeechObjectToken
Private Sub Form_Load()
Dim strVoice As String
'Vorhandene Stimmen auslesen und in Listbox einfügen
Set V = New SpVoice
For Each T In V.GetVoices
strVoice = T.GetDescription 'Name der Stimme lesen
Listbox_Stimmen.AddItem strVoice 'zu Listbox hinzufügen
Next
Listbox_Stimmen.ListIndex = 0 'Erste Stimme in Listbox als
' ausgewählt markieren
End Sub
Private Sub cmd_Exit_Click()
Dim ObjTextToSpeech As Object
Dim Lautstaerke As Long
Dim Text As String
'Text und Geschwindigkeit festlegen
Lautstaerke = -4 _
'Vorlesegeschwindigkeit von -10 bis +10, 0=Standard
Text = Listbox_Stimmen.Text
'Sprechen
Set V.voice = V.GetVoices().Item(Listbox_Stimmen.ListIndex)
V.Rate = Lautstaerke
V.Speak Text, SVSFlagsAsync
'Stimmauswahl-Fenster verlassen
form_Hauptmenue.Visible = True
Unload Me
End Sub 2. In meinem Projekt lasse ich den PC bisher sprechen, indem ich ein Modul erstellt habe, in dem folgender Code steht:
Option Explicit
Public Sub sprachausgabe(Text As String)
Dim voice As Variant
'Sprachausgabe
Set voice = CreateObject("SAPI.SpVoice")
voice.Rate = -5 'Lesegeschwindigkeit
voice.Volume = 100 'Leselautstärke
DoEvents
voice.Speak Text, 0 'Vorlesen
End Sub Der Aufruf erfolgt dann aus diversen Formen heraus mit sprachausgabe (String-Variable) .
Der Vorteil: Ich musste die VB-Befehle zur Sprachausgabe nur einmal hinterlegen, kann auf sie von überall im Projekt flexibel zugreifen.
Nun das Problem: Scheinbar nutzt Dein Code und mein Code nicht dieselbe "Art" zu sprechen (ich muss das so ungeschickt ausdrücken, weil ich es nicht besser erklären kann). D.h. ich kann zwar über Deinen Code die Sprache umstellen und damit einmal was sprechen, wenn mein Programm danach aber wieder auf meinen "alten" Code zur Sprachausgabe zurückgreift, spricht Windows nicht mit der zuvor über Deinen Code eingestellten Sprache, sondern mit der in der Windows-Systemsteuerung hinterlegten. Ich erkläre mir das so, dass die durch Deinen Code gar nicht geändert (das war ja mein ursprünglicher Laienhafter Lösungsansatz) wird. Was ja grundsätzlich auch die viel bessere Variante ist!
Meine Frage: Wie kann ich Deinen Code so umbauen, dass die Ergebnisse der Auswahl vom Programm gemerkt (z.B. Ablage in öffentlichen Variablen oder sowas) werden und ich sie von jedem Punkt im Projekt aufrufen und zum Sprechen nutzen kann (dann brauche ich meinen "alten" Code zum Sprechen nicht mehr und nehme nur noch Deinen). Also kurz gesagt: Ich will Auswahl der Sprache mit der gesprochen werden soll (s. Code oben + Form-übergreifendes Merken der Einstellungen) und das Sprechen mit der ausgwählten Sprache (noch kein Code vorhanden) voneinander trennen.
Hältst Du das für einen sinnvollen Ansatz und kannst du mir einen Realisierungstipp geben? Ich wäre Dir echt dankbar!
Gruß
V A T
P.S.: Übrigens ne sehr interessante Homepage hast Du! Ich werde sie weiterempfehlen!
Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!! |