406 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			406 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*
 | |
|  * windows.cs
 | |
|  * Copyright (c) 2009 kbinani
 | |
|  *
 | |
|  * This file is part of bocoree.
 | |
|  *
 | |
|  * bocoree is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the BSD License.
 | |
|  *
 | |
|  * bocoree is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | |
|  */
 | |
| using System;
 | |
| using System.Runtime.InteropServices;
 | |
| 
 | |
| namespace bocoree {
 | |
| 
 | |
|     using MMRESULT = System.UInt32;
 | |
|     using HMIDIIN = System.Int32;
 | |
|     using DWORD = System.UInt32;
 | |
|     using UINT = System.UInt32;
 | |
|     using WORD = System.UInt16;
 | |
|     using BYTE = System.Byte;
 | |
| 
 | |
|     public delegate void delegateWaveOutProc( IntPtr hwo, uint uMsg, uint dwInstance, uint dwParam1, uint dwParam2 );
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, Pack = 1 )]
 | |
|     public struct JOYINFO {
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wXpos;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wYpos;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wZpos;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wButtons;
 | |
|     }
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1 )]
 | |
|     public struct JOYCAPSW {
 | |
|         const int MAXPNAMELEN = 32;
 | |
|         const int MAX_JOYSTICKOEMVXDNAME = 260;
 | |
|         [MarshalAs( UnmanagedType.U2 )]
 | |
|         public ushort wMid;
 | |
|         [MarshalAs( UnmanagedType.U2 )]
 | |
|         public ushort wPid;
 | |
|         [MarshalAs( UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN )]
 | |
|         public string szPname;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wXmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wXmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wYmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wYmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wZmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wZmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wNumButtons;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wPeriodMin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wPeriodMax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wRmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wRmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wUmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wUmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wVmin;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wVmax;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wCaps;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wMaxAxes;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wNumAxes;
 | |
|         [MarshalAs( UnmanagedType.U4 )]
 | |
|         public uint wMaxButtons;
 | |
|         [MarshalAs( UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN )]
 | |
|         public string szRegKey;
 | |
|         [MarshalAs( UnmanagedType.ByValTStr, SizeConst = MAX_JOYSTICKOEMVXDNAME )]
 | |
|         public string szOEMVxD;
 | |
|     }
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, Pack = 1 )]
 | |
|     public struct JOYINFOEX {
 | |
|         public uint dwSize;
 | |
|         public uint dwFlags;
 | |
|         public uint dwXpos;
 | |
|         public uint dwYpos;
 | |
|         public uint dwZpos;
 | |
|         public uint dwRpos;
 | |
|         public uint dwUpos;
 | |
|         public uint dwVpos;
 | |
|         public uint dwButtons;
 | |
|         public uint dwButtonNumber;
 | |
|         public uint dwPOV;
 | |
|         public uint dwReserved1;
 | |
|         public uint dwReserved2;
 | |
|     }
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, Pack = 1 )]
 | |
|     public struct WAVEFORMATEX {
 | |
|         public ushort wFormatTag;
 | |
|         public ushort nChannels;
 | |
|         public uint nSamplesPerSec;
 | |
|         public uint nAvgBytesPerSec;
 | |
|         public ushort nBlockAlign;
 | |
|         public ushort wBitsPerSample;
 | |
|         public ushort cbSize;
 | |
|     }
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, Pack = 1 )]
 | |
|     public struct WAVEHDR {
 | |
|         public IntPtr lpData; // pointer to locked data buffer
 | |
|         public uint dwBufferLength; // length of data buffer
 | |
|         public uint dwBytesRecorded; // used for input only
 | |
|         public IntPtr dwUser; // for client's use
 | |
|         public uint dwFlags; // assorted flags (see defines)
 | |
|         public uint dwLoops; // loop control counter
 | |
|         public IntPtr lpNext; // PWaveHdr, reserved for driver
 | |
|         public uint reserved; // reserved for driver
 | |
|     }
 | |
| 
 | |
