назад | содержание
| вперед
Глава 12. Мультимедиа в Visual Basic.
Мультимедиа — это технология, позволяющая при помощи компьютера работать с аудио- и видеоинформацией на любых носителях, будь то компакт-диск, магнитная лента или жесткий диск. Для управления устройствами мультимедиа в Visual Basic 6 применяется специальный интерфейс MCI (Multimedia Control Interface). Кроме этого интерфейса существуют разнообразные средства управления для работы с мультимедиа в Windows API, однако это отдельная тема для изучения. В данной главе мы рассмотрим только средства MCI, не учитывая возможности, предоставляемые Windows API.
С помощью Visual Basic 6 можно полностью контролировать многочисленные устройства мультимедиа, как стандартные, типа дисковода компакт-дисков, так и нестандартные. Трудно назвать задачи в области мультимедиа, которые невозможно решить с помощью Visual Basic 6. Используя средства управления мультимедиа, важно знать формат файла, с которым необходимо работать. При отсутствии файловой структуры (как, например, у музыкального компакт-диска) необходимо знать тип устройства и иметь драйвер производителя, чтобы управлять устройством.
Рассмотрим форматы файлов мультимедиа и типы устройств, с которыми можно работать при помощи средств мультимедиа в Visual Basic 6.
Интерфейс управления мультимедиа MCI в Visual Basic 6 поддерживает все основные типы мультимедийных форматов файлов, список которых приведен в табл. 12.1.
Таблица 12.1. Основные типы файлов мультимедиа
Тип файла |
Примечание |
AVI |
Видеофайл в формате AVI (Audio Visual Interleaved) |
MPEG |
Формат сжатого видеоизображения |
MID, RMI |
Последовательности в формате MIDI (Musical Instrument Digital Interface) |
WAV |
Звуковые файлы |
Используя средства управления мультимедиа в Visual Basic б, вы должны знать тип файла, с которым работаете в данный момент. При отсутствии файловой структуры информация в мультимедиа, как правило, будет структурирована в виде треков. Например, для музыкального компакт-диска треки — это отдельные музыкальные композиции, идентифицируемые номером трека.
Обширный список устройств, которые поддерживаются средствами мультимедиа в Visual Basic б, приведен в табл. 12.2. Можно наладить управление и нестандартным устройством, не вошедшим в данный список. Для этого необходимо иметь драйвер устройства и знать тип файла, с которым оно работает. Второе условие обязательно только для устройств с файловой структурой.
Таблица 12.2. Типы устройств мультимедиа
Устройство |
Тип файла |
Примечание |
AVI |
AVI |
Видеофайл в формате AVI |
CD audio |
|
Привод музыкальных компакт-дисков |
Digital Audio Tape |
|
Устройство цифровой магнитной записи |
Digital video |
|
Устройство цифрового видео |
Overlay |
|
Устройство покадрового изображения |
Scanner |
|
Сканер |
Sequencer |
MID |
Устройство MIDI-последовательностей (секвенсор) |
Vcr |
|
Кассетный видеомагнитофон или видеопроигры |
|
|
ватель |
Videodisc |
|
Проигрыватель видеодисков |
Wave audio |
WAV |
Файл в формате WAV |
Other |
|
Прочие мультимедиа-устройства, задаваемые пользователем |
Ряд устройств, такие как привод компакт-дисков или видеодиски, не имеют файловой структуры. Тем не менее, информация на них представляет собой некую структуру в виде треков (композиций), которые используются для перемещения по информационному массиву вперед, назад, в начало, в конец.
Для реализации возможностей мультимедиа в Visual Basic 6 используется интерфейс MCI, который обеспечивает доступ к функциям Windows, управляющим устройствами мультимедиа. Основным компонентом этого интерфейса является элемент управления MMControl с большим набором свойств и команд, позволяющих управлять мультимедиа и полностью их контролировать.
Для управления мультимедиа служит элемент управления MCI MMControi, который позволяет выполнять все необходимые действия с устройствами мультимедиа. Чтобы можно было использовать его в приложении, необходимо подключить к проекту библиотеку Microsoft Multimedia Control 6.0 с помощью диалогового окна Components, которое открывается командой Components (Компоненты) меню Project (Проект). После подключения этой библиотеки на панели элементов управления появляется кнопка MMControi создающая элемент управления MMControi (рис. 12.1).
Рис. 12.1. Элемент управления MMControl
Элемент управления мультимедиа MMControi состоит из панели с девятью кнопками, назначение которых описано в табл. 12.3.
Таблица 12.3. Кнопки элемента управления MMControl
Кнопка |
Название |
Описание |
|
Prev (Предыдущая) |
Переход на начало записи (файла) |
|
Next (Следующая) |
Переход на конец записи (файла) |
|
Step (Шаг вперед) |
Переход на шаг (кадр) вперед |
|
Back (Шаг назад) |
Переход на шаг (кадр) назад |
|
Pause(Пауза) |
Приостановка воспроизведения или записи |
|
Play(Воспроизведение) |
Воспроизведение записи |
|
Record (Запись) |
Запись информации |
|
Stop (Стоп) |
Остановка воспроизведения или записи |
|
Eject(Извлечь) |
Извлечение носителя из устройства |
Элемент управления MMControl имеет большое количество свойств, позволяющих управлять мультимедиа (табл. 12.4).
Таблица 12.4. Основные свойства элемента управления MMControl
Свойство |
Описание |
AutoEnable |
Автоматически делает доступным набор кнопок при готовности устройства к работе |
BackEnabled |
Делает доступной кнопку Back (Шаг назад) |
EjectEnabled |
Делает доступной кнопку Eject (Извлечь) |
NextEnabled |
Делает доступной кнопку Next (Следующая) |
PauseEnabled |
Делает доступной кнопку Pause (Пауза) |
PlayEnabled |
Делает доступной кнопку Play (Воспроизведение) |
PrevEnabled |
Делает доступной кнопку Prev (Предыдущая) |
RecordEnabled |
Делает доступной кнопку Record (Запись) |
StepEnabled |
Делает доступной кнопку Step (Шаг вперед) |
StopEnabled |
Делает доступной кнопку Stop (Стоп) |
BackVisible |
Назначает видимость кнопки Back (Шаг назад) |
EjectVisible |
Назначает видимость кнопки Eject (Извлечь) |
NextVisible |
Назначает видимость кнопки Next (Следующая) |
PauseVisible |
Назначает видимость кнопки Pause (Пауза) |
PlayVisible |
Назначает видимость кнопки Play (Воспроизведение) |
PrevVisible |
Назначает видимость кнопки Prev (Предыдущая) |
RecordVisible |
Назначает видимость кнопки Record (Запись) |
StepVisible |
Назначает видимость кнопки Step (Шаг вперед) |
StopVisible |
Назначает видимость кнопки Stop (Стоп) |
CanEject |
Возвращает True, если носитель можно извлечь из устройства, в противном случае возвращает False |
CanPlay |
Возвращает True, если устройство готово к воспроизведению, в противном случае возвращает False |
CanRecord |
Возвращает True, если устройство готово к записи данных, в противном случае возвращает False |
CanStep |
Возвращает True, если на устройстве возможно покадровое воспроизведение, в противном случае возвращает False |
Command |
Устанавливает текущую команду для устройства |
DeviceID |
Устанавливает идентификатор |
DeviceType |
Устанавливает тип устройства (табл. 12.2) |
Error |
Возвращает последнюю ошибку MCI |
ErrorMessage |
Возвращает сообщение о последней ошибке |
FileName |
Устанавливает файл для воспроизведения при файловой структуре носителя |
Frames |
Задает число пропускаемых командой Step шагов |
hWndDisplay |
Назначает дескриптор окна вывода |
Length |
Возвращает длину источника данных |
Mode |
Возвращает текущий режим работы устройства |
Notify |
Устанавливает возможность работы службы сообщений; если установлено значение True — служба работает, если установлено значение False — служба не работает |
NotifyMessage |
Задает сообщение, если включена служба сообщений |
NotifyValue |
Указывает результат последней команды MCI |
Orientation |
Назначает ориентацию элемента управления MMControl. Если установлено значение 0 — ориентация горизонтальная, если установлено значение 1 — ориентация вертикальная |
Position |
Назначает текущую позицию на устройстве в соответствии со СВОЙСТВОМ TimeFormat |
RecordMode |
Определяет текущий'режим записи устройства, если у него есть запись |
Shareable |
Устанавливает доступ других программ к устройству MCI |
Silent |
Отключает звук |
Start |
Устанавливает начальную позицию на носителе |
TimeFormat |
Определяет формат времени |
To |
Устанавливает конечную позицию на носителе |
Track |
Задает номер отдельного трека, о котором возвращают информацию свойства TrackLength и TrackPosition. С номером текущего трека это свойство не связано |
TrackLength |
Возвращает размер трека, номер которого установлен в свойстве Track |
TrackPosition |
Возвращает позицию на треке, номер которого установлен в свойстве Track, в соответствии с форматом времени |
Tracks |
Возвращает количество треков на устройстве |
Updatelnterval |
Устанавливает интервал выдачи события StatusUpdate |
Свойства доступности (содержат в имени Enabled) дают возможность разрешать или запрещать работу соответствующих кнопок.
Замечание
Кнопки в недоступном состоянии видны, но не нажимаются.
При помощи свойств видимости (содержат в имени visible) можно спрятать ненужные кнопки. Если установить свойство видимости какой-либо из кнопок в значение False, то эта кнопка не будет отображаться на панели кнопок ни в режиме проектирования, ни в режиме выполнения приложения.
Свойство AutoEnable дает возможность не беспокоиться об установке доступности кнопок в различных режимах работы устройства мультимедиа. Если для этого свойства установлено значение True, то для каждого режима работы устройства будет автоматически включаться доступность набора кнопок, соответствующего этому режиму. Например, при воспроизведении компакт-дисков будет автоматически установлена доступность кнопок Prev (Предыдущая), Next (Следующая), Play (Воспроизведение) и Eject (Извлечь), если диск вставлен в привод. При запуске воспроизведения кнопка Play автоматически станет недоступной, а кнопка Stop (Стоп) — доступной.
Как указано в табл. 12.4, свойство DeviceType элемента управления MMControl задает тип устройства, который может принимать только заранее заданные текстовые значения для конкретных устройств. Значения свойства DeviceType в соответствии с устройствами мультимедиа перечислены в табл. 12.5.
Таблица 12.5. Значения свойства DeviceType
Тип устройства |
Текстовое значение |
Файлы в формате AVI |
AVIVideo |
Музыкальный компакт-диск |
CDAudio |
Цифровая магнитная запись |
DAT |
Цифровое видео |
DigitalVideo |
Прочие устройства |
Other |
Покадровое видеоизображение |
Overlay |
Сканер |
Scanner |
Секвенсор |
Sequenser |
Видеомагнитофон |
VCR |
Проигрыватель видеодисков |
VideoDisk |
Файл в формате WAV |
WaveAudio |
Для устройств, не имеющих файловой структуры, позиционирование выполняется по значению позиции, обычно выражающей время в закодированном (упакованном) виде, который определяется свойством TimeFormat. Соответственно и все свойства позиционирования такого устройства оперируют со значениями, заданными в формате упаковки. Все форматы упаковки перечислены в табл. 12.6.
Таблица 12.6. Значения свойства TimeFormat
Значение |
Шаблон |
Описание |
0 |
mciFormatMilliseconds |
Время в виде целого четырехбайтного числа в миллисекундах |
1 |
mciFormatHms |
Упакованное четырехбайтное число по байтам начиная с младшего: часы, минуты, секунды. Старший байт не используется |
2 |
mciFormatMsf |
Упакованное четырехбайтное число по байтам начиная с младшего: минуты, секунды, номер кадра. Старший байт не используется |
3 |
mciFormatFrames |
Номер кадра в виде целого четырехбайтного числа |
4 |
mciForittatSmpte24 |
24-кадровое (24 кадра за секунду) по стандарту SMPTE (Society of Motion Picture and Television Engineers) упакованное четырехбайтное число по байтам начиная с младшего: часы, минуты, секунды, номер кадра |
5 |
mciFormatSmpte25 |
25-кадровое (25 кадров за секунду) по стандарту SMPTE четырехбайтное число, упакованное аналогично 24-кадровому |
6 |
mciFo rmatSmpte30 |
30-кадровое (30 кадров за секунду) по стандарту SMPTE четырехбайтное число, упакованное аналогично 24-кадровому |
7 |
mciFormatSmpte30Drop |
30-кадровое (30 кадров за секунду) по стандарту SMPTE четырехбайтное число, упакованное аналогично 24-кадровому |
8 |
mciFormatBytes |
Номер байта в виде четырехбайтного целого числа |
9 |
mciFormatSamples |
Номер кванта (блока информации) в виде четырехбайтного числа |
10 |
me i Fo rma t Titis f |
Упакованное четырехбайтное число по байтам начиная с младшего: номер трека, минуты, секунды, номер кадра |
Замечание
Более подробно работа с форматом времени описывается в данной главе на примере доработки проигрывателя музыкальных компакт-дисков.
Большинство событий элемента управления MMControl связано с кнопками. Например, для кнопки Back существуют следующие события:
Аналогичные события существуют для всех кнопок элемента управления MMControl и для соответствующей каждой кнопке команды.
Необходимо обратить внимание на событие statusUpdate, которое является "таймером" элемента управления MMControl и генерируется самим объектом. Интервал этого события устанавливается в свойстве updateinterval в миллисекундах. Это событие можно использовать для вывода различной информации о состоянии выполнения команд во время работы.
Настройка элемента управления MMControl очень проста и выполняется с помощью диалогового окна Property Pages (Страницы свойств). Для вызова этого окна (рис. 12.2) необходимо выполнить команду Property Pages меню View (Вид). Основной вкладкой настройки является вкладка Controls (Кнопки управления). На этой вкладке можно назначить доступность и видимость каждой кнопки элемента управления, установив соответствующие флажки рядом с изображением кнопки. При этом названия флажков, как видно из рис. 12.2, соответствуют свойствам доступности и видимости каждой из кнопок (табл. 12.3).
Управление мультимедиа выполняется при помощи команд (табл. 12.7), которые соответствуют кнопкам элемента управления MMControl. Кроме того, элемент управления MMControl выполняет команды поиска, сохранения, открытия/закрытия устройства.
Рис. 12.2. Настройка кнопок элемента управления МСI на вкладке Controls
Таблица 12.7. Команды элемента управления MMсопtrol
Команда |
Назначение |
Open |
Открывает файл (устройство) для работы |
Close |
Закрывает файл (устройство) |
Prev |
Переходит в начало предыдущего трека. Если это первый трек или файл, то переход осуществляется в начало этого трека, файла |
Next |
Переходит в начало следующего трека. Если это последний трек или файл, то переход осуществляется в начало этого трека, файла |
Step |
Переходит на шаг (кадр) вперед по треку (файлу) |
Back |
Переходит на шаг (кадр) назад по треку (файлу) |
Pause |
Приостанавливает работу устройства |
Play |
Воспроизводит информацию с устройства |
Record |
Записывает информацию |
Stop |
Останавливает работу устройства |
Eject |
Извлекает носитель из устройства (компакт-диск из привода) |
Save |
Сохраняет открытый файл |
Seek |
Находит позицию (трек) в файле или на устройстве |
Изучим элемент управления MMControl на примерах.
Разработка простого проигрывателя при помощи элемента управления MCI
В этом разделе на примере разработки проигрывателей аудио- и видеофайлов, а также музыкальных компакт-дисков изучим возможности применения элемента управления MMControl для приложений мультимедиа.
Для изучения работы элемента управления MMControi создадим приложение для проигрывателя звуковых файлов в формате WAV. Чтобы создать такой проигрыватель, выполните следующие действия:
1. Создайте новый стандартный проект. Для этого в меню File (Файл) выберите команду New Project (Создать новый проект) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyMultiMedia. Для этого откройте окно свойств проекта, выбрав команду Projecti Properties (Свойства Project 1) меню Project (Проект). После переименования проекта эта команда именуется MyMultiMedia Properties.
3. Присвойте форме проекта имя Formplayer. В свойство caption формы введите заголовок Мультимедиа плейер.
4. Присоедините к проекту библиотеку компонентов Microsoft Multimedia Control 6.0, воспользовавшись диалоговым окном Components (Компоненты), которое открывается в меню Project (Проект) командой Components.
5. Нам потребуется диалоговое окно поиска проигрываемых файлов, поэтому установите также в окне Components флажок для библиотеки компонентов Microsoft Common Dialog Control 6.0.
6. Добавьте в форму Formplayer элемент управления MMControl, дважды щелкнув мышью кнопку MMControl на панели элементов управления, и присвойте ему имя MMControlCDPlayer.
7. Добавьте в форму элемент управления commonDialog, дважды щелкнув мышью кнопку CommonDialog на панели элементов управления, и присвойте ему имя cdplayer.
8. Добавьте в форму Formplayer кнопку управления типа ConroandButton, дважды щелкнув мышью кнопку CommandButton на панели элементов управления. Назовите эту кнопку cbFindFile и введите в свойство caption значение Найти файл. По событию click созданной в форме кнопки cbFindFile будет открываться диалоговое окно для поиска воспроизводимых файлов.
Созданный проект представлен на рис. 12.3.
Рис. 12.3. Вид проигрывателя файлов WAV при проектировании
9. Откройте окно редактора и введите следующий код:
Private Sub Form_Load()
MMControlCDPlayer.Notify = False
MMControlCDPlayer.Wait = True
MMControlCDPlayer.Shareable = False
MMControlCDPlayer.DeviceType = "WaveAudio"
End Sub
Private Sub cbFindFile_Click ()
cdPlayer.ShowOpen
MMControlCDPlayer.FileName = cdPlayer.FileName
MMControlCDPlayer.Command = "Open"
End Sub
Private Sub Form Unload(Cancel As Integer)
MMControlCDPlayer.Command = "Close"
End Sub
Этот код при загрузке формы назначает элементу управления MMControlCDPlayer свойства, необходимые для работы с файлами формата WAV.
10. Запустите приложение. При нажатии кнопки Найти файл открывается диалоговое окно Открытие файла, позволяющее осуществить поиск, а затем открыть файл для воспроизведения. Далее можно работать с выбранным файлом при помощи кнопок элемента управления
MMControlCDPlayer.
На рис. 12.4 показан проигрыватель в режиме выполнения.
Рис. 12.4. Вид проигрывателя файлов WAV в режиме выполнения
Замечание
Полностью проверить работу приложения (услышать звук) можно только при наличии устройства воспроизведения звука, например, звуковой карты и колонок.
При помощи приложения, разработанного в предыдущем разделе, можно воспроизводить и видеофайлы в формате AVI. Для этого необходима небольшая доработка: потребуется назначить другой тип устройства для элемента управления MMControlCDPlayer (сравните тексты кода, указанного ниже, и предыдущего). В результате мы превратим проигрыватель звуковых файлов в проигрыватель для файлов в формате AVI (рис. 12.5).
Рис. 12.5. Вид проигрывателя файлов AVI в режиме выполнения
Private sub Form_Load()
MMControlCDPlayer.Notify = False
MMControlCDPlayer.Wait = True
MMControlCDPlayer.Shareable = False
MMControlCDPlayer.DeviceType = "AVIVideo"
End Sub
Private Sub cbFindFile_Click ()
cdPlayer.ShowOpen
MMControlCDPlayer.FileName = cdPlayer.FileName
MMControlCDPlayer.Command = "Open"
End Sub
Private Sub Form_Unload(Cancel As Integer)
MMControlCDPlayer.Command = "Close"
End Sub
Приложение работает аналогично проигрывателю звуковых файлов (рис. 12.4). Изображение из файла выводится в окно просмотра. Необходимо заметить, что беспокоиться об открытии этого окна не требуется, так как оно появляется по умолчанию для файлов в формате AVI.
Иногда удобно выводить изображение не в дополнительное окно, а в форму приложения. Для этого в приложение необходимо добавить объект для вывода изображения и назначить направление вывода в это окно. Добавляемый объект должен иметь свойство дескриптора окна hWnd. Такие типы элементов управления есть в Visual Basic 6, и один из них — это picture. Рассмотрим на примере, как это можно сделать. Доработайте проигрыватель видео следующим образом:
1. Добавьте в форму FormPlayer элемент управления picture, дважды щелкнув мышью кнопку PictureBox на панели элементов управления, и присвойте ему имя picview.
2. Измените код приложения в соответствии с указанным ниже:
Private Sub Form_Load()
MMControlCDPlayer.Notify = False
MMControlCDPlayer.Wait = True
MMControlCDPlayer.Shareable = False
MMControlCDPlayer.DeviceType = "WaveAudio"
MMControlCDPlayer.DeviceType = "AVIVideo"
End Sub
Private Sub cbFindFile_Click ()
cdPlayer.ShowOpen
MMControlCDPlayer.FileName = cdPlayer.FileName
MMControlCDPlayer.Command = "Open"
' Назначение окна вывода изображения
MMControlCDPlayer.hWndDisplay = picView.hWnd
FormPlayer.picView.SetFocus
End Sub
Private Sub Form_Unload(Cancel As Integer)
MMControlCDPlayer.Command = "Close"
End Sub
Приложение с выводом изображения в объект формы показано в режиме выполнения на рис. 12.6.
Рис. 12.6. Вид проигрывателя файлов AVI в режиме выполнения с выводом данных в пользовательское окно
Проигрыватель музыкальных компакт-дисков
В этом разделе рассмотрим, как можно разработать простои проигрыватель музыкальных компакт-дисков. Для этого, как и в предыдущих примерах, потребуется элемент управления устройствами мультимедиа MMControl. Для создания проигрывателя выполните следующие действия:
1. Создайте новый стандартный проект. Для этого в меню File (Файл) выберите команду New Project (Создать новый проект) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyCDPlaer. Для этого откройте окно свойств проекта, выбрав команду Project1 Properties (Свойства Projecti) меню Project (Проект). После переименования проекта эта команда именуется MyCDPlaer Properties.
3. Присвойте форме проекта имя FormCDPiayer. В свойство caption формы введите заголовок Проигрыватель компакт-дисков.
4. Разместите в форме FormCDPiayer элемент управления MMControl, дважды щелкнув мышью кнопку MMControl на панели элементов управления, И Присвойте ему ИМЯ MMControlCDPlayer.
5. Добавьте текст в форму. Для этого разместите в форме элемент управления Label. Назовите его ibiText и в свойство caption введите текст Установите Ваш любимый компакт-диск в устройство.
Созданный проект показан на рис. 12.7.
6. Откройте окно редактора и введите'следующий код:
Private Sub Form Load()
MMControlCDPlayer.Notify = False
MMControlCDPlayer.Wait = True
MMControlCDPlayer.Shareable = False
MMControlCDPlayer.DeviceType = "CDAudio"
MMControlCDPlayer.Command = "Open"
End Sub
Private Sub Form Unload(Cancel As Integer)
MMControlCDPlayer.Command = "Stop"
MMControlCDPlayer.Command = "Close"
End Sub
На рис. 12.8 показано созданное приложение в режиме выполнения.
Рис. 12.7. Вид проигрывателя компакт-дисков в режиме разработки
Рис. 12.8. Проигрыватель компакт-дисков в режиме выполнения
Добавим в приложение, содержащее проигрыватель, возможность выбора композиции (трека) на диске, с которой начнется воспроизведение, и простую индикацию времени звучания трека. Для этого внесите следующие изменения в проект:
1. В свойство icon формы добавьте значок.
2. Сделайте кнопку Record (Запись) невидимой. Для этого в окне страницы свойств элемента управления MMControl, открываемого командой Property Pages (Страница свойств) меню View (Вид), снимите флажок рядом с названием этой кнопки.
3. Для указания композиции, с которой начинается воспроизведение, добавьте в проект элемент управления ComboВох (Поле с раскрывающимся
списком), нажав кнопку ComboBox на панели элементов управления, и назовите его cbAvailableTracks. Для свойства style этого объекта установите значение 2-DropDown.
4. Для создания элементов индикации трека добавьте в форму объект типа
Frame с помощью кнопки Frame (Рамка) и задайте для него заголовок Трек №. В полученный объект вставьте текстовое поле TextBox, воспользовавшись кнопкой TextBox на панели элементов управления,
и назовите его txtTrackNum.
5. Добавьте в форму еще один объект Frame с заголовком Время трека и два поля TextBox: txtMinutes и txtSecundes.
Созданный проект показан на рис. 12.9.
Рис. 12.9. Доработанный проигрыватель компакт-дисков в режиме разработки
6. Установите интервал события StatusUpdate объекта MMControl в свойстве Updatelnterval равным 1000, то есть 1 сек.
7. В окно редактора введите следующий код:
' Текущий трек
Dim IgThisTrackNow As Long
' Всего треков на диске
Dim IgThisTracklsMax As Long
' Идентификатор выбранной композиции
Dim nSelectItem As Integer
' Длина композиции по времени
Dim nLongMin As Integer
Dim nLongSec As Integer
' Позиция композиции по времени
Dim nTrackPosMin As Integer
Dim nTrackPosSec As Integer
' Длина диска по времени
Dim nLongDiskMin As Integer
Dim nLongDiskSec As Integer
Private Sub cbAvailableTracks_Click()
nSelectItem = cbAvailableTracks.ListIndex
MMControlCDPlayer.Command = "Stop"
txtTrackNum.Text = nSelectItem + 1
txtMinutes.Text = 0
txtSecundes.Text = 0
MMControlCDPlayer_PlayClick (1)
End Sub
Private Sub Form Load()
nSelectItem = -1
MMControlCDPlayer.Notify = False
MMControlCDPlayer.Wait = True
MMControlCDPlayer.Shareable = False
MMControlCDPlayer.DeviceType = "CDAudio"
MMControlCDPlayer.Command = "Open"
IgThisTracklsMax = MMControlCDPlayer.Tracks
Call InitTracksComboBox(IgThisTracklsMax)
nLongDiskMin = MMControlCDPlayer.Length And 255
nLongDiskSec = (MMControlCDPlayer.Length And 65535) / 256
End Sub
Private Sub Form Unload(Cancel As Integer)
MMControlCDPlayer.Command = "Stop"
MMControlCDPlayer.Command = "Close"
End Sub
Private Sub InitTracksComboBox(TracksNumber As Long)
Dim nCounter As Integer
For nCounter = 1 To TracksNumber
cbAvailableTracks.AddItem "Композиция " + Str(nCounter)
Next nCounter
End Sub
Private Sub MMControlCDPlayer_PlayClick(Cancel As Integer)
MMControlCDPlayer.Command = "Stop"
Dim nCounter As Integer
' Если композиция не выбрана
IgThisTrackNow = nSelectItem + 1
If nSelectItem < 0 Then
MMControlCDPlayer.Track = 1
nSelectItem = 0
MMControlCDPlayer.Command = "Play"
Else
For nCounter = 0 To IgThisTracklsMax
If MMControlCDPlayer.Track > IgThisTrackNow Then
MMControlCDPlayer.Command = "Prev"
If MMControlCDPlayer.Track < IgThisTrackNow Then
MMControlCDPlayer.Command = "Next"
If MMControlCDPlayer.Track = IgThisTrackNow Then
MMControlCDPlayer.Command = "Play"
End If
Next nCounter
End If
nLongMin = MMControlCDPlayer.TrackLength And 255
nLongSec = (MMControlCDPlayer.TrackLength And 65535) / 256
nTrackPosMin = MMControlCDPlayer.TrackPosition And 255
nTrackPosSec = (MMControlCDPlayer.TrackPosition And 65535) / 256
End Sub
Private Sub MMControlCDPlayer_NextClick(Cancel As Integer)
MMControlCDPlayer.Track = MMControlCDPlayer.Track + 1
nLongMin = MMControlCDPlayer.TrackLength And 255
nLongSec = (MMControlCDPlayer.TrackLength And 65535) / 256
nTrackPosMin = MMControlCDPlayer.TrackPosition And 255
nTrackPosSec = (MMControlCDPlayer.TrackPosition And 65535) / 256
End Sub
Private Sub MMControlCDPlayer_PrevClick(Cancel As Integer)
MMControlCDPlayer.Command = "Prev"
MMControlCDPlayer.Track = MMControlCDPlayer.Track - 1
nLongMin = MMControlCDPlayer.TrackLength And 255
nLongSec = (MMControlCDPlayer.TrackLength And 65535) / 256
nTrackPosMin = MMControlCDPlayer.TrackPosition And 255
nTrackPosSec = (MMControlCDPlayer.TrackPosition And 65535) / 256
End Sub
Private Sub MMControlCDPlayer_StatusUpdate ()
Dim nSec As Integer Dim nMin As Integer
' Начало работы
If nSelectItem = -1 Then
txtMinutes.Text = 0
txtSecundes.Text = 0
MMControlCDPlayer.Track = 1
End If
nSec = (MMControlCDPlayer.Position And 65535) / 256
nMin = MMControlCDPlayer.Position And 255
' Проверяем завершение текущего трека и переходим на следующий
If (nMin * 60 + nSec) - (nTrackPosMin * 60 + nTrackPosSec) > nLongMin * 60 + nLongSec Then
MMControlCDPlayer.Track = MMControlCDPlayer.Track + 1
nLongMin = MMControlCDPlayer.TrackLength And 255
nLongSec = (MMControlCDPlayer.TrackLength And 65535) / 256
nTrackPosMin = MMControlCDPlayer.TrackPosition And 255
nTrackPosSec = (MMControlCDPlayer.TrackPosition And 65535) / 256
End If
' Время трека
If (nMin * 60 + nSec) — (nTrackPosMin * 60 + nTrackPosSec) >= 0 Then
txtTrackNum.Text = MMControlCDPlayer.Track
txtMinutes.Text = (nMin * 60 + nSec) — (nTrackPosMin * 60 + nTrackPosSec)
txtSecundes.Text = txtMinutes.Text
txtMinutes.Text = Int(txtMinutes.Text / 60)
txtSecundes.Text = txtSecundes.Text — Int(txtSecundes.Text / 60) * 60
End If
' Конец диска
If (nMin * 60 + nSec) >= nLongDiskMin * 60 + nLongDiskSec Then
MMControlCDPlayer.Command = "Stop"
End If
End Sub
Работа созданного проигрывателя показана на рис. 12.10.
Рис. 12.10. Доработанный проигрыватель компакт-дисков в режиме выполнения
В тексте кода необходимо обратить внимание на распаковку (декодирование) значений позиционирования на диске. Информация о позиционировании упакована на диске в формате 2 (см. табл. 12.6), то есть первый байт, начиная с младшего, — это минуты, второй байт — секунды. Остальные байты нас пока не интересуют. Для распаковки информации, по аналогии с двоичной системой счисления, применяется операция логического AND со значениями свойств позиционирования. Для извлечения младшего байта (значение минут) в этой операции используется число 255 (28 — 1, в двоичном формате это восемь бит в состоянии 1). Для извлечения второго байта (значение секунд) используется число 65535 (216— 1, в двоичном формате это шестнадцать бит в состоянии 1) и отрезание младшего байта (сдвиг байтов вправо) на восемь бит (деление на 256).
назад | содержание | вперед
Hosting uCoz