Как в API воспроизвести одновременно больше одного звука?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Как в API воспроизвести одновременно больше одного звука?

Сообщение SGO » 10.02.2007 (Сб) 11:28

Я делаю звук так:
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Call PlaySound("ляляля.wav", 0, 1)
Так как же мне "примикшировать" к этому ещё один звук поверх, чтоб он пе прерывал первый? (в поиске не нашёл).

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 10.02.2007 (Сб) 12:34

Public Const SND_NOSTOP = &H10 ' don't stop any currently playing sound

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 10.02.2007 (Сб) 12:40

и куда потом эту константу?

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 10.02.2007 (Сб) 12:43

Private Const SND_NOSTOP = &H10 ' don't stop any currently playing sound
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

'
Call PlaySound("ляляля.wav", 0, SND_ASYNC Or SND_NOSTOP)
'

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 07.09.2007 (Пт) 13:57

Доброго времени суток всем!
Ну, допустим, что я прописал, как написал EUGY:
Private Const SND_NOSTOP = &H10 ' don't stop any currently playing sound
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long


И делаю вызов 1-го файла:
Call PlaySound("ляляля1.wav", 0, SND_ASYNC Or SND_NOSTOP)
Через некоторое время - 2-го:
Call PlaySound("ляляля2.wav", 0, SND_ASYNC Or SND_NOSTOP)
Тогда просто глохнет файл 1, а когда 2-й закончится, то первый будет продолжен. Вот в чем фишка получается :(. Как тогда исправить это?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 07.09.2007 (Пт) 14:45

DirectSound ?
label:
cli
jmp label

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 07.09.2007 (Пт) 18:10

iGrok
Немного не понял...
Неужели через WinAPI нельзя?

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 08.09.2007 (Сб) 11:00

Ну неужели никто не знает можно ли посредством WinAPI "смикшировать" несколько звуков в процессе работы проги?
Господи, прошу, дай мне сорсы мира, я столько всего хочу переделать!

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 10.09.2007 (Пн) 8:35

Вот, нашел код, может у кого возникнут подобные вопросы, чтоб также не мучался :). Поддерживается как wav, так и mp3.
Код: Выделить всё
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

И вызов:
Код: Выделить всё
Call mciExecute("play " & App.Path & "\1.mp3")

Ну это сколько надо раз (с соотв. именами файлов), только нужно учитывать, чтоб в пути пробелов не было (или использовать функцию для трансформации пути к файлу в DOS-формат)
А для остановки:
Код: Выделить всё
Call mciExecute("stop " & App.Path & "\1.mp3")


Все, думаю, тему можно закрыть
Господи, прошу, дай мне сорсы мира, я столько всего хочу переделать!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 11.09.2007 (Вт) 10:51

Причем есть подозрение, что и пробелы в имени файла вполне допустимы, при условии, что путь и имя файла будет заключено в кавычки в строке...
"stop " & chr(34) & App.Path & "\1.mp3" & chr(34)
label:
cli
jmp label

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 14.09.2007 (Пт) 11:46

iGrok
Нет, попробовал, не прокатило, надо переводить в ДОС-формат, т.к. она еще и длинные имена каталогов и файлов не берет (насчет кириллицы не пробовал)

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 14.09.2007 (Пт) 12:10

Можно воспользоваться этой функцией:
Код: Выделить всё
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long


Код: Выделить всё
mciSendString "open """ & FileName & """ alias mymusic", vbNullString, 0, 0
mciSendString "play mymusic", vbNullString, 0, 0
mciSendString "stop mymusic", vbNullString, 0, 0
mciSendString "close mymusic", vbNullString, 0, 0


Можно использовать без "alias".
Путь пишется в двойных кавычках, без разницы какой.

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 14.09.2007 (Пт) 21:17

HiSER
О, а за этот код спасибо :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, YaCy [Bot], Yandex-бот и гости: 43

    TopList