Проигрывание Mp3 файлов с помощью Vb 6

  • Автор темы Shtirlits
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Shtirlits

И сетаки я считаю , что я прав, хотя согласен, подмогли.Разговорный английский, знаком, а вот с техническим туго, особено когда программированием занялся только - только сейчас :)
Ну и напоследок примерчик с DirectX, а использование сторонних библиотек, не входящих в OS Windows и VB, мне кажется, можно сделать отдельной темой, а эту считать закрытой, если бы не одно "но" , с которым мне не определиться, воспроизведение мы освоили, с трудом и впопыхах, а, как же (звучало выше) запись?А то как то нелогично получается, прежде, чем прослушать, ведь надо записать :) или новую тему открыть ?
Ладно, вот вам пример листинга, проигрывающего mp3 с помощью DirectX (не забудьте подключить к проекту Active Movie Control Type Library (Проект (Project) -> Ссылки (Reference) (хотя, у меня русский перевод того пункта называется "Информация",-руки оторвать етому переводчику надо) - это quartz.dll входящая в DirectX, а значит , во все винды последних поколений :) и модуль )
Код на форму:
Код:
Option Explicit

Private Sub Form_Activate()
'Change the file path of your mp3 in here.
DirectShow_Load_Media "C:\YouFile.mp3" 'путь до вашего mp3
'You don't need to do this part, but it's nice to be
'able to control it.
'------------------------------------------------
DirectShow_Volume 100
DirectShow_Balance 0
DirectShow_Speed 100
DirectShow_Set_Position 0, 0, 0, 0
'------------------------------------------------

DirectShow_Play
End Sub

Private Sub Form_Unload(Cancel As Integer)
DirectShow_Shutdown
End Sub
Код в модуль:
Код:
Option Explicit

Private Const MAX_VOLUME As Long = 100
Private Const MAX_BALANCE As Long = 100
Private Const MAX_SPEED As Long = 226

Public DirectShow_Event As IMediaEvent
Public DirectShow_Control As IMediaControl
Public DirectShow_Position As IMediaPosition
Public DirectShow_Audio As IBasicAudio

Public Function DirectShow_Load_Media(File_Name As String) As Boolean
On Error GoTo Error_Handler
If Right(File_Name, 4) = ".mp3" Then
Set DirectShow_Control = New FilgraphManager
DirectShow_Control.RenderFile (File_Name)
Set DirectShow_Audio = DirectShow_Control
DirectShow_Audio.Volume = 0
DirectShow_Audio.Balance = 0
Set DirectShow_Event = DirectShow_Control
Set DirectShow_Position = DirectShow_Control
DirectShow_Position.Rate = 1
DirectShow_Position.CurrentPosition = 0
Else
GoTo Error_Handler
End If
DirectShow_Load_Media = True
Exit Function
Error_Handler:
DirectShow_Load_Media = False
End Function

Public Function DirectShow_Play() As Boolean
On Error GoTo Error_Handler
DirectShow_Control.Run
DirectShow_Play = True
Exit Function
Error_Handler:
DirectShow_Play = False
End Function

Public Function DirectShow_Stop() As Boolean
On Error GoTo Error_Handler
DirectShow_Control.Stop
DirectShow_Position.CurrentPosition = 0
DirectShow_Stop = True
Exit Function
Error_Handler:
DirectShow_Stop = False
End Function

Public Function DirectShow_Pause() As Boolean
On Error GoTo Error_Handler
DirectShow_Control.Stop
DirectShow_Pause = True
Exit Function
Error_Handler:
DirectShow_Pause = False
End Function

Public Function DirectShow_Volume(ByVal Volume As Long) As Boolean
On Error GoTo Error_Handler
If Volume >= MAX_VOLUME Then Volume = MAX_VOLUME
If Volume <= 0 Then Volume = 0
DirectShow_Audio.Volume = (Volume * MAX_VOLUME) - 10000
DirectShow_Volume = True
Exit Function
Error_Handler:
DirectShow_Volume = False
End Function

Public Function DirectShow_Balance(ByVal Balance As Long) As Boolean
On Error GoTo Error_Handler
If Balance >= MAX_BALANCE Then Balance = MAX_BALANCE
If Balance <= -MAX_BALANCE Then Balance = -MAX_BALANCE
DirectShow_Audio.Balance = Balance * MAX_BALANCE
DirectShow_Balance = True
Exit Function
Error_Handler:
DirectShow_Balance = False
End Function


Public Function DirectShow_Speed(ByVal Speed As Single) As Boolean
On Error GoTo Error_Handler

