public static extern MMSYSERROR waveOutSetPitch(WaveOutSafeHandle hwo, int dwPitch);
public static extern MMSYSERROR waveOutPrepareHeader(WaveOutSafeHandle hwo, [In, Out, MarshalAs(UnmanagedType.LPStruct)] WAVEHDR pwh, int cbwh);
public static extern MMSYSERROR waveOutRestart(WaveOutSafeHandle hwo);
public static extern MMSYSERROR waveOutMessage(WaveOutSafeHandle hwo, uint uMsg, uint dw1, uint dw2);
public static extern MMSYSERROR waveOutPause(WaveOutSafeHandle hwo);
public static extern MMSYSERROR waveOutGetPosition(WaveOutSafeHandle hwo, ref MMTIME pmmt, int cbmmt);
public static extern MMSYSERROR waveOutGetVolume(WaveOutSafeHandle hwo, out int pdwVolume);
public static extern MMSYSERROR waveOutGetPitch(WaveOutSafeHandle hwo, out int pdwPitch);
public static extern MMSYSERROR waveOutGetPlaybackRate(WaveOutSafeHandle hwo, out int pdwRate);
public static extern MMSYSERROR waveOutGetID(WaveOutSafeHandle hwo, out int puDeviceID);
public static extern MMSYSERROR waveOutBreakLoop(WaveOutSafeHandle hwo);
public static extern MMSYSERROR waveOutWrite(WaveOutSafeHandle hwo, IntPtr pwh, int cbwh);
public static extern MMSYSERROR waveOutSetVolume(WaveOutSafeHandle hwo, int dwVolume);
public virtual void Open() { int lFlags = (int)MM_CALLBACK.Function; // Use a callback function to communicate int result; IntPtr tmpHandle = new IntPtr(0); result = (int)winmm.waveOutOpen(ref tmpHandle, DeviceID, WaveFormat, fCallbackMethod, IntPtr.Zero, lFlags); DeviceHandle = new WaveOutSafeHandle(tmpHandle); fIsOpen = true; }