Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2008, 19:45   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию PlaySound()

Когда я воспроивожу звук функцией PlaySound(); то программа останавливается и проигрывает звук, и не продолжает далее работать, пока не проиграет звук полностью. Как избежать этого? Что бы параллельно играл звук и далее работала программа?

Последний раз редактировалось Артэс; 13.07.2008 в 19:48.
Артэс вне форума Ответить с цитированием
Старый 13.07.2008, 20:13   #2
mikityak
Заблокирован
 
Регистрация: 07.06.2008
Сообщений: 15
По умолчанию

invoke PlaySound,hResWavDat,NULL,SND_ASYNC or SND_MEMORY or SND_LOOP

SND_APPLICATION The sound is played using an application-specific association.
SND_ALIAS The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.
SND_ALIAS_ID The pszSound parameter is a predefined sound identifier.
SND_ASYNC The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.
SND_FILENAME The pszSound parameter is a filename.
SND_LOOP The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. You must also specify the SND_ASYNC flag to indicate an asynchronous sound event.
SND_MEMORY A sound event's file is loaded in RAM. The parameter specified by pszSound must point to an image of a sound in memory.
SND_NODEFAULT No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.
SND_NOSTOP The specified sound event will yield to another sound event that is already playing. If a sound cannot be played because the resource needed to generate that sound is busy playing another sound, the function immediately returns FALSE without playing the requested sound.
If this flag is not specified, PlaySound attempts to stop the currently playing sound so that the device can be used to play the new sound.

SND_NOWAIT If the driver is busy, return immediately without playing the sound.
SND_PURGE Sounds are to be stopped for the calling task. If pszSound is not NULL, all instances of the specified sound are stopped. If pszSound is NULL, all sounds that are playing on behalf of the calling task are stopped.
You must also specify the instance handle to stop SND_RESOURCE events.

SND_RESOURCE The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource.
SND_SYNC Synchronous playback of a sound event. PlaySound returns after the sound event completes.

Demo MASM32: http://slil.ru/25976536

Последний раз редактировалось mikityak; 13.07.2008 в 20:17.
mikityak вне форума Ответить с цитированием
Старый 15.07.2008, 11:47   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Благодарю, но как сделать, что бы могли одновременно звучать несколько звуков?
Артэс вне форума Ответить с цитированием
Старый 15.07.2008, 16:16   #4
litrovith
Пользователь
 
Регистрация: 15.07.2008
Сообщений: 28
По умолчанию

Артэс, воспроизводите звуки в отдельном потоке:

invoke CreateThread, 0 ,0 ,addr PlaySound_Proc ,hResWavDat, 0, 0
........
PlaySound_Proc Proc sound :DWORD
invoke PlaySound,addr sound,NULL,SND_ASYNC or SND_MEMORY or SND_LOOP
invoke ExitThread, 0
PlaySound_Proc Endp
Чтото типа такого.

Последний раз редактировалось litrovith; 15.07.2008 в 16:18.
litrovith вне форума Ответить с цитированием
Старый 24.07.2008, 10:29   #5
Cricket2007
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 14
По умолчанию

А почему функция PlaySound() воспроизводит только несколько секунд? а если у меня есть целая песня в формате Wav как можно ее прослушать при помощи функции PlaySound() ?
Экспериментатор должен быть достаточно ленив, чтоб не копиться в мелочах
Cricket2007 вне форума Ответить с цитированием
Старый 25.11.2008, 02:56   #6
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Параметр pszSound является нуль терминированной строкой (последний символ строки имеет нулевой код), он определяет воспроизводимый звук. Параметр hmod используется в случае, когда звук берется из ресурса, поскольку мы этого делать не будем, то можно этот параметр задавать равным 0 или
nil.


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


SND_ASYNC - Звук воспроизводится асинхронно и функция возвращается сразу же после начала воспроизведения. Чтобы прекратить воспроизведение нужно вызвать функцию PlaySound с параметром pszSound, равным 0.

SND_LOOP - воспроизведение звука постоянно повторяется, одновременно надо установить флаг
SND_ASYNC.

SND_NOSTOP - Если заданный звук не может быть воспроизведен из-за занятости ресурсов, то функция немедленно вернет false (и звук не будет воспроизведен). Если же данный флаг не указан, то функция попытается остановить воспроизведение другого звука, чтобы освободить ресурсы.

SND_PURGE - Останавливает воспроизведение любых звуков, вызванных в данной задаче.

SND_SYNC - Синхронное воспроизведение звука события. Функция PlaySound возвращается только после окончания воспроизведения.



Важно: флаги можно комбинировать операцией
or.


Указанный параметром pszSound звук, должен подходить для установленного драйвера устройства воспроизведения волновых файлов, а также должен помещаться в доступную память.


Прервать воспроизведение звука можно выполнив оператор


PlaySound(0, 0, SND_PURGE);


или путем задания нового звука.


Например, чтобы многократно и асинхронно проиграть какой-нибудь звук, выбранный с помощью OpenDialog, можно написать такой код:


procedure TForm1.Button1Click(Sender: TObject);

var PCh: PChar;

begin

if OpenDialog1.Execute then

begin

StrPCopy(PCh,OpenDialog1.FileName);

PlaySound(Pch,0,SND_ASYNC or SND_LOOP);

end;

end;
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 19.09.2010, 20:17   #7
Ivasm
Пользователь
 
Аватар для Ivasm
 
Регистрация: 25.07.2010
Сообщений: 15
По умолчанию

a чем мп3 играть, так , чтоб типа плейсаунда было, желательно на чистом С, а то до Сплюсплюсплюс еще не дошел, ассемблер уже подзабыл, а паскал наверна не буду учить, чтоб не запутаться ))))
Ivasm вне форума Ответить с цитированием
Старый 19.09.2010, 20:18   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почитайте про MciSendString(как показала практика вполне воспроизводит)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PlaySound для 2 файлов JoanM Мультимедиа в Delphi 12 25.09.2008 17:05
PlaySound delphin100 Мультимедиа в Delphi 9 31.03.2008 08:40