16 April 2008

(Windows Mobile) C#とC++でサウンド再生

Windows Mobileで、エラーが起こった時にビープ音を鳴らそうと ::Beep(DWORD freq, DWORD millSec); 関数を使おうとすると、リンクエラーが発生する。Windows MobileのSDKにはBeep関数が無いようだ…

SDK呼び出しのための定義 C# for .NET Compact Framework 1.0

// ビープ音関数
// [DllImport("Kernel32.DLL")] // Windows XP系の場合
// private extern static bool Beep(int dwFreq, int dwDurationMilliSec);

// システムサウンド再生関数
// [DllImport("User32.DLL")] // Windows XP系の場合
[DllImport("coredll.dll")] // Windows CEの場合
private extern static bool MessageBeep(MessageBeepType Type);

public enum MessageBeepType : int
{
SimpleBeep = -1,
MB_OK = 0x00,
MB_ICONHAND = 0x10,
MB_ICONQUESTION = 0x20,
MB_ICONEXCLAMATION = 0x30,
MB_ICONASTERISK = 0x40,
}


// Waveファイル再生関数
// [System.Runtime.InteropServices.DllImport("winmm.dll")] // Windows XP系の場合
[System.Runtime.InteropServices.DllImport("coredll.dll")] // Windows CEの場合
private static extern bool PlaySound(string pszSound, IntPtr hmod, PlaySoundFlags fdwSound);

public enum PlaySoundFlags : int
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004,
SND_PURGE = 0x0040,
SND_APPLICATION = 0x0080
}

サウンド再生 C# for .NET Compact Framework 1.0

// システムサウンドの再生
MessageBeep(MessageBeepType.MB_ICONHAND);

// 任意のWaveファイルの再生
PlaySound("\\Windows\\Infbeg.wav", IntPtr.Zero, PlaySoundFlags.SND_FILENAME | PlaySoundFlags.SND_ASYNC);


同じ事を eMbedded Visual C++ ではとても簡単に出来る

サウンド再生 eMbedded Visual C++

// システムサウンドの再生
::MessageBeep(MB_ICONHAND);

// 任意のWaveファイルの再生
::PlaySound(_T("\\Windows\\Infbeg.wav"), NULL, SND_FILENAME | SND_ASYNC);