.NET текст в речь объем - PullRequest
       18

.NET текст в речь объем

2 голосов
/ 22 июня 2011

Я работаю с простым приложением Text to Speech, используя ссылку System.Speech.Synthesis. Я хотел бы добавить ползунок управления в приложение и контролировать громкость речи с ним. Для установки громкости я использую:

speech.Volume = 100;

Нужно ли использовать какой-либо обработчик событий для обновления этого значения? Кстати, я создаю это как приложение WPF с C # (пожалуйста, не код VB.NET).

Ответы [ 4 ]

1 голос
/ 22 декабря 2016

Добавьте два ползунка, sliderVolume для регулировки громкости и sliderRate для управления скоростью.Затем в событии SpeakProgress назначьте новый объем и скорость для speech и с помощью characterPosition создайте подстроку исходного содержимого для чтения.Затем перезапустите говорить, используя эту новую подстроку.См. Следующий код.

    string selectedSpeakData = "Sample Text Sample Text Sample Text Sample Text Sample Text";
    private SpeechSynthesizer speech;

    private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                speech= new SpeechSynthesizer();
                speech.SpeakProgress += new EventHandler<System.Speech.Synthesis.SpeakProgressEventArgs>(speech_SpeakProgress);
                speech.SpeakAsync(selectedSpeakData);
            }

    void speech_SpeakProgress(object sender, System.Speech.Synthesis.SpeakProgressEventArgs e)
            {
                if (speech.Volume != Convert.ToInt32(sliderVolume.Value) || speech.Rate != Convert.ToInt32(sliderRate.Value))
                {
                    speech.Volume = Convert.ToInt32(sliderVolume.Value);
                    speech.Rate = Convert.ToInt32(sliderRate.Value);
                    selectedSpeakData = selectedSpeakData.Remove(0, e.CharacterPosition);
                    speech.SpeakAsyncCancelAll();
                    speech.SpeakAsync(selectedSpeakData);
                }
            }
1 голос
/ 22 июня 2011
<Slider Ticks="1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
            Value="1"
            Delay="100"
            Interval="5"
            TickPlacement="BottomRight"
            Minimum="1"
            Maximum="10"
            Width="100"
            AutoToolTipPlacement="BottomRight"
            ValueChanged="slider_ValueChanged"
            Grid.Row="1"
            Grid.Column="0">
    Slider>

создать событие slider_ValueChanged и установить Speech.volume = (int)sliderID.value;

0 голосов
/ 14 января 2013

Кажется, нет встроенного способа сделать это. Обработка события SpeakProgress предоставит вам доступ к свойству CharacterPosition. Это дает вам позицию в приглашении в начале последнего прочитанного слова. Если вы введете подстроку для следующего символа пробела и передадите ее как новое приглашение, с этого момента произойдет остальная часть запроса. Если вам это нужно, вы можете рассчитать, сколько времени потребуется для чтения приглашения, и использовать свойство AudioPosition, чтобы получить объект TimeSpan, в течение которого было запущено приглашение.

0 голосов
/ 22 июня 2011

Элемент управления Slider вызывает событие ValueChanged всякий раз, когда изменяется его значение. Если вы обработаете это событие, вы можете обновить громкость речи, проверив свойство Value.

...