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