Дипломная работа: Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов
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. Эта
функция должна быть вызвана после того, как драйвер устройства заполняет буфер
и возвращает его приложению. Необходимо вызвать эту функцию перед освобождением
буфера.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 |