Консультация № 53497
28.08.2006, 10:30
0.00 руб.
0 1 1
При создании приложения Vicrosoft MultiMedia Control не проигрывает
файлы с расширением *mp3 , хотя должен это делать. Подскажите пожалуйста, в чем проблема. Заранее благодарен
Kont

Обсуждение

Неизвестный
28.08.2006, 15:50
общий
это ответ
Здравствуйте, Kont kontovich!

Согласно книге М. Хальворсона "Microsoft Visual Basic 6.0 для профессионалов: шаг за шагом" средством управления MMControl поддерживаются следующие устройства мультимедиа:
- Видеоклипы (AVIVideo)
- Аудио-CD (CDAudio)
- Цифровая магнитная запись (DAT)
- Цифровое видео (DigitalVideo)
- Видео (MMMovie)
- Видео (Overlay)
- Сканер (Scanner)
- MIDI-Секвенсер (Sequencer)
- Видеомагнитофон (VCR)
- Проигрыватель видеодисков (Videodisc)
- Звуковые файлы (WaveAudio)
- Задаваемое пользователем (Other)
Как видите, МР3 среди поддерживаемых устройств нет (согласно документации). Отсюда Ваша проблема.
Приведенный в приложении код все же позволяет проигрывать Wave И MP3. Программа состоит из одной формы (имя в проекте - Form1), трех меток (Label1, Label2, Label3), контрола FileListBox (File1), компонентов MMControl1 и UpDown и командной кнопки (Command1).