|     /*typedef struct mmtime_tag
 | |
| {
 | |
|     UINT            wType;      // indicates the contents of the union
 | |
|     union
 | |
|     {
 | |
|         DWORD       ms;         // milliseconds
 | |
|         DWORD       sample;     // samples
 | |
|         DWORD       cb;         // byte count
 | |
|         DWORD       ticks;      // ticks in MIDI stream
 | |
| 
 | |
|         // SMPTE 
 | |
|         struct
 | |
|         {
 | |
|             BYTE    hour;       // hours
 | |
|             BYTE    min;        // minutes
 | |
|             BYTE    sec;        // seconds
 | |
|             BYTE    frame;      // frames 
 | |
|             BYTE    fps;        // frames per second
 | |
|             BYTE    dummy;      // pad
 | |
| #ifdef _WIN32
 | |
|             BYTE    pad[2];
 | |
| #endif
 | |
|         } smpte;
 | |
| 
 | |
|         // MIDI
 | |
|         struct
 | |
|         {
 | |
|             DWORD songptrpos;   // song pointer position 
 | |
|         } midi;
 | |
|     } u;
 | |
| }*/
 | |
|     [StructLayout( LayoutKind.Explicit )]
 | |
|     public struct MMTIME {
 | |
|         [FieldOffset( 0 )]
 | |
|         public UInt32 wType;
 | |
|         [FieldOffset( 4 )]
 | |
|         public UInt32 ms;
 | |
|         [FieldOffset( 4 )]
 | |
|         public UInt32 sample;
 | |
|         [FieldOffset( 4 )]
 | |
|         public UInt32 cb;
 | |
|         [FieldOffset( 4 )]
 | |
|         public UInt32 ticks;
 | |
|         [FieldOffset( 4 )]
 | |
|         public Byte smpteHour;
 | |
|         [FieldOffset( 5 )]
 | |
|         public Byte smpteMin;
 | |
|         [FieldOffset( 6 )]
 | |
|         public Byte smpteSec;
 | |
|         [FieldOffset( 7 )]
 | |
|         public Byte smpteFrame;
 | |
|         [FieldOffset( 8 )]
 | |
|         public Byte smpteFps;
 | |
|         [FieldOffset( 9 )]
 | |
|         public Byte smpteDummy;
 | |
|         [FieldOffset( 10 )]
 | |
|         public Byte smptePad0;
 | |
|         [FieldOffset( 11 )]
 | |
|         public Byte smptePad1;
 | |
|         [FieldOffset( 4 )]
 | |
|         public UInt32 midiSongPtrPos;
 | |
|     }
 | |
|     
 | |
|     [StructLayout(LayoutKind.Sequential, Pack = 1 )]
 | |
