powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Воспроизведение Wav файлов
10 сообщений из 10, страница 1 из 1
Воспроизведение Wav файлов
    #38862098
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер. Можно ли с помощью MMControl воспроизвести Wav так, чтобы он не задерживал выполнение других процессов.
Код: vbnet
1.
2.
3.
4.
MMControl1.DeviceType = "WaveAudio"
MMControl1.FileName = "1.wav"
MMControl1.Command = "Open"
MMControl1.Command = "Sound" ' Отрабатывает, а "Play" нет


Sound задерживает выполнение других процессов пока не завершится проигрывание. Пробовал в начале делать MMControl1.Command = "Close" не помогло

Я конечно могу через API, но просто интересно MMC может так?
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862104
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу пардон, уже нашел.
используем MMControl1.DeviceType = "MPEGVideo" и все арбайтен
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862110
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

контрол этот никогда не использовал.
Самый простой вариант через API - mciSendString

Код: vbnet
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
'http://www.vbarchiv.net/tipps/details.php?id=499

' Module MP3-Play and Stop via API
Option Explicit

'Multimedia Functions
Public Declare Function mciSendString Lib "winmm.dll" _
 Alias "mciSendStringA" ( _
 ByVal lpszCommand As String, _
 ByVal lpszReturnString As String, _
 ByVal cchReturn As Long, _
 ByVal hwndCallback As Long) As Long

'Multimedia Messages

'wFlags (MM_MCINOTIFY message) - Reason for the notification
Public Const MCI_NOTIFY_SUCCESSFUL = &H1        'Notification successful
Public Const MCI_NOTIFY_SUPERSEDED = &H2        'Notification superseded
Public Const MCI_NOTIFY_ABORTED = &H4           'Notification aborted
Public Const MCI_NOTIFY_FAILURE = &H8           'Notification failed

Public Const MM_MCINOTIFY = &H3B9
'

Public Function MP3_Play(ByVal sFile As String, _
 ByVal sAlias As String, ByVal sType As String, ByVal hwnd_cb As Long) As Boolean
 
  'sType="waveaudio" -to play WAV
  'sType="MPEGVideo" -to play mp3
 
  Dim bResult As Boolean
 
  ' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
  ' wie Leerzeichen Probleme machen
  Dim sBuffer As String
  Dim lResult As Long
 
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))

  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
 
    ' MCI &#246;ffnen
    lResult = mciSendString("open " & sFile & " type " & sType & " alias " & sAlias, 0, 0, 0)
 
    If lResult = 0 Then
      ' MP3 abspielen
      If mciSendString("play " & sAlias & " from 0 notify", 0, 0, hwnd_cb) = 0 Then
        bResult = True
      End If
    End If
  End If
 
  MP3_Play = bResult
End Function

Public Sub MP3_Stop(ByVal sAlias As String)
  mciSendString "stop " & sAlias, 0, 0, 0
  mciSendString "close " & sAlias, 0, 0, 0
End Sub

Public Function MP3_Play_only(ByVal sAlias As String, sPosition As String, ByVal hwnd_cb As Long) As Boolean
  If mciSendString("play " & sAlias & " from " & sPosition & " notify", 0, 0, hwnd_cb) = 0 Then
    MP3_Play_only = True
  End If
End Function

Public Function MP3_Stop_only(ByVal sAlias As String) As Boolean
  If mciSendString("stop " & sAlias, 0, 0, 0) = 0 Then
    MP3_Stop_only = True
  End If
End Function

Public Sub MP3_Close_only(ByVal sAlias As String)
  mciSendString "close " & sAlias, 0, 0, 0
End Sub

Public Function MP3_Open(ByVal sFile As String, _
 ByVal sAlias As String, ByVal sType As String) As Boolean
 
  Dim bResult As Boolean
 
  ' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
  ' wie Leerzeichen Probleme machen
  Dim sBuffer As String
  Dim lResult As Long
 
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))

  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
 
    ' MCI &#246;ffnen
    lResult = mciSendString("open " & sFile & " type " & sType & " alias " & sAlias, 0, 0, 0)
 
    If lResult = 0 Then
      bResult = True
    End If
  End If
 
  MP3_Open = bResult
End Function

Public Function MP3_length(ByVal sAlias As String) As Long

  Dim RetString As String * 256
  Dim strCommand As String
  Dim lResult As Long

  strCommand = "set " & sAlias & " time format milliseconds"
  mciSendString strCommand, vbNullString, 0, 0&
  strCommand = "status " & sAlias & " length"
  lResult = mciSendString(strCommand, RetString, Len(RetString), 0&)
  If lResult = 0 Then
    MP3_length = CLng(RetString)
  End If
End Function

Public Function MP3_position(ByVal sAlias As String) As Long

  Dim RetString As String * 256
  Dim strCommand As String
  Dim lResult As Long

  strCommand = "status " & sAlias & " position"
  lResult = mciSendString(strCommand, RetString, Len(RetString), 0&)
  If lResult <> 0 Then
    MP3_position = -1   'Not playing
  Else
    MP3_position = CLng(RetString)
  End If
