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