2 votes

l'amélioration des performances de la synthèse vocale

J'ai 100 boutons dans une winform. Chaque bouton effectue une action similaire qui consiste à prononcer le numéro de son propre bouton. Par exemple, le bouton 60 énoncera 60, le bouton 100 énoncera 100.

J'ai utilisé ces codes :

SpeechSynthesizer synthesizer = new SpeechSynthesizer();
         ...............

 private void Form1_Load(object sender, EventArgs e)
    {

        seme_comboBox.SelectedIndex = 0;
        dpt_comboBox.SelectedIndex = 0;

        foreach (var button in Controls.OfType<Button>()) 
        {
            button.Click += button_Click;
        }

    }

puis

    private void button_Click(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        string text = button.Name.Substring("button".Length);

        synthesizer.Speak(text);
    }

Mais si je clique sur deux boutons de manière séquentielle, il faut au moins 2 ou 3 secondes pour passer à un autre bouton et à la parole. De plus, le son n'est pas assez fort. J'ai donc besoin d'augmenter la performance de l'action du bouton dans une petite durée, et aussi d'augmenter le son de la parole. Comment faire ?

2voto

geedubb Points 2438

Il semble que le SpeechSynthesizer bloque le thread de l'interface utilisateur.

Vous pouvez essayer ce qui suit, en utilisant SpeakAsync() à la place (à partir de http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.speakasync.aspx )

Notez que vous pouvez ou non vouloir la ligne qui annule tout (commentée) :

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.SpeakAsyncCancelAll(); // cancel anything that's playing
    synthesizer.SpeakAsync(text);
}

Si ce n'est pas le cas, vous pouvez probablement utiliser le sythesizer dans un autre fil de discussion.

Vous pouvez contrôler le volume du son à l'aide de la propriété .Volume :

synthesizer.Volume = 100; // maximum volume (range 0-100)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X