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