Seite 1 von 1

the Voice

Verfasst: Mo, 25. Aug 2008 4:52
von AUGE_OHR

Code: Alles auswählen

#pragma library( "ascom10.lib" )

PROCEDURE Main
LOCAL oApp

   oApp := CreateObject( "SAPI.SpVoice.1" )

   IF NIL == oApp
     ? "Fehler: ", ComLastError()
     ? "Beschreibung:"
     ? ComLastMessage()
     RETURN
   ENDIF

   oApp:Speak( "This is the Voice from X base ++" )
   SLEEP(100)
   oApp:destroy()

RETURN
p.s. wie/woher bekommt man andere "Stimmen"

Verfasst: Mo, 25. Aug 2008 8:08
von Martin Altmann
Moin Jimmy,
aus dem Internet.
Die einzelnen Office-Assistenten haben auch unterschiedliche Stimmen "an Bord".
Viele Grüße,
Martin

Verfasst: Mo, 25. Aug 2008 10:05
von Hans Zethofer
Coole Sache :D

aber auf Deutsch ist es teileweise sehr unverständlich!

Gibt's da vielleicht noch andere Möglichkeiten?

lg
Hans

Verfasst: Mo, 25. Aug 2008 11:29
von Martin Altmann
Hallo Hans,
auf Deutsch ist es generell sehr unverständlich - leider!
Liegt zum Einen daran, dass es hauptsächlich in USA entwickelt wird und zum Anderen daran, dass man natürlich auch einen deutschen Sprecher nehmen muss!
Es nützt halt nichts, einen Engländer einen Deutschen Text lesen zu lassen, wenn dieser Engländer nur Englisch kann :D

Viele Grüße,
Martin

Verfasst: Mo, 25. Aug 2008 17:50
von AUGE_OHR
hi,
Hans Zethofer hat geschrieben: aber auf Deutsch ist es teileweise sehr unverständlich!
Gibt's da vielleicht noch andere Möglichkeiten?
Hast du es auf "deutsch" gestellt oder meinst du "deutsch" von "Sam"
vorgelesen ? Theoretisch kann man die "Stimme" wechseln und die
Sprache wählen aber genau das scheint das activeX Problem zu sein
da Xbase++ ja nur "IDispatch" kann.

Code: Alles auswählen

// will NOT give a Array, it will be a Object of "ISpObjectToken"

aVoice := oApp:GetVoices("Name=Microsoft mary", "Language=407")
aVoice := oApp:callMethod("GetVoices","Name=Microsoft mary","Language=407")
aVoice := oApp:invoke("GetVoices",0,DISPATCH_METHOD,"Name=Microsoft mary", "Language=407")

// ERROR ... "SetVoice"

oApp:SetVoice("Name=Microsoft mary", "Language=407")
oApp:callMethod("SetVoice",aVoice[1])
oApp:invoke("SetVoice",2,DISPATCH_METHOD,"Name=Microsoft mary","Language=407")
und hier der VB Code

Code: Alles auswählen

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc"); Install a custom error 
handler

_TalkOBJ('This is auto it beta speaking.', 3)
_TalkOBJ('This is auto it beta speaking.', 3)
_TalkOBJ('This is auto it beta speaking.', 3)

;voice params:
;
;1 - Microsoft Mary
;2 - Microsoft Mike
;3 - Microsoft Sam

Func _TalkOBJ($s_text, $s_voice = 3)
Local $o_speech = ObjCreate ("SAPI.SpVoice")
    Select
        Case $s_voice == 1
      $o_speech.Voice = $o_speech.GetVoices("Name=Microsoft Mary","Language=409").Item(0)
        Case $s_voice == 2
      $o_speech.Voice = $o_speech.GetVoices("Name=Microsoft Mike","Language=409").Item(0)
        Case $s_voice == 3
      $o_speech.Voice = $o_speech.GetVoices("Name=Microsoft Sam" ,"Language=409").Item(0)
    EndSelect
 $o_speech.Speak ($s_text)
 $o_speech = ""
EndFunc ;==>_TalkOBJ

; This is my custom error handler
Func MyErrFunc()
   $HexNumber=hex($oMyError.number,8)
   Msgbox(0,"","We intercepted a COM Error !" & @CRLF & _
               "Number is: " & $HexNumber & @CRLF & _
               "Windescription is: " & $oMyError.windescription )

   SetError(1); something to check for when this function returns

Verfasst: Mi, 27. Aug 2008 14:22
von Martin Altmann
Moins,
vielleicht hilft der link ja noch ein wenig weiter:
http://www.microsoft.com/germany/msdn/l ... x?mfr=true

Viele Grüße,
Martin

Verfasst: Mi, 27. Aug 2008 16:01
von AUGE_OHR
hi,
Martin Altmann hat geschrieben: vielleicht hilft der link ja noch ein wenig weiter:
leider nein, denn der "Agent" verwendet wohl nicht SAPI.DLL (sondern
MsComCrt.DLL)

Ich denke das ich hier mal wieder nicht mit "pure" Xbase++ weiter
komme da Xbase++ ja nur COM Componenten über "iDispatch" kann.
Deshalb wohl auch die Ankündigung von Hannes / Yukon die ja auch
"iUnknow" Schnittstellen benutzen kann.

interessant wird SAPI ja erst dann wenn er nicht nur spricht sondern auch
einen "verstehen" kann und man per Voice eine Xbase++ Application
steuern würde ...

Verfasst: Mi, 27. Aug 2008 16:10
von Martin Altmann
Ah - OK!
Schaust Du hier: http://research.microsoft.com/srg/sapi.aspx und hier: http://www.microsoft.com/reader/de/default.mspx
Es gibt die Sprachen (sowohl Ein- als auch Ausgabe) in Englisch, Französisch und Deutsch.
Zusätzlich (jedoch nur Ausgabe) in Italienisch und Spanisch.

Viele Grüße,
Martin

Verfasst: Mi, 27. Aug 2008 16:50
von AUGE_OHR
hi,
Martin Altmann hat geschrieben:Schaust Du hier: http://research.microsoft.com/srg/sapi.aspx und hier: http://www.microsoft.com/reader/de/default.mspx
Es gibt die Sprachen (sowohl Ein- als auch Ausgabe) in Englisch, Französisch und Deutsch.
Zusätzlich (jedoch nur Ausgabe) in Italienisch und Spanisch.
Ja genau das scheint es zu sein.

Wenn ich das nun richtig verstehe muss man zunächst das SAPI SDK
installieren (68MB), dann den Reader und dann komme ich an LH ANNA
ran ... aber leider nicht mit "pure" Xbase++ ActiveX :(

... ich muss mir wohl doch mal Hannes / YUKON reinziehen.