Рефераты. Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов

Первая функция используемая для записи звука - wavelnOpen. Эта функция устройство ввода для звукового потока. В модуле она объявлена следующим образом:


MMRESULT waveInOpen(

LPHWAVEIN phwi,

UINT_PTR uDevicero,

LPWAVEFORMATEX pwfx,

DWORD_PTR dwCallback,

DWORD_PTR dwCallbacklnstance,

DWORD fdwOpen);


В функции определен ряд параметров. Рассмотрим их основное назначение

phwi - адрес, по которому будет записан указатель на устройство воспроизведения. Этот параметр может быть NULL, если WAVE_FORMAT_QUERY указан для fdwOpen.

UDevicelD – идентификатор устройства, которое необходимо открыть, если поставить сюда константу WAVE_MAPPER, то откроется устройство по умолчанию.

IpFormat – указатель на структуру типа WAVEFORMATEX, в которой описан формат записываемых звуковых данных.

dwCallback – указатель на функцию «семафор». Эта функция вызывается для сообщения о текущих событиях.

fdwOpen – параметры открываемого устройства. Может принимать значения, приведенные в табл. 3.2

Необходимо использовать функцию wavelnGetNumDevs, чтобы определить число устройств ввода, присутствующих в системе. Идентификатор устройства, указанный uDeviceID, изменяется в пределах от ноля до на один меньше, чем количество присутствующих устройств. Константа WAVE_MAPPER может также использоваться в качестве идентификатора устройства.

Если выбирать, чтобы окно или поток получал информацию отзыва, следующие сообщения отправляются процедуре окна или потока, чтобы указать изменения в процессе ввода звуковой информации: MM_WIM_OPEN, MM_WIM_CLOSE, и MM_WIM_DATA.

Если вы выбираете, чтобы функция получала информацию отзыва, функции отправляются следующие сообщения, чтобы указать изменения в процессе ввода звуковой информации: WIM_OPEN, WIM_CLOSE, и WIM_DATA.

Таблица 3.2 – Параметры открываемого устройства

CALLBACK_EVENT

в параметре dwCallback находится событие THandle, через которое происходит информирование о ходе воспроизведения;

CALLBACK_FUNCTION

в dwCallback находится указатель на функцию;

CALLBACK_THREAD

в dwCallback находится идентификатор потока

CALLBACK_WINDOW

в dwCallback находится указатель на окно, которому посылается сообщение

CALLBACK_NULL

в dwCallback ничего нет

WAVE_ALLOWSYNC

можно открыть устройство в синхронном режиме

WAVE_FORMAT_DIRECT

запрещается преобразование данных с помощью АСМ-драйвера (ACM - Audio Compression Manager)

WAVE_FORMAT_QUERY

если установить этот параметр, то реального открытия звуковой карты не происходит, функция проверяет возможность открытия с заданными параметрами, и если всё нормально, то возвращает MMSYSERRNOERROR (если параметры недопустимы, то возвращается код ошибки)

MMS YSERR_ALLOCATED

указанный ресурс уже занят

MMSYSERR_BADDEVICEID

указанный идентификатор устройства не существует

MMSYSERR_NODRIVER

нет драйвера для устройства

MMSYSERR_NOMEM

невозможно использовать память

WAVERR_BADFORMAT

попытка открытия в неподдерживаемом звуковом формате


Необходимо заполнить структуру WAVEFORMATEX. Она имеет следующий вид:


typedef struct WAVEFORMATEX { WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

WORD wBitsPerSample;

WORD cbSize;} WAVEFORMATEX;


В этой структуре:

wFormatTag – формат звуковых данных (чаще всего используется WAVE_FORMAT_PCM);

nChannels – количество каналов (1 - монО, 2 - стерео);

nSamplesPerSec – частота дискретизации (возможны значения 8000, 11025, 22050 и 44100);

nAvgBytesPerSec – количество байт в секунду для WAVEFORMATPCM это является результатом nSamplesPerSec* nBlockAlign;

nBlockAlign – выравнивание блока (для WAVEFORMATPCM равен wBitsPerSample /8* nChannels);

wBitsPerSample – количество бит в одной выборке (для WAVE_FORMAT_PCM может быть 8 или 16);

cbSize - размер дополнительной информации, которая располагается после структуры (если ничего нет, то должен быть 0).