|     public unsafe struct _MMTIME {
 | |
|         public UINT wType;
 | |
|         byte b1;
 | |
|         byte b2;
 | |
|         byte b3;
 | |
|         byte b4;
 | |
|         byte b5;
 | |
|         byte b6;
 | |
|         byte b7;
 | |
|         byte b8;
 | |
| 
 | |
|         public struct SMPTE {
 | |
|             public BYTE    hour;       // hours
 | |
|             public BYTE    min;        // minutes
 | |
|             public BYTE    sec;        // seconds
 | |
|             public BYTE    frame;      // frames 
 | |
|             public BYTE    fps;        // frames per second
 | |
|             public BYTE    dummy;      // pad
 | |
|             public fixed BYTE    pad[2];
 | |
|         }
 | |
| 
 | |
|         public SMPTE smpte {
 | |
|             get {
 | |
|                 SMPTE ret = new SMPTE();
 | |
|                 ret.hour = b1;
 | |
|                 ret.min = b2;
 | |
|                 ret.sec = b3;
 | |
|                 ret.frame = b4;
 | |
|                 ret.fps = b5;
 | |
|                 ret.dummy = b6;
 | |
|                 ret.pad[0] = b7;
 | |
|                 ret.pad[1] = b8;
 | |
|                 return ret;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public struct MIDI {
 | |
|             public DWORD songptrpos;   // song pointer position 
 | |
|         }
 | |
| 
 | |
|         public MIDI midi {
 | |
|             get {
 | |
|                 MIDI ret = new MIDI();
 | |
|                 ret.songptrpos = ms;
 | |
|                 return ret;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public uint ms {
 | |
|             get {
 | |
|                 return (uint)b1 | (uint)(b2 << 8) | (uint)(b3 << 16) | (uint)(b4 << 32);
 | |
|             }
 | |
|         }
 | |
|         public uint sample {
 | |
|             get {
 | |
|                 return ms;
 | |
|             }
 | |
|         }
 | |
|         public uint cb {
 | |
|             get {
 | |
|                 return ms;
 | |
|             }
 | |
|         }
 | |
|         public uint ticks {
 | |
|             get {
 | |
|                 return ms;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi )]
 | |
|     public struct MIDIINCAPS {
 | |
|         public ushort wMid;
 | |
|         public ushort wPid;
 | |
|         public uint vDriverVersion;
 | |
|         [MarshalAs( UnmanagedType.ByValTStr, SizeConst = windows.MAXPNAMELEN )]
 | |
|         public string szPname;
 | |
|         public uint dwSupport;
 | |
| 
 | |
|         public override string ToString() {
 | |
|             return szPname;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static partial class windows {
 | |
|         public const uint JOYERR_NOERROR = 0;
 | |
|         public const ushort JOY_RETURNX = 0x00000001;
 | |
|         public const ushort JOY_RETURNY = 0x00000002;
 | |
|         public const ushort JOY_RETURNZ = 0x00000004;
 | |
|         public const ushort JOY_RETURNR = 0x00000008;
 | |
|         public const ushort JOY_RETURNU = 0x00000010;
 | |
|         public const ushort JOY_RETURNV = 0x00000020;
 | |
|         public const ushort JOY_RETURNPOV = 0x00000040;
 | |
|         public const ushort JOY_RETURNBUTTONS = 0x00000080;
 | |
|         public const ushort JOY_RETURNRAWDATA = 0x00000100;
 | |
|         public const ushort JOY_RETURNPOVCTS = 0x00000200;
 | |
|         public const ushort JOY_RETURNCENTERED = 0x00000400;
 | |
|         public const ushort JOY_USEDEADZONE = 0x00000800;
 | |
|         public const ushort JOY_RETURNALL = (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ |
 | |
|                                  JOY_RETURNR | JOY_RETURNU | JOY_RETURNV |
 | |
|                                  JOY_RETURNPOV | JOY_RETURNBUTTONS);
 | |
| 
 | |
|         public const ushort MM_MCINOTIFY = 0x3B9;          /* MCI */
 | |
| 
 | |
|         public const ushort MM_WOM_OPEN = 0x3BB;         /* waveform output */
 | |
|         public const ushort MM_WOM_CLOSE = 0x3BC;
 | |
|         public const ushort MM_WOM_DONE = 0x3BD;
 | |
| 
 | |
|         public const ushort MM_WIM_OPEN = 0x3BE;        /* waveform input */
 | |
|         public const ushort MM_WIM_CLOSE = 0x3BF;
 | |
|         public const ushort MM_WIM_DATA = 0x3C0;
 | |
| 
 | |
|         public const ushort MM_MIM_OPEN = 0x3C1;        /* MIDI input */
 | |
|         public const ushort MM_MIM_CLOSE = 0x3C2;
 | |
|         public const ushort MM_MIM_DATA = 0x3C3;
 | |
|         public const ushort MM_MIM_LONGDATA = 0x3C4;
 | |
|         public const ushort MM_MIM_ERROR = 0x3C5;
 | |
|         public const ushort MM_MIM_LONGERROR = 0x3C6;
 | |
| 
 | |
|         public const ushort MM_MOM_OPEN = 0x3C7;         /* MIDI output */
 | |
|         public const ushort MM_MOM_CLOSE = 0x3C8;
 | |
|         public const ushort MM_MOM_DONE = 0x3C9;
 | |
| 
 | |
|         public const int WAVE_MAPPER = -1;
 | |
| 
 | |
|         public const int WAVE_FORMAT_PCM = 1;
 | |
| 
 | |
|         public const int CALLBACK_TYPEMASK = 0x00070000;    /* callback type mask */
 | |
|         public const int CALLBACK_NULL = 0x00000000;    /* no callback */
 | |
|         public const int CALLBACK_WINDOW = 0x00010000;    /* dwCallback is a HWND */
 | |
|         public const int CALLBACK_TASK = 0x00020000;    /* dwCallback is a HTASK */
 | |
|         public const int CALLBACK_FUNCTION = 0x00030000;    /* dwCallback is a FARPROC */
 | |
|         public const int CALLBACK_THREAD = (CALLBACK_TASK);/* thread ID replaces 16 bit task */
 | |
|         public const int CALLBACK_EVENT = 0x00050000;    /* dwCallback is an EVENT Handle */
 | |
| 
 | |
|         public const int WHDR_DONE = 0x00000001;  /* done bit */
 | |
|         public const int WHDR_PREPARED = 0x00000002;  /* set if this header has been prepared */
 | |
|         public const int WHDR_BEGINLOOP = 0x00000004;  /* loop start block */
 | |
|         public const int WHDR_ENDLOOP = 0x00000008;  /* loop end block */
 | |
|         public const int WHDR_INQUEUE = 0x00000010;  /* reserved for driver */
 | |
| 
 | |
|         public const int TIME_MS    =     0x0001;  /* time in milliseconds */
 | |
|         public const int TIME_SAMPLES=    0x0002;  /* number of wave samples */
 | |
|         public const int TIME_BYTES=      0x0004;  /* current byte offset */
 | |
|         public const int TIME_SMPTE =     0x0008;  /* SMPTE time */
 | |
|         public const int TIME_MIDI   =    0x0010;  /* MIDI time */
 | |
|         public const int TIME_TICKS = 0x0020;  /* Ticks within MIDI stream */
 | |
| 
 | |
|         public const int MAXPNAMELEN = 32;
 | |
|         public const int MAX_JOYSTICKOEMVXDNAME = 260;
 | |
| 
 | |
|         #region midi
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static extern UINT midiInGetNumDevs();
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static unsafe extern MMRESULT midiInOpen( HMIDIIN* lphMidiIn,
 | |
|                                                          UINT uDeviceID,
 | |
|                                                          DWORD dwCallback,
 | |
|                                                          DWORD dwCallbackInstance,
 | |
|                                                          DWORD dwFlags );
 | |
|         #endregion
 | |
| 
 | |
|         #region joy
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         [return: MarshalAs( UnmanagedType.U4 )]
 | |
|         public static extern uint joyGetNumDevs();
 | |
| 
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static extern uint joyGetPos( uint uJoyID, ref JOYINFO pji );
 | |
| 
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static extern uint joyGetDevCapsW( uint uJoyID, ref JOYCAPSW pjc, uint cbjc );
 | |
| 
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static extern uint joyGetPosEx( uint uJoyID, ref JOYINFOEX pji );
 | |
|         #endregion
 | |
| 
 | |
|         #region wave
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         public static extern uint waveOutWrite( IntPtr hwo, ref WAVEHDR pwh, uint cbwh );
 | |
|         [DllImport( "winmm.dll" )]
 | |
|         //[return: MarshalAs(UnmanagedType.U4)]
 | |
|         public static extern uint waveOutOpen( ref IntPtr hWaveOut,
 | |
|                                                int uDeviceID,
 | |
|                                                ref WAVEFORMATEX lpFormat,
 | |
|                                                delegateWaveOutProc dwCallback,
 | |
|                                                IntPtr dwInstance,
 | |
|                                                uint dwFlags );
 | |
|         //public static extern uint waveOutOpen( ref IntPtr phwo, UINT uDeviceID, ref WAVEFORMATEX pwfx, delegateWaveOutProc dwCallback, IntPtr dwInstance, uint fdwOpen );
 | |
|         [DllImport("winmm.dll")]
 | |
|         public static extern uint waveOutPrepareHeader( IntPtr hwo, ref WAVEHDR pwh, UINT cbwh);
 | |
|         [DllImport( "winmm.dll")]
 | |
|         public static extern uint waveOutGetPosition( IntPtr hwo, ref MMTIME pmmt, UINT cbmmt);
 | |
|         [DllImport("winmm.dll")]
 | |
|         public static extern uint waveOutReset( IntPtr hwo);
 | |
|         [DllImport("winmm.dll")]
 | |
|         public static extern  uint  waveOutUnprepareHeader( IntPtr hwo, ref WAVEHDR pwh, UINT cbwh);
 | |
|         [DllImport("winmm.dll")]
 | |
|         public static extern uint waveOutClose( IntPtr hwo);
 | |
|         #endregion
 | |
| 
 | |
|         #region mci
 | |
|         [DllImport( "winmm.dll", CharSet = CharSet.Ansi )]
 | |
|         public static extern bool mciGetErrorStringA( uint mcierr, [MarshalAs( UnmanagedType.LPStr )] string pszText, UINT cchText );
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
| }
 |