Приветствую Вас, Гость
Главная » 2010 » Октябрь » 19 » продолжение
17:40
продолжение
3.3. Простые способы воспроизведения звука

В простейшем случае приложение должно выдавать звуковые сигналы или проигрывать небольшие звуковые сообщения; для этих целей можно воспользоваться API-Windows функциями MessageBeep и sndPlаySound.
Первая из упомянутых функций имеет прототип

void
MessageBeep(UINT uAlert);

При установленном драйвере звукового адаптера проигрывается звуковой фрагмент, указанный передаваемым в качестве функции кодом; при отсутствии драйвера выдается лишь короткий ‘бип’ из встроенного динамика.
Числовой параметр определяется значениями строк ключа HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Default системного реестра, связь событий с нужными звуками производится с помощью приложения Control Panel; связь параметра функции с описанием некоторых событий приведены в нижерасположенной таблице

Значения параметра
функции MessageBeep Описание
-1 Стандартный звуковой сигнал, выдаваемый на встроенный динамик
MB_ICONASTERISK Проигрывается WAV-файл, описанный строкой Sys-
temAsterisk
MB_ICONEXLAMATION Аналогично, строка SystemExclamation
MB_ICONHAND Аналогично, строка SystemHand
MB_ICONQUESTION Аналогично, строка SystemQuestion
MB_OK Аналогично, строка SystemDefault

Функция MessageBeep пытается проиграть звуковой фрагмент в асинхронном (фоновом) режиме; в случае невозможности этого управление возвращается только после окончания проигрывания.
Произвольный звуковой файл проигрывается функцией sndPlaySound, находящейся в библиотеке mmsystem.dll

BOOL
sndPlaySound(LPSTR lpszSoundFile,
UINT wFlags);

Через первый параметр функции передается ссылка на ресурс, содержащего звуковой фрагмент (имя WAV-файла, идентификатор ресурса приложения или вышеописанную текстовую строку); параметр wFlag определяет способ проигрывания звукового фрагмента (нижеприведенные значения можно комбинировать при помощи операции ИЛИ)

Значения параметра wFlag Описание
SND_SYNC Определяет синхронный режим работы (функция sndPlaySound вернет управление только после завершения проигрывания звукового фрагмента)
SND_SAYNS Определяет асинхронный режим работы (функция sndPlaySound вернет управление немедленно, проигрывание звукового фрагмента будет выполняться в фоновом режиме параллельно с работой приложения)
SND_NODEFAULT Если указанный фрагмент не найден, функция sndPlaySound сразу вернет управление приложению. Если флаг SYNC_NODEFAULT не указан и файл не найден, будет воспроизведен стандартный системный звук (соответствующий строке SystemDefault); если и это невозможно - звучания а не будет, а функция вернет FALSE
SND_MEMORY Используется для проигрывания загруженных в оперативную память звуковых файлов (например, из ресурсов приложения)
SND_LOOP При указании SND_ASYNC проигрывание зацикливается (останов возможен только вызовом sndPlaySound с первым нулевым параметром)
SND_NOSTOP При осуществлении проигрывания в данный момент возвращается FALSE

Во всех случаях (кроме использования флага SND_NOSTOP) функция sndPlaySound возвращает TRUE, если в данный момент проигрывание выполняется и FALSE в противоположном случае. При использовании функций MessageBeep и sndPlaySound WAV-файл должен полностью помещаться в физическую память.
В работе [6] приведен полный С-код приложения SNDPLAY, демонстрирующего различные способы использования функции sndPlaySound.

3.4. Интерфейс управляющих строк MCI

MCI (Media Control Interface) представляет собой универсальный, независимый от особенной аппаратуры интерфейс, предназначенный для управления устройствами мультимедиа (звуковые и видеоадаптеры, устройства чтения звуковых компакт-дисков и лазерных видеодисков). Возможности интерфейса MCI удовлетворяют практически всем потребностям любого приложения мультимедиа, предназначенного для записи и воспроизведения звуковой или видеоинформации; при необходимости обработки данных на низком уровне или в реальном времени (редактирование и преобразование WAV-файлов, распознавание речи и/или образов, преобразование речи в режиме реальном времени) может использоваться нижеописанным интерфейсом низкого уровня. Ниже подробно описано использование интерфейса MCI при работе со звуком, однако MCI также эффективен при работе с видео; известный Delphi- и C++Builder-компонент MediaPlayer (подробнее см. подраздел 5.3.4) является всего лишь надстройкой над уровнем MCI-инструкций.
Достаточно подробное описание интерфейса MCI приведено в работе [5]; там же дано множество фрагментов исходного кода и готовых (несложных) приложений. Все функции интерфейса MCI экспортируются из библиотеки mmsystem.dll; эти функции непосредственно обращаются к драйверам устройств ввода/вывода и к функциям низкого уровня, определенным в той же библиотеке. Заметим, что не все команды могут быть выполнены конкретным устройством мультимедиа (например, не все устройства работы с лазерными дисками имеют возможность их записи), поэтому перед использованием устройства необходимо программно выяснить его возможности (для чего имеются специальные функции).
Приложения могут использовать два типа программного интерфейса MCI - основанный на использовании текстовых команд интерфейс управляющих строк (Command-String Interface) и основанный на посылке сообщений интерфейс управляющих событий (Command-Message Interface, см. подраздел 3.5 данной работы).
Интерфейс управляющих строк удобен для использования в системах программирования высокого уровня; например, для проигрывания звукового файла ding.wav достаточно передать звуковому адаптеру следующую последовательность управляющих строк

