Sprachausgabe gleichzeitig starten

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    Sprachausgabe gleichzeitig starten

    Hi Leute, ich habe eine Frage zum Sprachfeedback.

    code:

    Quellcode

    1. Private Speaker as new SpeechSynthesizer()
    2. Sub Speak(ByVal Text as String)
    3. Speaker.Speak(Text)


    habe ich nun einen MSGBox mit einem Text den ich gleichzeitig wiedergeben möchte macht er das nicht. er zeigt mir die msgbox und nachdem ich auf Ok klicke kommt die sprachausgabe. wer ne lösung?

    mfg
    Tja, entweder blockiert die MessageBox die Sprachausgabe, wenn die Box zuerst gecodet wird oder die Sprachausgabe nimmt alle Aufmerksamkeit und die Box wird erst nach dem Aussprechen angezeigt. Tricky.
    Nein, eigentlich nicht. Ein Fall für Async/Await:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. Dim Speaker As New Speech.Synthesis.SpeechSynthesizer()
    3. Dim Text = "Garage"
    4. ShowTextAsync(Text)
    5. Speaker.Speak(Text)
    6. End Sub
    7. Private Async Sub ShowTextAsync(text As String)
    8. Await Threading.Tasks.Task.Run(Sub()
    9. MessageBox.Show(text)
    10. End Sub)
    11. End Sub


    EDIT: Allein der (verbesserte) Thread-Titel »Sprachausgabe gleichzeitig starten« gibt einem hier schon die hier genannte Richtung vor. (Scheinbare) Gleichzeitigkeit ist generell wohl immer was mit Nebenläufigkeit/paralleler Datenverarbeitung, was heutzutage (2017) mit Async/Await häufig gelöst werden kann.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Da meine Glaskugel grad wegen spontaner Selbseintrübung gerade beim Hersteller ist

    r0tzi schrieb:

    weil bei einer if abfage.. .also if Msgbox"bla",vbyesno = vbyes then

    klappt es so nicht.. was mach ich in so nem fall?
    solltest Du hier ein bisken mehr Info geben. Was soll denn beim Anzeigen der MessageBox passieren? Soll was angesagt werden oder nicht? Von Ja/Nein war in Post#1 überhaupt nicht die Rede. Was verbirgt sich denn für eine Funktion hinter der MessageBox?

    r0tzi schrieb:

    zeigt er mirn fehler
    Und welcher wäre das? Denn ich schrieb nicht umsonst

    VaporiZed schrieb:

    was heutzutage (2017) mit Async/Await häufig gelöst werden kann
    Damit meinte ich: aktuelles Framework. Async/Await sind nativ ab .Net 4.5 verfügbar. Womit arbeitest Du?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    hm eigentlich will ich dass die msgbox gesprochen wird ^^.. obs nun ne ok msgbox oder ja / nein ist... also beides. generell möchte ich eine lösung finden dass die sprachausgabe nebenbei stattfindet und nicht nach einenader.

    Bei der funktion handelt es sich einfach, dass bei Ja etwas in der Config.exe geändert wird.

    der fehler ist BC36915 Einzeilige Anweisungslambdas müssen einzelne Anweisung erhalten.

    ich habe net 4.5.2

    sry ich dachte es waere simpler, einfacher ^^

    r0tzi schrieb:

    hm eigentlich will ich dass die msgbox gesprochen wird
    Vielleicht erklärst Du mal etwas detaillierter, was Du willst. Ich kann mir nichts darunter vorstellen, »Dass die MsgBox gesprochen wird«. Das ist für mich wie: Ich will, dass ein Briefkasten gesungen wird. Oder willst Du, dass der Inhalt der MessageBox, will heißen: der angezeigte Text gesprochen bzw. vorgelesen wird?

    r0tzi schrieb:

    dass die sprachausgabe nebenbei stattfindet und nicht nach einenader
    Nacheinander passiert was? Mehrere Sprachausgaben? Ich versteh wohl einfach nicht, was Du vorhast.

    Bzgl. der Fehlermeldung: Da findet Google nix. Hast Du den Text aus Visual Studio rauskopiert? Poste mal bitte den Code, den Du für die Minisub verwendest. Wichtig sind bei meinem Code die 2 End Subs (Zeile#11, #12) und die schließende Klammer nach dem 1. End Sub (Zeile#11). Denn das von mir ist (m.E.) kein einzeiliger Lambdaausdruck.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    sry, ich hab nur ein end sub gehabt.. das 2te hab ich einfach nicht gesehen. ok und schwupps geht es.
    super, jetzt nur noch ne lösung für die msgbox mit Wert also Ja oder nein.

    sobald diese messagebox auftaucht:

    If MSgbox("dies ist ein test, vbyesno") = vbyes then

    soll "dies ist ein test" gesprochen werden.

    wenn ich es ändere in msgbox(text ,vbyesno) kommt zumindest schonmal ja / nein, jedoch kann ich den eingabe wert mit:

    If ShowTextAsync(Text) nicht auslesen, da sagt er mir es ergibt keinen Wert.

    Oder willst Du, dass der Inhalt der MessageBox, will heißen: der angezeigte Text gesprochen zw. vorgelesen wird?


    genau das :D und zusätzlich sollte das auch bei einer Msgbox if abfrage funktionieren mit auswahlmöglichkeit ja nein z.B.

    Mit nebeneinander meine ich dass die sprachausgabe stattfindet und der code weiterläuft.
    Das würde dann m.E. unnötig kompliziert werden, wenn Du Dich jetzt noch in asynchroner Programmsteuerung probierst. Ginge bestimmt, aber dann mach's lieber andersrum und führte das Sprechen asynchron aus. So kannst Du problemlos wie gewohnt weiterprogrammieren:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Text = "Garage"
    3. SpeakTextAsync(Text)
    4. If MessageBox.Show(Text, "Hinweis", MessageBoxButtons.YesNo) = DialogResult.No Then Stop
    5. End Sub
    6. Private Async Sub SpeakTextAsync(text As String)
    7. Await Threading.Tasks.Task.Run(Sub()
    8. Speaker.Speak(text)
    9. End Sub)
    10. End Sub


    btw: MsgBox = VB6-stuff, MessageBox = VB.Net-stuff
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Man könnte sich auch ne eigene Form als MessageBox schreiben, welche als Eigenschaft zb Titel und Beschreibung hat. Dies wird dann bei der Anzeige der MessageBox angezeigt und vorgelesen. Sprich, die Sprachausgabe wird durch die eigene MessageBox ausgelöst, nicht durch die aufrufende Form.

    Wär vermutlich langfristig besser, sonst muss man ja bei jeder MessagBox den gleichen Code schreiben (Redundanz vermeiden).
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen