назад | содержание | вперед

Глава 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

Прочие мультимедиа-устройства, задаваемые пользователем



Ряд устройств, такие как привод компакт-дисков или видеодиски, не имеют файловой структуры. Тем не менее, информация на них представляет собой некую структуру в виде треков (композиций), которые используются для перемещения по информационному массиву вперед, назад, в начало, в конец.

Интерфейс MCI

Для реализации возможностей мультимедиа в Visual Basic 6 используется интерфейс MCI, который обеспечивает доступ к функциям Windows, управляющим устройствами мультимедиа. Основным компонентом этого интерфейса является элемент управления MMControl с большим набором свойств и команд, позволяющих управлять мультимедиа и полностью их контролировать.

Элемент управления MCI

Для управления мультимедиа служит элемент управления 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 для приложений мультимедиа.

Проигрыватель аудиофайлов WAV

Для изучения работы элемента управления 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