Программирование на Visual Basic

Пишем говорящую программу #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. Эти элементы регулируют скорость и тон произношения. Обновление необходимо для того, чтобы избежать ошибок, потому что каждый голосовой движок имеет свои свойства, т.е. максимальные и минимальные значения тона и скорости у каждого движка разные.

Заключение

Всё! Программа создана! С помощью вертикальных полос прокрутки вы можете менять тон и скорость произношения. Также есть возможность записывать речь в файл, но как говорилось выше, записываемый текст компьютер вслух не читает.

Исходник: здесь

Hosted by uCoz