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