| |
Visual-Basic EinsteigerRe: Windows Stimmenauswahl per VB umstellen | | | Autor: V A T | Datum: 06.02.15 17:41 |
| Hallo OGGI,
danke für Deine Unterstützung! Aber jetzt hast du mich verwirrt...
Zum Verständnis einige Frage:
a) Habe ich das richtig interprtiert, dass "deine" Art den PC sprechen zu lassen eine andere Art ist als "meine" bisher(!) genutzte Art? Wenn ja, bedeutet das für mich ich muss mich für eine entscheiden und die andere "vergessen"...
b) Hast Du in deinem zuletzt geschriebenen Code jetzt gar nicht mehr Deinen ursprünglichen Ansatz verfolgt, sondern hast versucht "meinen" Ansatz so weiterzuentwickeln, dass er meine Anforderung erfüllt?
c) Das erste Stück Code, was ich zuletzt veröffentlicht habe, stammt im Prinzip aus Deiner Feder und funktioniert perfekt (Stimme wählen, mit der Stimme etwas sagen). Einziges Problem, ich bekomme es nicht hin mir die gewählte Stimme zu merken, damit ich an anderer Stelle im Programm wieder etwas mit dieser Stimme sagen kann ohne sie vorher erneut zu wählen. Mein Ansatz war, "meinen" alten Code zu löschen und stattdessen ins Modul einen neuen Code zu schreiben, der auf "deine Art" spricht. Ist dieser Ansatz sinnvoll?
d) ich habe unabhängig von all den Fragen probiert Deinen letzten Code zum Laufen zu bringen. ist mir leider nicht gelungen. Er sagt die Variable "pubSprecherStimme" sei nicht definiert. Ich hab aber keine Ahnung, wie ich die richtig definiere.
Sorry für meine laienhafte Ausdrucksweise! Und nochmals Danke, dass Du Dich mit meinen Problemen rumschlägst!!!
Gruß
V A T
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!!! | |
Windows Stimmenauswahl per VB umstellen | | | Autor: V A T | Datum: 02.02.15 00:51 |
| Hallo,
ich habe eine Frage und hoffe, dass mir - wie bereits so oft - jemand helfen kann.
Ich habe mehrere VB6-Programme geschrieben, welche auch Sprachausgaben haben. Klapp alles prima, der Computer spricht (oft sehr zum Erstaunen meiner Frau .
Das Problem: Bei einem Programm, welches englische Vokabeln vorliest benötigt man eine andere "Stimmauswahl", als beim Programm, welches das deutsche Schnitzelrezept vorliesst. Nun habe ich natürlich in Windows (Version 7) sowohl eine deutsche (ScanSoft Steffi_Dri40_16k Hz), als auch eine englische (Microsoft Anna - english (United States) Stimme installiert, muss aber vor dem Start des jeweiligen VB-Programms über die Windows Systemsteuerung "Spracheigenschaften", "Text-in-Sprache", "Stimmauswahl" die korrekte Stimme einstellen, damit das Programm nicht mit ausländischen Akzent spricht.
Die Frage: Gibt es eine Möglichkeit im VB6-Programm abzufragen, welche Stimme aktuell eingestellt ist bzw. die gewünschte Stimme einzustellen? Dann würde das programm automatisch in der richtigen Sprache sprechen und ich mir das manuelle Umstellen sparen.
Vielen Dank an alle, die mich bei der Lösung unterstützen! Ich weiß das wirklich sehr zu schätzen!
Gruß
V A T
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!!! | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: Zardoz | Datum: 02.02.15 04:29 |
| Hallo V A T,
probier' mal dies:
Dim TextSpeech As Object
Set TextSpeech = CreateObject("SAPI.SpVoice")
Set TextSpeech.Voice = _
TextSpeech.GetVoices("Name=ScanSoft Steffi_Dri40_16kHz").Item(0) Gruss,
Zardoz | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: OGGI | Datum: 03.02.15 09:46 |
| Howdy V A T
1.) Einen Commandbutton und ein Listenfeld mit Namen »lstStimme« in ein neues Projekt einfügen.
2.) Unter IDE-Menüpunkt 'Projekt/Verweise', einen Verweis auf »Microsoft Speech Object Library« setzen.
'speech
Private V As SpeechLib.SpVoice
Private T As SpeechLib.ISpeechObjectToken
Private Sub Command_Click()
Dim ObjTextToSpeech As Object
Dim sItem As String
Dim sa As String
Dim lb As Long
'text
sa = "Man dient seinem Planet, bedingt seinem Land, nicht einer Fahne und" & _
"nie einem Glauben."
lb = -4 'vorlesegeschwindigkeit von -10 bis +10, 0=standard
If lstStimme.ListIndex > -1 Then
Set V.Voice = V.GetVoices().Item(lstStimme.ListIndex)
End If
V.Rate = lb 'geschwindigkeit
V.Speak sa, SVSFlagsAsync 'sprechen
End Sub
Private Sub Form_Load()
Dim strVoice As String
Me.Show
'vorhandene stimmen auslesen und in liste einfügen
Set V = New SpVoice
For Each T In V.GetVoices
strVoice = T.GetDescription 'The token's name
lstStimme.AddItem strVoice 'Add to listbox
Next
End Sub | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: V A T | Datum: 03.02.15 15:22 |
| Hallo OGGI!
Ich bin begeistert!!! Genau das wollte ich - funktioniert perfekt! Jetzt kann ich die installierten Stimmen abfragen, auswerten und die am ehesten passende benutzen!
Vielen, vielen Dank für Deine umfangreiche Code-Hilfe und die, für einen Einsteiger verständliche, Einsatzanleitung (oft eine Hürde, wenn der Profi mit dem Dummi redet)!
Ich werd das jetzt sofort in alle meine sprechenden Programme einbauen! Meine Frau wird staunen, wenn der Computer jetzt auch noch plötzlich abwechselnd mit verschiedenen Stimmen spricht. Alleine das Bild ist den Aufwand wert...
Nochmals Danke - natürlich auch an Zardoz und alle anderen, die versucht haben zu helfen!
Gruß
V A T
P.S.: Ein echtes Lob an vbarchiv.net, diese Forum ist Gold wert!!!
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!!! | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: V A T | Datum: 04.02.15 02:50 |
| 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!!! | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: OGGI | Datum: 04.02.15 09:08 |
| ObjTextToSpeech As Object muss evtl. mit ins Modul, oder du verzichtest einfach ganz darauf und schreibst es direkt in den Code. Die Spracheinstellungen werden in der Registry abgelegt.
Dim ObjTextToSpeech As Object Sub RegistryLesen()
'stimme
pubSprecherStimme = GetSetting(App.Title, "Options", "SprecherStimme", _
"Name=Mirosoft Anna")
pubiSprecherTempo = Val(GetSetting(App.Title, "Options", "SprecherTempo", _
"0"))
End Sub Private Sub cmdLesen_Click(Index As Integer)
Dim sa As String
Dim ObjTextToSpeech As Object
Set ObjTextToSpeech = CreateObject("SAPI.spVoice")
Set ObjTextToSpeech.voice = ObjTextToSpeech.GetVoices( _
pubSprecherStimme).Item(0)
ObjTextToSpeech.Rate = pubiSprecherTempo
sa = "Für die Entwicklung des modernen Rechtsstaats, war nicht der Einfluss" & _
"des Christentums entscheidend, sondern die Befreiung von ihm."
Me.MousePointer = 11
ObjTextToSpeech.speak sa
Me.MousePointer = 0
End Sub | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: OGGI | Datum: 06.02.15 18:13 |
| pubXxx steht für eine Public-Variable, diese wird in der Regel in einem Modul deklariert.
priXxx steht für eine Private-Variable, diese wird in der Regel in einer Form deklariert.
Also pubSprecherStimme als Stringvariable und pubiSprecherTempo als Integervariable in einem Modul deklarieren und der Code sollte laufen.
Beitrag wurde zuletzt am 06.02.15 um 18:20:02 editiert. | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: V A T | Datum: 06.02.15 18:51 |
| Hi OGGI,
danke für die Erläuterungen. Hab's entsprechend eingebaut, laufe aber immer noch in einen Fehler: "Die Methode 'Item' fürdas Objekt 'IspeechObjectTokens' ist fehlgeschlagen.
Mein Code sieht jetzt so aus:
FORM (mit Button "cmd_Lesen"):
Dim ObjTextToSpeech As Object
Private Sub cmd_Lesen_Click()
Dim sa As String
Dim ObjTextToSpeech As Object
Set ObjTextToSpeech = CreateObject("SAPI.spVoice")
Set ObjTextToSpeech.voice = ObjTextToSpeech.GetVoices( _
pubSprecherStimme).Item(0)
ObjTextToSpeech.Rate = pubiSprecherTempo
sa = "Hallo"
Me.MousePointer = 11
ObjTextToSpeech.speak sa
Me.MousePointer = 0
End Sub
Private Sub Form_Load()
RegistryLesen
End Sub
Sub RegistryLesen()
'stimme
pubSprecherStimme = GetSetting(App.Title, "Options", "SprecherStimme", _
"Name=Mirosoft Anna")
pubiSprecherTempo = Val(GetSetting(App.Title, "Options", "SprecherTempo", _
"0"))
End Sub MODUL:
Option Explicit
Public pubSprecherStimme As String
Public pubiSprecherTempo As Integer P.S.: Kannst Du bitte nochmal kurz Erläutern, was welcher Programmteil tun soll, dann kann ich es ggf. besser in den bisherigen Kontext einordnen.
MfG
V A T
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!!! | |
Re: Windows Stimmenauswahl per VB umstellen | | | Autor: OGGI | Datum: 07.02.15 07:38 |
| Ups, da hab ich dich schön auf's Glatteis geführt. Der zweite Code von mir funzt nur, wenn ein 'On Error Resume Next' implementiert wird. Dieses hilft über die kleine unangenehme Hürde des Item-Errors hinweg
Ich hab mal ein Beispielprogramm geschrieben , das deine Wünsche alle abdecken sollte
http://www.oggisoft.de/zip/sprechen.zip
Beitrag wurde zuletzt am 07.02.15 um 07:39:51 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|