Vorlesen immer mit gleicher Stimme.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    Vorlesen immer mit gleicher Stimme.

    Moin! :)
    Ich versuche einen Text vorlesen zu lassen.
    Leider ändert sich die Stimme nicht.
    Egal ob Mann oder Frau.
    Muss ich eine Stimmdatei herunterladen?
    Was kann ich machen?
    Geht der Code bei euch?
    BIG THX

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Speech.Synthesis
    3. Public Class Form3
    4. Private Sub SpeakFunction()
    5. Dim stimme As New System.Speech.Synthesis.VoiceGender
    6. Dim alter As New Speech.Synthesis.VoiceAge
    7. Dim synth As New SpeechSynthesizer()
    8. Select Case Me.cmbVorlesenStimme.Text
    9. Case "Mann"
    10. stimme = VoiceGender.Male
    11. Case "Frau"
    12. stimme = VoiceGender.Female
    13. Case "Neutral"
    14. stimme = VoiceGender.Neutral
    15. End Select
    16. Select Case Me.cmdVorlesenAlter.Text
    17. Case "Kind"
    18. alter = VoiceAge.Child
    19. Case "Teen"
    20. alter = VoiceAge.Teen
    21. Case "Erwachsen"
    22. alter = VoiceAge.Adult
    23. Case "Senior"
    24. alter = VoiceAge.Senior
    25. End Select
    26. With synth
    27. .SpeakAsyncCancelAll()
    28. .SelectVoiceByHints(stimme, alter)
    29. .Volume = 100
    30. .Rate = 0
    31. .Speak(Me.TextBox1.Text)
    32. End With
    33. End Sub
    34. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    35. SpeakFunction()
    36. End Sub
    37. End Class

    *Topic verschoben*
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Man kann sich wohl eine Liste mit den installierten Stimmen ausgeben lassen, siehe stackoverflow.com/questions/36…-gender-and-age-in-vb-net

    Dort steht auch, dass mehr als eine Stimme Geld kostet.

    EDIT: Und bei mir kommt immer nur die erwachsene Frauenstimme.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Cheffboss Kommt drauf an auf welchem Windows das laufen soll und welche TTS-Engine .NetFx 4 unterstützt. Für ältere Windowsversionen (< Win8, mit alter TTS-Version) könntest Du eventuell sogar noch freie/kostenlose Stimmen im Internet finden. Ab Win8/Win10 gibt es zusätzlich eine neuere TTS-Version. Die wird von UWP bzw von WinRT unterstützt und da habe ich 2 weibliche und eine männliche Stimme in Deutsch. Auf meinem Win10, wo ich auch auf Englisch wechseln kann, habe ich zusätzlich auch englische Stimmen. Wenn ich die alte TTS-Engine unter Win10 verwende, habe andere Stimmen zur Auswahl. Ich glaub nur eine weibliche und eine männliche Stimme.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()

    Hallo Cheffboss,
    meine Frage weicht etwas vom Thema ab, aber ich frage mich:
    Warum sind das Strings und keine Enums?

    VB.NET-Quellcode

    1. Select Case Me.cmbVorlesenStimme.Text
    2. Case "Mann"
    3. stimme = VoiceGender.Male
    4. Case "Frau"
    5. stimme = VoiceGender.Female
    6. Case "Neutral"
    7. stimme = VoiceGender.Neutral
    8. End Select

    Nutz gerne das Combobox-SelectedIndex-Changed-Event. In dem Eventhandler setzt du den Enum-Member.
    Oder ein für sich sprechendes Enum aufbauen.
    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.
    Vielen Dank, für eure Antwort.
    Auch Danke für den Tipp mit den Enum.
    In Zukunft werde ich diese öfters verwenden.

    Wegen der Sprachausgabe:
    Habe ich immer noch nicht herausgefunden, wo man die Sprachdatei downloaden kann.
    Und ob ich diese Funktion nun, aus meiner Anwendung entferne...
    Oder ein Betriebsystemcheck um herauszufinden, ob die Sprachausgabe richtig ist.
    Ich werde es später mal mit Windows 7 testen, ob es dort besser geht!
    Mein Ziel wäre es, dass man die Stimmen ändern kann(Mann,Frau, usw...).


    VB.NET-Quellcode

    1. Private Enum Stimme
    2. Mann
    3. Frau
    4. Neutral
    5. End Enum
    6. Dim ausgewaehltesStimme As Stimme
    7. Private Sub cmbVorlesenStimme_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbVorlesenStimme.SelectedIndexChanged
    8. ausgewaehltesStimme = DirectCast([Enum].Parse(GetType(Stimme), Me.cmbVorlesenStimme.SelectedItem.ToString()), Stimme)
    9. MessageBox.Show(ausgewaehltesStimme.ToString())
    10. End Sub
    11. Select Case ausgewaehlteStimme
    12. Case Stimme.Mann
    13. settings_stimme = VoiceGender.Male
    14. Case Stimme.Frau
    15. settings_stimme = VoiceGender.Female
    16. Case Stimme.Neutral
    17. settings_stimme = VoiceGender.Neutral
    18. End Select



    edit1:
    Ich habe es gerade auf Windows 7 und Windows 8 ausprobiert!
    Die Stimmen bleiben immer gleich!
    Warum?
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Cheffboss“ ()

    Cheffboss schrieb:

    Ich habe es gerade auf Windows 7 und Windows 8 ausprobiert!
    Die Stimmen bleiben immer gleich!
    Warum?
    Welche Voices gibt denn SpeechSynthesizer.GetInstalledVoices zurück?
    Ansonsten schaust hier: avs4you.com/blog/change-text-t…d,11%2C%2010%2C%20and%207. Allerdings dürften die offiziellen MS Ressourcen für nicht mehr supportete Windowsversionen von MS entfernt worden sein. Entsprechend müsstest Du eine Fehlermeldung beim hinzufügen von weiteren Voices bekommen und ob die alte TTS weiterhin supportet wird steht auch in den Sternen weil es gibt ja eine neue TTS Version wo die alten Voices nicht funktionieren.
    Mfg -Franky-
    @-Franky-
    Danke, für deine Antwort.

    Hier die Ausgabe:
    • Microsoft Hedda Desktop
    • Microsoft Zira Desktop
    Das sind alle Stimmen!
    Ich habe herausgefunden das beide Stimmen VoiceInfo.Age = Adult haben.
    Das bedeutet ich muss irgendwo eine andere Stimme finden. :huh:
    Visual Basic.NET 8o
    MS-SQL
    8o

    Cheffboss schrieb:

    Hier die Ausgabe:
    Microsoft Hedda Desktop
    Microsoft Zira Desktop

    Wobei Hedda eine deutsche und Zira eine englische Stimme ist.

    Hier die Ausgabe über VB6 (verwendet die alte TTS über eine Referenz auf die sapi.dll) auf einem System, wo ich die Windows-Anzeigesprache nicht auf englisch umschalten kann.
    Description: Microsoft Hedda Desktop - German
    Gender: Female
    Age: Adult
    LanguageID: 407

    Description: Microsoft Zira Desktop - English (United States)
    Gender: Female
    Age: Adult
    LanguageID: 409
    Mfg -Franky-
    Ich habe das Problem nun lösen können. :)
    Ich prüfe jeden einzelnen Sprecher und füge deren Werte hinzu!
    Dann habe ich nur, die Sprecher Einstellungen die vorhanden sind.

    VB.NET-Quellcode

    1. Private Sub ComboBoxWerteHinzufügen()
    2. Me.cmdVorlesenAlter.Items.Clear()
    3. Me.cmbVorlesenStimme.Items.Clear()
    4. ' Durchlaufe alle verfügbaren Stimmen
    5. For Each voice As InstalledVoice In synth.GetInstalledVoices()
    6. If voice.VoiceInfo.Name = Me.cmbVorlesenSprecher.Text Then
    7. ' Alter
    8. If voice.VoiceInfo.Age = VoiceAge.Child Then
    9. Me.cmdVorlesenAlter.Items.Add("Kind")
    10. End If
    11. If voice.VoiceInfo.Age = VoiceAge.Teen Then
    12. Me.cmdVorlesenAlter.Items.Add("Teen")
    13. End If
    14. If voice.VoiceInfo.Age = VoiceAge.Adult Then
    15. Me.cmdVorlesenAlter.Items.Add("Erwachsen")
    16. End If
    17. If voice.VoiceInfo.Age = VoiceAge.Senior Then
    18. Me.cmdVorlesenAlter.Items.Add("Senior")
    19. End If
    20. ' Stimme
    21. If voice.VoiceInfo.Gender = VoiceGender.Male Then
    22. Me.cmbVorlesenStimme.Items.Add("Mann")
    23. End If
    24. If voice.VoiceInfo.Gender = VoiceGender.Female Then
    25. Me.cmbVorlesenStimme.Items.Add("Frau")
    26. End If
    27. If voice.VoiceInfo.Gender = VoiceGender.Neutral Then
    28. Me.cmbVorlesenStimme.Items.Add("Neutral")
    29. End If
    30. End If
    31. Next
    32. Me.cmdVorlesenAlter.SelectedIndex = 0
    33. Me.cmbVorlesenStimme.SelectedIndex = 0
    34. End Sub
    Visual Basic.NET 8o
    MS-SQL
    8o