If Speed >= MAX_SPEED Then Speed = MAX_SPEED
If Speed <= 0 Then Speed = 0

DirectShow_Position.Rate = Speed / 100
DirectShow_Speed = True
Exit Function
Error_Handler:
DirectShow_Speed = False
End Function

Public Function DirectShow_Set_Position(ByVal Hours As Long, ByVal Minutes As Long, ByVal Seconds As Long, Milliseconds As Single) As Boolean
On Error GoTo Error_Handler
Dim Max_Position As Single
Dim Position As Double
Dim Decimal_Milliseconds As Single

'Keep minutes within range
Minutes = Minutes Mod 60

'Keep seconds within range
Seconds = Seconds Mod 60

'Keep milliseconds within range and keep decimal
Decimal_Milliseconds = Milliseconds - Int(Milliseconds)
Milliseconds = Milliseconds Mod 1000
Milliseconds = Milliseconds + Decimal_Milliseconds

'Convert Minutes & Seconds to Position time
Position = (Hours * 3600) + (Minutes * 60) + Seconds + (Milliseconds * 0.001)
Max_Position = DirectShow_Position.StopTime

If Position >= Max_Position Then
Position = 0
GoTo Error_Handler
End If

If Position <= 0 Then
Position = 0
GoTo Error_Handler
End If
DirectShow_Position.CurrentPosition = Position
DirectShow_Set_Position = True
Exit Function
Error_Handler:
DirectShow_Set_Position = False
End Function


Public Function DirectShow_End() As Boolean
On Error GoTo Error_Handler
If DirectShow_Loop = False Then
If DirectShow_Position.CurrentPosition >= DirectShow_Position.StopTime Then DirectShow_Stop
End If

DirectShow_End = True
Exit Function

Error_Handler:

DirectShow_End = False
End Function

Public Function DirectShow_Loop() As Boolean
On Error GoTo Error_Handler

If DirectShow_Position.CurrentPosition >= DirectShow_Position.StopTime Then
DirectShow_Position.CurrentPosition = 0
End If
DirectShow_Loop = True
Exit Function
Error_Handler:
DirectShow_Loop = False
End Function

Public Sub DirectShow_Shutdown()
Set DirectShow_Audio = Nothing
Set DirectShow_Event = Nothing
Set DirectShow_Control = Nothing
Set DirectShow_Position = Nothing
End Sub
Блин-билин-билин, а ведь моно проиграть mp3 через сам проигрыватель, через shell, но эт попозже :)
 
S

Shtirlits

открыть файл mp3 внешней программой, которая проигрывает mp3 по умолчанию, не забудьте подключить к проекту Microsoft Shell Controls and Automation(Проект (Project) -> Ссылки (Reference)
Код:
Dim s As New Shell

Private Sub Command1_Click()
s.Open "c:\ranenaya_ptica.mp3"
End Sub
То же самое, только с помощью API ( добавлять в проект ничего не нужно :) )
Код:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Form_Load()
ShellExecute Me.hwnd, vbNullString, "C:\312.mp3", vbNullString, "", SW_SHOWNORMAL
End Sub
Ну, вроде все, теперь можно писать мануал по воспроизведению MP3 доступными средствами при помощи среды разработки Visual Basic (6), окромя сторонних библиотек, не входящих в VB и Windows.
Выражаю огромную благодарность всем участникам этой темы ;)
Дополняйте, вдруг чаго забыл :D
 
B

Bagir

Кое что даже никто и не упомянул. Для Wav файлов есть sndPlaySound и константы.

Звук воспроизводится синхронно, и функция не возвращает управления до окончания его проигрывания.
Код:
Global Const SND_SYNC = &H0

Звук воспроизводится асинхронно, функция возвращает управление сразу после начала воспроизведения.
Код:
Global Const SND_ASYNC = &H1

Иногда нужно выстраивать озвучиваемые файлы в очередь, а в моем случае в этой очереди еще и озвучка текста. Для Wav очень удобно при этом пользоваться SND_SYNC. Но понадобилось мне воспроизводить еще MP3. Выбрал вариант с mciSendString. Но воспроизводит асинхронно, возвращая управление сразу, не дожидаясь окончания звучания. Может кто знает, как придержать дальнейшее выполнение кода, пока файл полностью не проиграет?

Видел нечто подобное, но работать не хочет:
Код:
 mciSendString "open " & Chr$(34) & aFile & Chr$(34) & " alias myfile", 0&, 0&, 0&
mciSendString "play myfile", 0&, 0&, 0&
mciSendString "wait myfile", 0&, 0&, 0&
mciSendString "close myfile", 0&, 0&, 0&
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!