Приложение:
Option Explicit‘ для воспроизведения звуковых файлов в программе используется‘ компонент Microsoft Multimedia Control (MMControl)‘‘ эти API функции используются для доступа к окну Выбор папкиPrivate Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA" (ByRef b As Any) As LongPrivate Declare Function SHGetPathFromIDList Lib "shell32" (ByVal ResPIDL As Any, ByVal patch As String) As Long‘ константы SHELL APIConst CSIDL_DRIVES As Long = 17Const BIF_RETURNONLYFSDIRS As Long = 1Const MAX_PATH = 260Const mciTormatMilleseconds = 0‘ эта структура используется для передачи информации‘ в функцию SHBrowseFolder, которая выводит диалоговое‘ окно "Выбор папки"Private Type bi ‘ browseinfo hwndOwner As Long pidlRoot As Long pszDisplayName As String ‘ выбранная папка (без пути) lpzTitle As String ‘ подсказка ulFlags As Long lpfn As Long lParam As Long iImage As LongEnd TypeDim status As Integer ‘ состояние плеера: ‘ 0 - Стоп (Пауза) ‘ 1 - Воспроизведение‘ инициализация формыPrivate Sub Form_Initialize() On Error Resume Next ‘ папка, в которой по умолчанию находятся MP3-файлы ‘ во время отладки (при запуске программы из VB) ‘ лучше указать конкретный каталог. ‘ File1.Path = CurDir + "" ‘ в поле компонента File1 отображть файлы ‘ с расширением mp3 File1.Pattern = "*.mp3" ‘ в MMCOntrol1 отображать только кнопки Play, Pause, Step и Back ‘ остальные кнопки скрыть MMControl1.PrevVisible = False MMControl1.NextVisible = False MMControl1.RecordVisible = False MMControl1.EjectVisible = False Form1.ScaleMode = vbPixels File1.ListIndex = 0 File1.BackColor = RGB(56, 176, 222) ‘ осеннее небо ‘File1.FontBold = True status = 0 ‘ плеер в режиме СтопEnd Sub‘ Щелчок на имени файла или программное изменение‘ значения свойства ListIndexPrivate Sub File1_Click() If MMControl1.Command <> "CLOSE" Then MMControl1.Command = "CLOSE"‘ Label1.Caption = File1.Path + "" + File1.FileName If File1.FileName <> "" Then MMControl1.FileName = File1.Path + "" + File1.FileName MMControl1.TimeFormat = mciTormatMilleseconds MMControl1.Command = "OPEN" Label2.Caption = toHMS(MMControl1.Length) Label3.Caption = "00:00" If status = 1 Then ‘ пользователь сделал щелчок на кнопке Step или Back, ‘ когда плеер находился в режиме воспроизведения, ‘ поэтому после загрузки файла сразу активизируем его воспроизведение MMControl1.Command = "Play" End If End IfEnd Sub‘ щелчок на кнопке ПаузаPrivate Sub MMControl1_PauseClick(Cancel As Integer) ‘ плеер сам выполнит нужное действие, мы же ‘ только зафиксируем его статус If status = 0 Then status = 1 Command1.Enabled = False Else status = 0 Command1.Enabled = True End IfEnd Sub‘ щелчок на кнопке PlayPrivate Sub MMControl1_PlayClick(Cancel As Integer) status = 1 Command1.Enabled = FalseEnd Sub‘ щелчок на кнопке СтопPrivate Sub MMControl1_StopClick(Cancel As Integer) status = 0 Command1.Enabled = TrueEnd Sub‘ щелчок на кнопке Step - перейти к следующему‘ файлу спискаPrivate Sub MMControl1_StepClick(Cancel As Integer)If File1.ListIndex < File1.ListCount - 1 Then File1.ListIndex = File1.ListIndex + 1 If File1.ListIndex = File1.ListCount Then MMControl1.StepEnabled = False End If Else File1.ListIndex = 0 End IfEnd Sub‘ щелчок на кнопке Back - перейти к предыдущему‘ файлу спискаPrivate Sub MMControl1_BackClick(Cancel As Integer)If File1.ListIndex > 0 Then File1.ListIndex = File1.ListIndex - 1 Else File1.ListIndex = File1.ListCount - 1 End IfEnd Sub‘ обработка сигнала StatusUpdate, генерируемого MMControlPrivate Sub MMControl1_StatusUpdate() If MMControl1.Position < MMControl1.Length Then ‘ продолжается воспроизведение текущей композиции Label3.Caption = toHMS(MMControl1.Position) Else ‘ воспроизведение текущей композиции закончено If File1.ListIndex < File1.ListCount - 1 Then File1.ListIndex = File1.ListIndex + 1 Else MMControl1.Command = "Stop" status = 0 Command1.Enabled = True End If End If End Sub‘ щелчок на кнопке Eject (Выбор каталога)Private Sub Command1_Click() Dim ResPIDL As Long Dim t As bi Dim Path As String Dim r As Long Dim p As String t.hwndOwner = Form1.hWnd t.lpzTitle = "Выберите папку, в которой находятся MP3-файлы" t.ulFlags = BIF_RETURNONLYFSDIRS ‘ кнопка OK доступна, если пользователь выбрал папку t.pszDisplayName = String(MAX_PATH, 0) ResPIDL = SHBrowseForFolder(t) ‘ вывести окно Выбор папки If ResPIDL <> 0 Then ‘ пользователь выбрал папку ‘ получить ее полное имя Path = String(MAX_PATH, Chr(0)) r = SHGetPathFromIDList(ResPIDL, Path) p = InStr(1, Path, Chr(0)) Path = Mid(Path, 1, p - 1) If Mid(Path, p - 1, 1) <> "" Then Path = Path + "" File1.Path = Path ‘ отобразить содержимое выбранного каталога в поле компонента FileList1 File1.ListIndex = 0 ‘ в результате возникает событие File1.Click и активизируется процесс воспроизведения End IfEnd Sub‘ завершение работы программыPrivate Sub Form_Unload(Cancel As Integer) MMControl1.Command = "STOP" ‘ остановить воспроизведение MMControl1.Command = "CLOSE" ‘ "выключить" плеерEnd Sub‘ функция преобразует целое (время звучания или текущую позицию‘ воспроизведения) в формат "часы:минуты:секунды"Private Function toHMS(time As Long) As String Dim H As Integer ‘ часы Dim M As Integer ‘ минуты Dim S As Integer ‘ секунды H = Int((time / 1000) / 3600) M = Int((time / 1000 Mod 3600) / 60) S = (time / 1000 Mod 3600) Mod 60 If H > 0 Then toHMS = Str(H) + ":" toHMS = toHMS + Format(M, "0#") + ":" + Format(S, "0#")End FunctionПРИ РАСПРОСТРАНЕНИИ ПРОГРАММЫ ВАМ ПРИДЕТСЯ РЕГИСТРИРОВАТЬ НА МАШИНЕ КЛИЕНТА КОМПОНЕНТ MCI32.OCX
Форма ответа