Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Запуск нескольких вав-файлов.


Автор: КЕКС 28.7.2005, 12:56
Мне нужно запустить несколько звуковых файлов одновременно.
Например, есть два файла:
- "loop.wav", который я запускаю раз в 10 секунд (это его длинна) с помощью таймера.
- и "bang.wav", который я запускаю при нажатии кнопки (к примеру).

Я использовал это:
Код

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long

... и, где надо, это:

sndPlaySound FileName & ".wav", 1


Но, когда запускается фторой файл, а первый ещё играет, то первый замолкает.

Что делать? Может есть какой-то контрол, типа "Windows Media Player", только который есть на "всех" компах?
smile smile

Автор: bom 28.7.2005, 14:16
Решение не претендует на на ФАК, первое что пришло в голову и даже работает smile
Когда надо проиграть файл во время проигрывания другого файла с фоновым звуком, просто запускаешь еще одну инстанцию своей проги с путем к 2 файлу в качестве параметра:
Код

Private Sub Form_Load()
Dim sPath As String
If Len(Command) <> 0 Then
Timer1.Enabled = False
sPath = Command
sndPlaySound sPath, 2
Unload Me
End If
End Sub

Private Sub Timer1_Timer()
sndPlaySound "C:\Loop.wav", 1
End Sub

Private Sub Command1_Click()
Shell App.EXEName & ".exe " & "C:\bang.wav", vbHide
End Sub

Автор: cardinal 28.7.2005, 15:41
Цитата(bom @ 28.7.2005, 12:16)
Решение не претендует на на ФАК

А мне понравилось smile
Цитата(bom @ 28.7.2005, 12:16)
просто запускаешь еще одну инстанцию своей проги

Как я понял можно просто сделать маленькую прогу, которая тебе будет проигрывать поределенный звук... Прога эта будет отдельным потоком и таким образом играть будут несколько звуков одновременно...

Еще бы сдвиги в коде сделать, чтобы лучше читалось... smile

Автор: Voldemar2004 28.7.2005, 15:49
Цитата
Мне нужно запустить несколько звуковых файлов одновременно.
Я делал прогу для играния вав-файлов, мне надо было все наооборот запустил второй - закончил 1-ый играть, третий - закончил второй, как побочный эффект - играли 3 файла.

Автор: maxim1000 28.7.2005, 15:54
не уверен насчет ShellExecute в VB, но туда можно сразу имя файла подать
тогда даже маленькой программки не понадобится...

Автор: Voldemar2004 28.7.2005, 16:20
Цитата(maxim1000 @ 28.7.2005, 15:54)
не уверен насчет ShellExecute в VB

Но тогда же будет играть этот файл плейер по умолчанию в винде? Лучше АПИшка.

Автор: Гость_KEKC 28.7.2005, 17:50
Я пробывал давно.
Ты наверное не заметил, что программа останавливается, когда вызывает шэлл.

***
Почему все говорят Шэлл-экзекьют?! Это вам не Дэлфи! smile
***

Автор: Guest 28.7.2005, 17:52
Цитата(cardinal @ 28.7.2005, 15:41)
Прога эта будет отдельным потоком


Не правда. Почему-то нет.

Автор: Guest 28.7.2005, 18:00
Цитата(bom @ 28.7.2005, 14:16)
Решение не претендует на на ФАК

Конечно! Оно же не верное. smile

Автор: bom 28.7.2005, 18:23
Цитата(cardinal @ 28.7.2005, 15:41)
можно просто сделать маленькую прогу, которая тебе будет проигрывать поределенный звук...

Можно наверное, но в моем примере нет никаких дополнительных прог, одна и та же прога является основной (если параметр запуска пустой) и вспомогательной, которую основная вызывает рекурсивно, передавая себе же в качестве параметра адрес wav-файла на диске для проигрывания.

Цитата
Ты наверное не заметил, что программа останавливается, когда вызывает шэлл
Не заметилsmile Где останавливается?

Цитата(Guest @ 28.7.2005, 18:00)
Оно же не верное
А в чем? Если ты подразумеваешь что решение не очень изящьное, то согласен, а если что - не верное, потому что не работает, то не согласен, лично проверил, все работает. ЗЫ. Может залогинишься?



Цитата(cardinal @ 28.7.2005, 15:41)
Еще бы сдвиги в коде сделать, чтобы лучше читалось...
Учту
smile
Добавлено @ 18:31
Цитата(cardinal @ 28.7.2005, 15:41)
понял можно просто сделать маленькую прогу, которая тебе будет проигрывать поределенный звук...

Сорри, не сразу врубился что это еще одно решение задачи. Конечно можно написать еще одну маленькую прогу, обязанностью которой буде проиграть переданный ей через параметр команды файл и выгрузиться.

Автор: Voldemar2004 28.7.2005, 20:36
Собственно: лепим на форму DirListBox, кнопку, DriveListBox, FileListBox - это все для наглядности - можно и без них smile , кроме MMControl - в этом примере обязательно (Project -> Components -> Controls -> MS Multimedia Control 6.0) P.S.: свойство Pattern у FileListBox'a сделай *.wav. Для еще большей наглядности.

Код

Option Explicit

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
    File1.FileName = Dir1.Path
End Sub

Private Sub Command1_Click()

MMControl1.Notify = False
MMControl1.Wait = True
MMControl1.Shareable = False
MMControl1.DeviceType = "WaveAudio"

    MMControl1.FileName = Dir1 + "\" + File1.FileName
    MMControl1.Command = "Open"
    MMControl1.Command = "Play"
      
End Sub

КЕКС, открывай 2 файла wav smile

Скажите, зачем играть сразу 2 файла одновременно? Это же помойка из звуков, какофония.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)