Seite 1 von 1

COMmate Frage: Voice

Verfasst: 03.08.2010 11:33
von Hugo
Ich beschäftige mich auch gerade mit COMate um Text gesprochen auszugeben, was auch schon funktioniert.

Mein Problem ist, dass die Stimme mit der der Text gesprochen wird immer Microsoft Anna (Englisch) ist, obwohl ich LH Anna, LH Stefan und ScanSoft Steffi (zu finden unter: http://www.filefront.com/8611922/RSSolo ... Steffi.exe) installiert und in den Windows Spracheinstellungen eingestellt habe.

Bei diesem VB Beispiel zur Auswahl der Stimme stehe ich irgendwie auf dem Schlauch um es in PureBasic umzusetzen.

Code: Alles auswählen

Private V As SpeechLib.SpVoice
Private T As SpeechLib.ISpeechObjectToken

Private Sub Command1_Click()

    If List1.ListIndex > -1 Then

        'Set voice object to voice name selected in list box
        'The new voice speaks its own name

        Set V.Voice = V.GetVoices().Item(List1.ListIndex)
        V.Speak V.Voice.GetDescription

    Else
        MsgBox "Please select a voice from the listbox"
    End If

End Sub

Private Sub Form_Load()
    Dim strVoice As String

    Set V = New SpVoice

    'Get each token in the collection returned by GetVoices
    For Each T In V.GetVoices
        strVoice = T.GetDescription     'The token's name
        List1.AddItem strVoice          'Add to listbox
    Next

End Sub
Hier ein Auszug aus meinem aktuellen Code:

Code: Alles auswählen

XIncludeFile  "COMatePLUS.pbi"

Define.COMateObject objSpeak

objSpeak = COMate_CreateObject( "SAPI.SpVoice" ) 
If objSpeak   
  
  ;- ob das wohl richtig ist????? und wenn ja, wie gehts weiter?????
  objSpeak\GetObjectProperty( "GetVoices()" )
  
  ;- Anzeigen und ändern der Lautstärke geht
  Debug objSpeak\GetIntegerProperty( "Volume"        )
        objSpeak\SetProperty(        "Volume = '80'" ) 
  Debug objSpeak\GetIntegerProperty( "Volume"        )

  ;- Dieser Text wird leider nur von Anna gesprochen (Englisch)   
  objSpeak\Invoke( "Speak('Dieser Text soll in Deutsch gesprochen werden', 0 )" ) 
  objSpeak\Release() 
   
EndIf
Kann hier jemand helfen?

Re: COMmate Frage: Voice

Verfasst: 03.08.2010 14:33
von Kiffi

Code: Alles auswählen

Enumeration 
  #Window
EndEnumeration

Enumeration 
  #lstVoices
  #cmdSpeak
EndEnumeration

IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen!
XIncludeFile "comateplus.pbi"

Define SAPI_SpVoice.COMateObject
Define SpObjectToken.COMateObject

SAPI_SpVoice = COMate_CreateObject("SAPI.SpVoice")

If SAPI_SpVoice
  
  OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300, "")
  
  ListViewGadget(#lstVoices, 5, 5, 290, 260)
  ButtonGadget(#cmdSpeak, 195, 270, 100, 25, "Speak!")
  
  For Counter = 0 To SAPI_SpVoice\GetIntegerProperty("GetVoices\Count") - 1
    SpObjectToken = SAPI_SpVoice\GetObjectProperty("GetVoices\Item(" + Str(Counter) + ")")
    If SpObjectToken
      AddGadgetItem(#lstVoices, -1, SpObjectToken\GetStringProperty("GetDescription"))
      SpObjectToken\Release()
    EndIf
  Next
  
  SetGadgetState(#lstVoices, 0)
  
  Repeat
    
    WWE = WaitWindowEvent()
    
    Select WWE
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case #cmdSpeak
            
            SpObjectToken = SAPI_SpVoice\GetObjectProperty("GetVoices\Item(" + Str(GetGadgetState(#lstVoices)) + ")")
            
            If SpObjectToken
              
              SAPI_SpVoice\SetPropertyRef("Voice = " + Str(SpObjectToken) + " As COMateObject")
              
              SAPI_SpVoice\Invoke("Speak('PureBasic')")
              
              SAPI_SpVoice\Invoke("Speak('Feel the pure power')")
              
              SpObjectToken\Release()
              
            EndIf
            
            
        EndSelect
        
    EndSelect
    
  Until WWE = #PB_Event_CloseWindow
  
  SAPI_SpVoice\Release()
  
EndIf
Grüße ... Kiffi

Re: COMmate Frage: Voice

Verfasst: 03.08.2010 15:11
von Hugo
Super, dadurch verstehe ich schon einiges besser...... :praise:

Vielen Dank an Kiffi!