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


Заключение

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

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

Автор статьи: Хованский Ян (web: http://yansoft.by.ru)