On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Программирование на VBA в Microsoft Office. Проигрыватель звуковых файлов

Виктор Маковчик

Здесь мы рассмотрим простейший пример применения мультимедиа в приложениях на Visual Basic for Applications - проигрывание WAV-файлов. Толковое озвучивание событий в прикладной программе всегда привлекает внимание пользователей и повышает их интерес к работе с этой программой. Остаётся узнать, как это сделать.

Запустите Word или Excel, откройте документ с примерами прошлой статьи (КГ ? __ ':Создаём свои объекты') - объектом dlgFileOpen и формой ownMediaPlayer для выбора WAV-файлов. 

Запустите редактор Visual Basic (для начинающих - комбинация Alt+F11). Далее нам понадобится ещё один объект. В окне проекта кликните правой кнопкой мыши и во всплывающем меню выберите пункт 'Вставить->' и далее 'Модуль класса'. В окне свойств назовите класс SoundPlayer.

Теперь в окне исходного текста будем программировать.

Простое проигрывание звука осуществляется функцией WinAPI PlaySound. Её 32-разрядная версия в Win32API именуется PlaySoundA. Она может воспроизводить WAV-файлы, все зарегистрированные системные события и ресурсы из EXE и DLL файлов. Описание её выглядит следующим образом:

Private Declare Function playSound Lib "winmm.dll" _

Alias "PlaySoundA" (ByVal lpszSoundName As String, _

ByVal hMod As Long, ByVal uFlags As Long) As Long

Параметры: lpszSoundName - имя WAV-файла, системного события либо ресурса, которые надо воспроизвести, hMod - источник воспроизведения. Если источник - файл или системное событие, то hMod=0, а если источник - ресурс из EXE или DLL файла, то hMod должен содержать ссылку на загруженный в память ресурс. uFlags - параметры воспроизведения.

Если надо воспроизвести файл, то необходимо устанавливать флаг SND_FILENAME. Если системное событие, то - SND_ALIAS. Если указанное событие или файл не существуют, то функция проигрывает звук, соответствующий системной ошибке.

Дополнительные флаги обозначают: SND_SYNC - синхронное воспроизведение (приложение ожидает завершения проигрывания звука и только потом продолжает работу), SND_ASYNC - асинхронное воспроизведение (приложение не ждёт завершения проигрывания звука, а параллельно продолжает работу), SND_NODEFAULT - в случае ошибки (файл не найден) не проигрывается стандартный звук, SND_NOWAIT - если драйвер звуковой карты занят, не ждать освобождения.

Тут необходимо уточнить, что в приложениях Microsoft Office (как 97, так и 2000) в разных операционных системах (Windows 9x/NT/2000) асинхронное воспроизведение не работает. Почему, мне установить не удалось. Если получится у Вас - сообщите.

Описание остальных свойств и методов класса.

'Хранит имя последнего проигранного файла

Private PlayFileName As String

'Хранит имя последнего проигранного события

Private PlaySysMsgAlias As String

'Остановить текущее проигрывание звука

Public Function PlayStop() As Boolean

Call playSound("", 0&, SND_NODEFAULT)

End Function

'Виртуальное свойство - при присваивании

'ему имени WAV-файла проигрывается звук

Property Let PlayFile(ByVal strWAVFileName As String)

PlayFileName = strWAVFileName

Call playSound(strWAVFileName, 0&, _

SND_ASYNC Or SND_NODEFAULT _

Or SND_FILENAME Or SND_NOWAIT)

End Property

'Виртуальное свойство - при чтении возвращает

'имя последнего проигранного файла

Property Get PlayFile() As String

PlayFile = PlayFileName

End Property

'При присваивании названия

'зарегистрированного системного

'события проигрывается звук

Property Let PlaySys(ByVal strSysMsgAlias As String)

PlaySysMsgAlias = strSysMsgAlias

Call playSound(strSysMsgAlias, 0&, SND_ASYNC Or SND_NODEFAULT Or SND_ALIAS)

End Property

'Возвращает имя последнего проигранного

'системного события

Property Get PlaySys() As String

PlaySys = PlaySysMsgAlias

End Property

Для использования SoundPlayer'а в редакторе Visual Basic откройте для редактирования форму ownMediaPlayer.

Добавьте кнопку проигрывания файла и двойным щелчком мыши по форме перейдите в окно редактирования исходного текста формы.

В разделе описаний добавьте строку:

Dim SNDPlayer As SoundPlayer '- объект типа SoundPlayer

'Метод инициализации формы уже будет выглядеть так:

Private Sub UserForm_Initialize()

'Создание экземпляра объекта

Set SNDPlayer = New SoundPlayer

Set dlgFiler = New dlgFileOpen

End Sub

'Метод обработки события - нажатия

'кнопки проигрывания звука

Private Sub CommandButton1_Click()

SNDPlayer.PlayFile = TextBox1.Value

End Sub

Сохраните набранные программы, перейдите в таблицу Excel и нажмите кнопку запуска формы. Нажмите кнопку выбора файла и укажите WAV-файл. В поле ввода формы появится его полное имя. Теперь нажмите кнопку проигрывания звука и в полной мере насладитесь работой своего творения.

Чтобы достичь более полного контроля над проигрыванием звука, например, воспроизводить звук в интервалах от 2-й секунды до 4,52 секунды, произвольно останавливать проигрывание, делать паузы и продолжать воспроизведение, и т.д., надо пойти другим путём. Необходимо запрограммировать работу приложения с мультимедиа через MCI (Media Control Interface), что мы далее и будем делать.

В следующей статье рассмотрим пример объекта для проигрывания AVI-видеороликов в окне формы через MCI. При этом вывод видео в окне выполняется независимо от основного приложения, т.е. приложение продолжает работу, не ожидая окончания видеоролика.



Литература по Microsoft Visual Basic