Оглавление.Введение. Общие вопросы компьютерного распознавания и порождения речи.1. Программирование звука в Windows. 2. Основы цифровой обработки звуковых сигналов. 3. Определение параметров речевого сигнала. 4. Алгоритмы распознавания. 5. Использование Microsoft Speech API 5.1 для синтеза и распознавания речи. 6. Использование Microsoft Speech API 4.0 для синтеза речи. Ссылки. Об авторе. |
Компьютерное распознавание и порождение речиГлава 1. Программирование звука в Windows.
1.2.1. Запись звука.1). Если нас не устраивает работа со стандартным устройством ввода, определенным в операционной системе, мы можем вызвать функцию waveInGetNumDevs, чтобы получить число устройств ввода, определенных в системе, а затем запросить параметры и имена этих устройств при помощи waveInGetDevCaps. Естественно, если мы планируем работать со стандартным устройством ввода, то этот шаг для нас лишний. 2) Открываем устройство ввода функцией waveInOpen, в параметрах которой указываем формат звукового потока и способ уведомления о выполнении запрошенных операций. 3) Создаем в программе один или несколько буферов с заголовками, заполняем заголовки буферов по установленным правилам. 4) Подготавливаем один или несколько буферов к передаче драйверу посредством функции waveInPrepareHeader. 5) Передаем один или несколько буферов драйверу звуковой карты при помощи функции waveInAddBuffer. 6) Запускаем запись потока функцией waveInStart. После этого драйвер запустит АЦП и начнет заполнение переданных буферов поступающими отсчетами. 7) Если буфер заполнен, программа может обработать данные. Для того, чтобы отследить момент заполнения буфера, можно либо использовать таймер и периодически проверять состояние поля dwBytesRecorded заголовка буфера, куда драйвер заносит число записанных байтов, либо - и это лучший вариант - обработать сообщение MM_WIM_DATA, посылаемое драйвером в момент заполнения буфера окну, приложению или потоку: конкретный вариант определяется еще на шаге 2) параметрами функции waveInOpen. 8)Снова переадаем буфер функцией waveInAddBuffer драйверу для записи и по заполнении буфера переходим к пункту 7). Движение потока приостанавливается (останавливается) функцией waveInStop и возобновляется (начинается) функцией waveInStart. После окончания записи необходимо освободить буфер (буферы) функцией waveInUnprepareHeader и закрыть устройство функцией waveInClose. |