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);