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

Проигрыватель музыкальных компакт-дисков

В этом разделе рассмотрим, как можно разработать простои проигрыватель музыкальных компакт-дисков. Для этого, как и в предыдущих примерах, потребуется элемент управления устройствами мультимедиа 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).

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