open ding.wav type waveaudio alias snd wait
play snd wait
close snd

При использовании интерфейса управляющих строк используется функция mciSendString, которой в качестве первого параметра передается указатель на строку команды

DWORD
mciSendString(LPSTR lpstrCommand, // строка управления
LPSTR lpstrReturnString, // буфер для результата
UINT wReturnLength, // размер этого буфера
HANDLE hCallback); // идентификатор окна извещения

Здесь lpstrCommand - дальний указатель на текстовую управляющую строку, lpstrReturnLength - размер буфера для занесения результата выполнения команды (в текстовом виде, для игнорирования результата можно использовать NULL), wReturnLength - размер этого буфера, hCallback - идентификатор получающего сообщение MM_MCINOTIFY окна (сообщение посылается после завершения операции устройством, для игнорирования сообщения можно использовать NULL).
В нижеприведенной таблице приведены возвращаемые функцией mciSendString значения (при успехе возвращается нуль)

Значение Описание
MCIERR_BAD_CONSTANT Указана недопустимая для данной команды константа
MCIERR_BAD_INTEGER Указано недопустимое для данной команды значение
MCIERR_DUPLICATE_FLAGS Двойное определение параметра или значения
MCIERR_MISSING_DEVICE_
NAME В управляющей строке не указано имя устройства, драйвера, файла или алиас (альтернативное имя)
MCIERR_MISSING_STRING_
ARGUMENT Не указан обязательный параметр команды
MCIERR_NEW_REQUIRED_
ALIAS При использовании параметра new не указан алиас
MCIERR_NO_CLOSING_
QUOTE В команде отсутствуют закрывающие двойные кавычки
MCIERR_NOTIFY_ON_AUTO_
OPEN Для автоматически открываемого устройства нельзя указывать флаг notify
MCIERR_PARAM_OVERFLOW Строка параметра не помещается в буфер (размер оного следует увеличить)
MCIERR_PARSER_INTERNAL Ошибка в драйвере устройства (возможно, драйвер следует заменить новым, более поздней версии)
MCIERR_UNRECOGNIZED_
KEYWORD Не распознан параметр управляющей строки

Для преобразования полученного от функции mciSendString кода ошибки в текстовую строку можно воспользоваться функцией mciGetErrorString, которой необходимо передать двойное слово кода ошибки (текстовая строка будет возвращена в параметре lpstrBuffer)

UINT
mciGetErrorString(DWORD dwError, // код ошибки
LPSTR lpstrBuffer, // буфер для записи текстовой
// строки ошибки
UINT wLength); // размер этого буфера
При успешном завершении функция mciGetErrorString возвращает TRUE; при невозможности сопоставить заданному коду текстового описания возвращается FALSE.
В работе [6] приведен полный С-код приложения MCISTRRVW, демонстрирующего использование строчного интерфейса MCI для воспроизведения звукового файла; использование команд интерфейса управляющих строк для управления CD ROM и проигрывания MIDI-файлов поясняется также в подразделах 3.7.1 и 3.8.1 данной работы.

Категория: Предметы | Просмотров: 613 | Добавил: Shamaj | Рейтинг: 0.0/0


Всего комментариев: 1
1 p9qt8qu1  
0
Пакет программ для работы с vkontakte.ru и odnoklassniki.ru
- Работа с изображениями,
- Загрузка аудио и видео,
- Агент,
- Перевод изображений в символы,
- Интересные и полезные советы.
А так-же многое другое.

http://vip-file.com/download/15216.1d2ba823398f72ff241bf6f670e7/BestPack_v_4.4.html


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]