mirror of
https://git.femboyfinancial.jp/james/lipsync.git
synced 2024-11-21 10:12:04 -08:00
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
|
|||
|
}
|
|||
|
|
|||
|
}
|