Пишем говорящую программу #2
Сегодня мы продолжим писать говорящую программу, но на этот раз в нашей программе будет реализовано гораздо больше функций, нежели в программе из первой статьи. Итак, приступим.
Что нам понадобится?
Как и в первой статье нам понадобятся следующие компоненты:
1. Speech API - компонент, который позволяет программам работать с Text-to-speech engin`ами. Его можно бесплатно скачать на сайте Microsoft.
2. Text-to-speech engine (голосовой движок) - это набор файлов с описанием голоса. Позволяет синтезировать речь из текста. Существует много разных engin`ов различных производителей. Text-to-speech engin`ы отличаются качеством синтеза речи, количеством и характером голосов (мужчина, женщина, роботы), языком (русский, английский, французский, немецкий, ... ) и прочими параметрами.
Напоминаю, если вы счастливый обладатель Win2000/XP, эти компоненты у вас установлены, если нет, то придётся установить.
Начнём писать
1. Создайте новый проект.
2. На созданную вместе с проектом форму добавьте список (lstEngine), две горизонтальные полосы прокрутки (hscSpeed и hscPitch), две опции (optVoice и optRecord), два текстовых поля (txtFileName и txtSpeak) и две кнопки (cmdSpeak и cmdExit), также можете добавить несколько меток, они будут заголовками для соответствующих элементов.
3. Добавьте новый компонент - Microsoft Direct Speech Synthesis (с изображением губ) и назовите его DirectSS.
4. Измените свойства элементов:
Название: | Свойство: | Значение: |
optVoice | Caption | Проговаривать текст |
optRecord | Caption | Записывать в файл |
cmdSpeak | Caption | &Сказать |
cmdExit | Caption | &Закрыть |
DirectSS | Visible | False |
5. Получившаяся форма должна выглядеть примерно так:
6. Добавьте следующий код:
При загрузке формы
Private Sub Form_Load()
On Error Resume Next "Избежим ошибок
Dim vEngines As Integer
Dim Count As Integer
vEngines = DirectSS.CountEngines "Получаем общее количество установленных голосовых движков
"Добавляем голосовые движки в список:
For Count = 1 To vEngines
lstEngine.AddItem DirectSS.ModeName(Count), Count - 1
lstEngine.ListIndex = 0
Next
"Обновляем свойства элементов
OptUpdate
End Sub
При выборе другого голосового движка
Private Sub lstEngine_Click()
On Error Resume Next "Избежим ошибок
"При выборе нового движка обновим свойства элементов
DirectSS.Select (lstEngine.ListIndex + 1)
OptUpdate
End Sub
Выход
Private Sub cmdExit_Click()
End
End Sub
Проговариваем текст или записываем в файл
Private Sub cmdSpeak_Click()
On Error Resume Next "Избежим ошибок
DirectSS.FileName = "" "Чтобы не было ошибок
"Если выбрана опция записи в файл
If optRecord.Value = True Then
DirectSS.FileName = Trim(txtFileName) "Задаём имя файла
End If
DirectSS.Select (lstEngine.ListIndex + 1) "Задаём голосовой движок
DirectSS.Speed = hscSpeed.Value "Задаём новую скорость
DirectSS.Pitch = hscPitch.Value "Задаём тон
DirectSS.Speak txtSpeak.Text "Проговорим текст
End Sub
Примечания:
1. Если будет выбрана опция "Записывать в файл", то компьютер не будет читать записываемый текст вслух.
2. Файл, в который записывается речь, должен иметь расширение *.wav
"Процедура обновления свойств элементов hscPitch и hscSpeed
Public Sub OptUpdate()
"Задаём свойства элементов:
hscPitch.Min = DirectSS.MinPitch
hscPitch.Max = DirectSS.MaxPitch
hscSpeed.Min = DirectSS.MinSpeed
hscSpeed.Max = DirectSS.MaxSpeed
End Sub
Примечание: вы, наверно, заметили, что в программе, при выборе нового голосового движка, мы обновляем свойства элементов hscPitch и hscSpeed. Эти элементы регулируют скорость и тон произношения. Обновление необходимо для того, чтобы избежать ошибок, потому что каждый голосовой движок имеет свои свойства, т.е. максимальные и минимальные значения тона и скорости у каждого движка разные.
Заключение
Всё! Программа создана! С помощью вертикальных полос прокрутки вы можете менять тон и скорость произношения. Также есть возможность записывать речь в файл, но как говорилось выше, записываемый текст компьютер вслух не читает.
Исходник: здесь