Seite 1 von 1

Speech Programm für Console

Verfasst: 26.07.2012 19:44
von Ironsmurf
Hallo zusammen
möchte gerne Texte von einem Programm vorlesen lassen, habe folgenden Programm Code gefunden.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #speechdll
  #StringGadget_0
  #ButtonGadget_1
  #ButtonGadget_2
EndEnumeration

OpenLibrary(#speechdll, "Speech.dll")

Procedure.l InitSpeech()
  value.l = CallFunction(#speechdll, "InitSpeech")
  ProcedureReturn value
EndProcedure

Procedure.l PlaySpeech(s.l,lg.l)
  value.l = CallFunction(#speechdll, "PlaySpeech",s,lg)
  ProcedureReturn value
EndProcedure


Procedure.l StopSpeech()
  value.l = CallFunction(#speechdll, "StopSpeech")
  ProcedureReturn value
EndProcedure


Procedure.l DeInitSpeech()
  value.l = CallFunction(#speechdll, "DeInitSpeech")
  ProcedureReturn value
EndProcedure

Procedure OpenWindow_Window_0()

  If OpenWindow(#Window_0, 236, 180, 400, 400, "Sprachausgabe", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)

    If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#StringGadget_0, 5, 10, 385, 315, "Hallo, ich bin eine Filmdatenbank, was kann ich für Dich tun. Bitte mache eine Eingabe.")
      ButtonGadget(#ButtonGadget_1, 40, 340, 110, 35, "Text sprechen")
      ButtonGadget(#ButtonGadget_2, 160, 340, 110, 35, "Sprache stoppen")
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()

InitSpeech()

Repeat

  Event = WaitWindowEvent()

  Select Event

    Case #PB_Event_Gadget

      EventGadget = EventGadget()

      EventType = EventType()

      If EventGadget = #StringGadget_0

      ElseIf EventGadget = #ButtonGadget_1
        
      inhalt.s = GetGadgetText(#StringGadget_0)
      
      PlaySpeech(@inhalt,Len(inhalt))
      
      ElseIf EventGadget = #ButtonGadget_2

      StopSpeech()

      EndIf

    Case #PB_Event_CloseWindow

      EventWindow = EventWindow()

      If EventWindow = #Window_0

      DeInitSpeech()

        Break

      EndIf

  EndSelect

ForEver
Möchte es nun in ein Consolenprogramm übernehmen, habe es auch hin bekommen, jedoch habe ich noch Probleme, das die Computerstimme ausspricht, bis jetzt arbeite ich mit Delay, oder einer For Next Schleife.
eine Repeat, Forever Schleife kommt nicht in Frage, es geht nur um Kommentar zu Beginn des Programms.
Benutze Steffi als Stimme, soweit ist alles Ok, Event = WaitWindowEvent() kann ich nicht benutzen, weil Console, kommt immer Fehlermeldung, Fenster muss geöffnet sein.
Wer kann einem Anfänger unter die Arme greifen, nun noch mein Code.

Code: Alles auswählen

InitSpeech()
Sagen.s = " Ich bin die Computerstimme Steffi."
PlaySpeech(@Sagen,Len(Sagen))
Sagenlaenge = Len(Sagen)
For K = 1 To Sagenlaenge
  Delay(90)
Next 
Wie gesagt, arbeite mit einer Schleife, bin darüber aber nicht sehr glücklich.

Vielen Dank im voraus für eure Hilfe :) :) :)

Re: Speech Programm für Console

Verfasst: 26.07.2012 19:56
von ts-soft
Die Scheife ist ja auch überflüssig :wink:

Code: Alles auswählen

InitSpeech()
Sagen.s = " Ich bin die Computerstimme Steffi."
PlaySpeech(@Sagen,Len(Sagen))
Sagenlaenge = Len(Sagen)
Delay(90 * Sagenlaenge)

Re: Speech Programm für Console

Verfasst: 26.07.2012 20:03
von STARGÅTE
Ich kann mir aber nicht vorstellen, das jeder Buchstabe (speziell die Leerzeichen ^^) genau 90ms dauert ...
Gibt es bei dieser DLL nicht auch die möglichkeit abzufragen, ob das PlaySpeech noch "spielt"?
zB mit dem Rückgabewert von PlaySpeech() ?

Re: Speech Programm für Console

Verfasst: 26.07.2012 20:11
von Ironsmurf
Darauf wollte ich hinaus, das Programm soll einfach warten bis die Computerstimme ausgesprochen hat und dann im Programmverlauf weiter machen.

Re: Speech Programm für Console

Verfasst: 26.07.2012 20:23
von bobobo
Die Länge der erzeugten Wave ist erstmal unbekannt ..
aber das Reden ist doch im Hintergrund

also geht folgendes

Code: Alles auswählen

#Speechdll=0
OpenLibrary(#speechdll, "Speech.dll")
Procedure.l InitSpeech()
  value.l = CallFunction(#speechdll, "InitSpeech")
  ProcedureReturn value
EndProcedure
Procedure.l PlaySpeech(s.l,lg.l)
  value.l = CallFunction(#speechdll, "PlaySpeech",s,lg)
  ProcedureReturn value
EndProcedure
Procedure.l StopSpeech()
  value.l = CallFunction(#speechdll, "StopSpeech")
  ProcedureReturn value
EndProcedure
Procedure.l DeInitSpeech()
  value.l = CallFunction(#speechdll, "DeInitSpeech")
  ProcedureReturn value
EndProcedure
InitSpeech()
OpenConsole()
Procedure abfrage()
  PrintN("Wie heisst Du?")
  what.s="hallo "+Input()
  PlaySpeech(@what,Len(what))
  PrintN("Aha")
  PrintN("und wie lang ist Dein rechter Zeigefinger?")
  what.s=Input()
  PlaySpeech(@what,Len(what))
  PrintN("Aha")
  PrintN("und wie groß ist Dein linkes Ohr?")
  what.s=Input()
  PlaySpeech(@what,Len(what))
  PrintN("Aha")
  PrintN("Schnauze voll?")
  If LCase(Left(Input(),1)) ="j"
    DeInitSpeech()
    CloseConsole()
    End
  Else
    abfrage()
  EndIf
EndProcedure
abfrage()
nur als Ergänzung
die Speech.dll und andere nette Sachen von Frank Abbing finzte übrigens hier
http://frabbing.bplaced.net/
(die speech.dll bei dll , wo auch sonst:))

Re: Speech Programm für Console

Verfasst: 28.07.2012 07:04
von Ironsmurf
Noch mal Vielen Dank für eure Hilfe,
hat mir weiter geholfen.
:mrgreen: :mrgreen: :mrgreen: