프로그래밍/델파이

PlaySound 함수 이용 소리 내기.

채윤아빠 2007. 12. 21. 23:42
728x90
반응형
효과 소리를 내기 위해서 PlaySound API를 이용합니다.
function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;

MMSystem 유닛에 위와 같이 정의되어 있습니다.

첫번재 파라미터 pszSound 는 효과 소리 파일에 대한 별명 / 리소스 아이디  / 파일명이 옵니다.
두번째 파라미터 hmod 는 별명이나 파일명인 경우, 0을 넣고 리소스인 경우 해당 리소스인 인스턴스 핸들을 넘겨줍니다.
세번째 파라미터 fdwSound에는 다음과 같은 파라미터가 올 수 있습니다.

  SND_SYNC            = $0000;  { play synchronously (default) }
  SND_ASYNC           = $0001;  { play asynchronously }
  SND_NODEFAULT       = $0002;  { don't use default sound }
  SND_MEMORY          = $0004;  { lpszSoundName points to a memory file }
  SND_LOOP            = $0008;  { loop the sound until next sndPlaySound }
  SND_NOSTOP          = $0010;  { don't stop any currently playing sound }

  SND_NOWAIT          = $00002000;  { don't wait if the driver is busy }
  SND_ALIAS           = $00010000;  { name is a registry alias }
  SND_ALIAS_ID        = $00110000;  { alias is a predefined ID }
  SND_FILENAME        = $00020000;  { name is file name }
  SND_RESOURCE        = $00040004;  { name is resource name or atom }
  SND_PURGE           = $0040;      { purge non-static events for task }
  SND_APPLICATION     = $0080;      { look for application specific association }

참고로 SND_ALIAS, FILENAME, SND_RESOURCE 는 서로 배타적으로 동작하는 플래그로 함께 사용하면 안됩니다. 만약, 위 플래그들 중 하나를 명시적으로 지정하지 않은 경우, pszSound 파라미터는 별명(SND_ALIAS)으로 먼저 인식되어 레지스트리에 등록된 소리를 찾고 해당 별명이 없을 경우, 파일명으로 생각하고 해당 파일을 연주하게 됩니다.

SND_NODEFAULT 플래그는 소리를 연주할 수 없을 때 경고음을 내지 않도록 합니다.

SND_ALIAS를 이용할 경우, 다음과 같은 별명을 이용하여 윈도우 기본 소리를 연주할 수 있습니다.

SystemDefault - 기본 경고음
SystemAsterisk - 일반 메시지
SystemExclamation - 경고 메시지
SystemHand - 시스템 오류
SystemQuestion - 질문
SystemStart - 시스템 시작
SystemExit - 시스템 종료


[[ 사용예 ]]

PlaySound('SystemAsterisk',0,SND_ASYNC or SND_ALIAS);
// 일반 메시지음을 비동기모드로 연주
PlaySound('Test.wav', 0, SND_ASYNC);
// Test.wav 파일을 비동기모드로 연주
PlaySound('C:\Sound\Test.wav', 0, SND_ASYNC or SND_LOOP);
// C:\Sound 의 Test.wav 파일을 비동기모드로 반복해서 연주
PlaySound('SystemStart', 0, SND_ASYNC or SND_ALIAS);
// "시스템 시작" 사운드를 비동기모드로 연주
PlaySound(MAKEINTRESOURCE(IDR_WAVE), g_hInst, SND_RESOURCE or SND_ASYNC);
// 리소스에서 IDR_WAVE1 로 지정된 사운드파일을 비동기 모드로 연주