Форум — Ответы     (  К темам )
 ?  DDV: Как воспроизвести wav из exe при помощи PlaySound? (13-12-2002 16:52:55)
Не могу воспроизвести звук PlaySound'ом. Какие надо передать в него параметры для воспроизведения wav из exe?
 Павел (13-12-2002 18:08:46)
#include <mmsystem.h>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
PlaySound("C:\\ProgramFiles\\NetMeeting\\TestSnd.wav" ,NULL,SND_FILENAME|SND_ASYNC);
}
 Alex (13-12-2002 18:47:46)
BOOL PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdwSound)

Функция PlaySound API Windows воспроизводит звук указанного волнового файла,
или звука системного события, или звука из ресурса.
Параметр pszSound представляет собой строку с нулевым символом в конце и
определяет воспроизводимый звук.
В зависимости от значений флага fdwSound (SND_FILENAME, SND_ALIAS или SND_RESOURCE)
параметр pszSound может определять имя волнового файла, псевдоним системного события
или идентификатор ресурса. Если ни один из этих флагов не указан, функция ищет
в реестре Windows или в файле WIN.INI указанное имя звука.
Если звук найден, то он воспроизводится. Если звук не найден, то параметр pszSound
интерпретируется как имя файла.
Звук, указанный параметром pszSound, должен помещаться в доступную память и должен
подходить для установленного драйвера устройства воспроизведения волновых файлов.
Функция PlaySound ищет файл звука в следующих каталогах: текущем, каталоге Windows,
системном каталоге Windows, каталогах, перечисленных в переменной среды PATH,
в списке каталогов, предоставляемых сетью.
Если указанный звук не находится, функция PlaySound воспроизводит системный звук по умолчанию.
Если функция не может найти и его, то воспроизведения не будет, а вернется значение false.
Если параметр pszSound задан равным 0, то воспроизведение любого волнового файла прерывается.
Для прерывания воспроизведения звука, не связанного с волновым файлом, надо указывать
SND_PURGE в параметре fdwSound.
Параметр hmod используется только при параметре fdwSound равном SND_RESOURCE.
В этом случае hmod является дескриптором выполняемого файла, содержащего ресурс,
который должен загружаться. В противном случае значение hmod задается равным 0.

Параметр fdwSound задает флаги воспроизведения звука.
Флаги могут комбинироваться друг с другом операцией ИЛИ "|".
Возможны следующие значения параметра:

SND_APPLICATION Звук воспроизводится с использованием установок приложения.
SND_ALIAS Параметр pszSound определяет псевдоним системного события в реестре Windows
или в файле WIN.INI. Нельзя использовать совместно с SND_FILENAME и SND_RESOURCE.
SND_ALIAS_ID Параметр szSound является предопределенным идентификатором звука.
SND_ASYNC Звук воспроизводится асинхронно и функция PlaySound возвращается немедленно
после начала воспроизведения. Чтобы прекратить асинхронное воспроизведение
волнового файла, надо вызвать PlaySound с параметром pszSound, равным 0.
SND_FILENAME Параметр pszSound является именем файла.
SND_LOOP Воспроизведение звука постоянно повторяется, пока не вызовется PlaySound
с параметром pszSound, равным 0. Одновременно надо указать флаг SND_ASYNC
асинхронного воспроизведения звука.
SND_MEMORY Файл звука события загружен в память. В этом случае параметр pszSound
должен указывать на образ звука в памяти.
SND_NODEFAULT Звук события, кроме звука по умолчанию. Если указанный звук не найден,
PlaySound вернется, не воспроизводя звук по умолчанию.
SND_NOSTOP Если заданный звук не может быть воспроизведен, поскольку ресурсы,
необходимые для воспроизведения, заняты воспроизведением другого звука,
функция PlaySound немедленно вернет false, не воспроизводя заданного звука.
Если данный флаг не указан, функция PlaySound пытается остановит воспроизведение
другого звука, чтобы устройство могло быть использовано для воспроизведения
нового звука.
SND_NOWAIT Если драйвер занят, функция сразу вернется без воспроизведения заданного звука.
SND_PURGE Останавливается воспроизведение любых звуков, вызванных в данной задаче.
Если pszSound не 0, останавливаются все экземпляры указанного звука.
Если pszSound равен 0, то останавливаются все звуки, связанные с данной задачей.
Отдельно надо указать дескриптор для остановки событий SND_RESOURCE.
SND_RESOURCE Параметр pszSound является идентификатором ресурса. Параметр hmod должен
указывать на источник ресурса.
SND_SYNC Синхронное воспроизведение звука события. Функция PlaySound возвращается
только после окончания воспроизведения.

Функция PlaySound при успешном выполнении возвращается true, в противном случае — false.
Приведем примеры использования функции PlaySound. Не забудьте, что для ее использования
в файл должна быть включена директива

#include < mmsystem.hpp>

PlaySound("c:\\windows\\media\\Звук Microsoft.wav", 0,SND_ASYNC);

воспроизводит асинхронно и однократно стандартный звук Microsoft,
который вы обычно можете слышать при открытии Windows.

PlaySound('SystemStart',0,SND_ASYNC);

воспроизведет звук (возможно, тот же самый), установленный как звук при старте системы,
по его системному псевдониму.

PlaySound("c:\\windows\\media\\Звук Microsoft.wav", 0,SND_ASYNC | SND_LOOP);

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

PlaySound(0,0, SND_PURGE);

Полезно также ввести аналогичный оператор в обработчик события формы OnCloseQuery.