Сейчас наш плеер может воспроизводить аудиофайлы и плейлисты с компьютера, а хотелось бы добавить возможность проигрывать свои любимые CD/DVD диски.
Шаг 13: размещение нужных компонентов. Можно открывать нужный файл с диска обычным способом - вызвать специальное окно. Но как правила мы слушаем с дисков целые альбомы, а не отдельные песни, потому не хотелось бы прерываться и включать заново новую песню. Можно, конечно, программе составить плейлист всех записей на диске и сохранить его, и тогда уже воспроизводить сам плейлист. Но мы поступим третьим способом - пользователь будет выбирать файл прямо на форме - в одном поле диск, а во втором папку. Рядом будет выводиться имя текущего файла, а переключение между ними производится кнопками Next и Pervious.
Итак, для этого размещаем DriveListBox, DirListBox и FileListBox (свойство Name оставим по-умолчанию), а также CheckBox (Name = Auto_stop, Caption = Auto Stop). Последний элемент - Чекбокс - служит для остановки воспроизведения по окончании текущей записи. Если в нем стоит галочка, то после окончания текущей записи на диске следующая воспроизводиться не будет, а если нет - воспроизведение продолжится. Кстати, почему бы такую не сделать в плейлисте?
Шаг 14: составление плейлиста диска; воспроизведение Ну для начала пропишем, что будет происходить при нажатии на наши компоненты:
Код Visual Basic | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dim DriveNumber As Integer Dim SongNumber As Integer On Error GoTo ErrorHandler Dir1.Path = Drive1.Drive On Error GoTo 0 If Player.cdromCollection.Count Then For DriveNumber = 0 To Player.cdromCollection.Count - 1 If UCase$(Trim$(Player.cdromCollection.item(DriveNumber).driveSpecifier)) = UCase$(Trim$(Drive1.Drive)) Then If Player.cdromCollection.item(DriveNumber).PlayList.Count Then Player.currentPlaylist = Player.cdromCollection.item(DriveNumber).PlayList End If End If Next DriveNumber End If AutoStop ErrorHandler: On Error GoTo 0 End Sub Private Sub File1_Click() If Player.currentPlaylist.Count Then Player.Controls.playItem Player.currentPlaylist.item(File1.ListIndex) End If AutoStop End Sub |
|
Здесь нам встретилась процедура AutoStop:
Код Visual Basic | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Private Sub AutoStop() If Auto_stop.Value Then Do DoEvents Player.Controls.stop Select Case Player.playState Case 0, Is > 3 Exit Sub Case 1 Exit Do End Select Loop End If End Sub |
|
И последние - процедура Player_MediaChange, которая, как понятно, будет вызываться при смене файла:
Код Visual Basic | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Private Sub Player_MediaChange(ByVal item As Object) Dim c As Integer If Player.currentPlaylist.Count Then For c = 0 To Player.currentPlaylist.Count - 1 If Player.Controls.currentItem.Name = Player.currentPlaylist.item©.Name Then If File1.ListIndex <> c Then File1.ListIndex = c AutoStop End If Exit For End If Next c End If End Sub |
|
Да, вот для воспроизведения нами не будет использована процедура OpenFile, а потому лучше сделать кнопку Open Disk. Все размещённые в 13 шаге объекты нужно сделать невидимыми изначально, чтобы они появлялись при нажатии на эту кнопку.
Получать теги можно лишь с MP3-файлов. Например на тестируемом мною диске они были формата CDA, так что получение тегов из файла лучше отключить. Либо сделать проверку на формат файла. Либо добавить поддержку других форматов.
Не забудьте протестировать прокрутку записи - вдруг какие-то форматы не будут работать, т.е. у них не получается определить время.
|