Теперь следует подготовить заголовки, которые будут отправляться драйверу. Для этого существует функция waveInPrepareHeader

MMRESULT waveInPrepareHeader(

HWAVEOUT hwo,

LPWAVEHDR pwh,

U1NT cbwh);

Внутренняя структура:

hwo – идентификатор устройства записи (полученный после вызова функции wavelnOpen).

pwh – указатель на структуру wavehdr_tag;

cbwh – размер структуры wavehdr_tag.

Функция возвращает значения, приведенные в табл. 3.3.

При этом lpData, dwBufferLength, и dwFlags – члены структуры

WAVEHDR - должны быть установлены перед запросом этой функции (dwFlags должен быть нулевым).


Таблица 3.3 – Возвращаемые значения

MMSYSERR_NOERROR

успех

MMSYSERR_INVALHANDLE

указанный дескриптор устройства недействителен

MMSYSERR_INVALPARAM

базовый адрес буфера не выровнен с объемом выборки

MMSYSERR_NODRIVER

нет драйвера для устройства

MMSYSERR_NOMEM

невозможно использовать память


Для того, чтобы освободить драйвер необходимо использовать функцию waveInUnprepareHeader. Эта функция должна быть вызвана после того, как драйвер устройства заполняет буфер и возвращает его приложению. Необходимо вызвать эту функцию перед освобождением буфера.


MMRESULT waveInUnprepareHeader(

HWAVEIN hwi,

LPWAVEHDR pwh,

U1NT cbwh);


Параметры:

hwi - указатель на записывающее устройство;

pwh - указатель на структуру WAVEHDR, идентифицирующую буфер, который необходимо очистить.

cbwh - размер, в байтах, структуры WAVEHDR.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращается одно из значений, приведенных в табл. 3.4.

Эта функция дополняет waveInPrepareHeader функцию. Необходимо вызвать эту функцию перед освобождением буфера. После передачи буфера в драйвер устройства функцией waveInAddBuffer, необходимо ждать, пока драйвер не закончит работу с буфером перед запросом waveInUnprepareHeader. Очистка буфера, который не был занят, не имеет никакого эффекта, и функция возвращает ноль.


Таблица 3.4 – Значения, выдаваемые при ошибках

Ошибка

Значение

MMSYSERR_INVALHANDLE

указанный дескриптор устройства недействителен

MMSYSERR_NODRIVER

нет драйвера для устройства

MMSYSERR_NOMEM

невозможно использовать память

MMSYSERR_STILLPLAYING

буфер, указанный pwh, занят


Для передачи буфера приёма данных предоставленному звуковому устройству используется функция waveInAddBuffer. Когда буфер заполнен, приложение получает соответствующее сообщение. Функция имеет следующий вид:


MMRESULT waveInAddBuffer(HWAVEIN hwi,

LPWAVEHDR pwh,

UINT cbwh);


Описание параметров:

hwi- указатель на входное устройство;

pwh - указатель на структуру WAVEHDR, которая идентифицирует буфер.

cbwh - размер, в байтах, структуры WAVEHDR.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращает одно из значений, приведенных в табл. 3.5.


Таблица 3.5 - Возвращаемые значения

Ошибка

Значение

MMSYSERR_INVALHANDLE

указанный дескриптор устройства недействителен

MMSYSERR_NODRIVER

нет драйвера для устройства

MMSYSERR_NOMEM

невозможно использовать память

WAVERR_UNPREPARED

буфер, указанный pwh, не был готов



Когда буфер заполнен, бит WHDR_DONE установлен в dwFlags -члене структуры WAVEHDR.

Буфер должен быть подготовлен функцией waveInPrepareHeader перед тем, как это будет передаваться функции waveInAddBuffer.

Далее вызывается функция waveInStart. Она начинает ввод данных через предоставленное устройство. Эта функция выглядит следующим образом:

MMRESULT waveInStart(HWAVEIN hwi);

Параметр hwi указывает на устройство, принимающее информацию.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращается одно значений, приведенных в табл. 3.6


Таблица 3.6 - Возвращаемые значения

Ошибка

Значение

MMSYSERR_INVALHANDLE

указанный дескриптор устройства недействителен

MMSYSERR_NODRIVER

нет драйвера для устройства

MMSYSERR_NOMEM

невозможно использовать память

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.