End Function

Public Function MP3_seek(ByVal sAlias As String, ByVal sPosition As Long) As Boolean

  Dim RetString As String * 256
  Dim strCommand As String
  Dim lResult As Long

  strCommand = "seek " & sAlias & " to " & CStr(sPosition)
  lResult = mciSendString(strCommand, 0&, 0&, 0&)
  If lResult = 0 Then
    MP3_seek = True
  End If
End Function

'Pause the named media instance
Public Function MP3_pause(ByVal sAlias As String) As Boolean

  Dim strCommand As String
  Dim lResult As Long

  strCommand = "pause " & sAlias
  lResult = mciSendString(strCommand, 0&, 0&, 0&)

  'Get the error message if there is any else return current status
  If lResult = 0 Then
    MP3_pause = True
  End If
End Function

'Resume the named media instance
Public Function MP3_resume(ByVal sAlias As String) As Boolean

  Dim strCommand As String
  Dim lResult As Long

  strCommand = "resume " & sAlias
  lResult = mciSendString(strCommand, 0&, 0&, 0&)

  'Get the error message if there is any else return current status
  If lResult = 0 Then
    MP3_resume = True
  End If
End Function


(можно еще с Callback)
Скорее всего указанный контрол и является оберткой над этим самым.

Более сложный вариант - через мультимедиа - API (с возможностью выбора звуковой карты и много чего еще), но это гораздо сложнее.
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862111
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77Самый простой вариант через API - mciSendString

Ну нихрена се простой вариант))
Как вам этот?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Declare Function mciExecute Lib "winmm.dll" _
        (ByVal lpstrCommand As String) As Long

      Private Sub Form_Load()
              lpstrCommand = "Play " & "1.mp3 from 1000 to 10000"
              Call mciExecute(lpstrCommand)
      End Sub
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862228
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

а зачем Вы API напрямую вызываете, если есть все интересующие обёртки в классе
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862272
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в ступоре. Когда не ввожу данные в textbox отрабатывает звук и потом msgbox, короче все как надо. Когда ввожу данные в textbox-ы то не отрабатывает((( А в пошаговом арбайтен, это как?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Raschet_Click()
   If Raschet.Value Then Raschet.Value = 0: Exit Sub 
     [color=orange] Knopki.FileName = "count.wav": Knopki.Command = "Open": Knopki.Command = "Play"[/color]
        If G.Text = "" Or P.Text = "" Or VerhniiB.Text = "" Or NijniiB.Text = "" Then
          MsgBox "&#205;&#229;&#228;&#238;&#241;&#242;&#224;&#242;&#238;&#247;&#237;&#238; &#228;&#224;&#237;&#237;&#251;&#245;!", vbInformation + vbOKOnly, "&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;!" '&#207;&#240;&#238;&#226;&#229;&#240;&#234;&#224; &#226;&#226;&#229;&#228;&#229;&#237;&#251; &#235;&#232; &#228;&#224;&#237;&#237;&#251;&#229;
          VerhniiB.Enabled = True
          NijniiB.Enabled = True
   Else
       If Nedelia Then Raschet_na_nedeliu 
       If deni Then Raschet_na_deni
             VerhniiB.Enabled = False
             NijniiB.Enabled = False
   End If
   Knopki.Command = "Close"
End Sub
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862646
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто не знает в чем трабла?
Пробовал уже совать строку со звуком в разные места этого кода. Результат тот же - в пошаговом все работает, в run нет.
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862651
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

Не надо посылать команду "Close" пока звук не доиграет до конца
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38862897
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Спасибо!
...
Рейтинг: 0 / 0
Воспроизведение Wav файлов
    #38864122
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 3 формы в каждой из которых свой MMControl. Например нажимаю на кнопку - "Расчет" которая есть во всех трех формах.( Соответственно звуковой файл один и тот-же используется)
ВАРИАНТ№1:
1) Загружаю форму1 нажимаю на кнопку - звук есть.
2) Загружаю форму2(форма1 при этом открыта) нажимаю на кнопку - нет звука.
P.S. В форме№2 перед проигрыванием в процедуре есть команда - Close
Опыт№1
1) Загружаю форму1 нажимаю на кнопку - звук есть.
2) Загружаю форму2, закрываю форму1 нажимаю на кнопку - звук есть.
Опыт№2
1) Создаю копию муз. файла для второй формы.
2) Загружаю форму1 нажимаю на кнопку - звук есть. (работает файл1)
3) Загружаю форму2(форма1 при этом открыта) нажимаю на кнопку - звук есть.(работает файл2)
Вывод: - файл не закрыт, поэтому нет проигрывания в варианте№1
Вопрос:- Почему? Ведь перед проигрывание во второй форме есть команда "close"
И как сделать так, чтобы не делать для каждой формы отдельный файл, а пользоваться одним.
Заранее спасибо за совет!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Воспроизведение Wav файлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]