- - PR -
C#でWin32APIを使ってPCM(WAVE)を再生するには?
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-08-15 14:19
C#初心者です。C#でWAVEを使いたいと、プログラム例を探していたらここにたどり
着きました。今使っている環境は.NET2003なのですが、このソースを実行させるためには、 (1)Win32API関数の宣言 (2)構造体の宣言 (3)外部シンボル等の定義 が必要かと思います。実際に以下で示す方法でトライしてみているのですが、(2)の wavehdr_tag.lpNextの型をどうしたらよいか、(3)のHWAVEOUT__はどの型にしたら よいか分かりません。識者の方にアドバイスいただけたらと思います。 (1)Win32API関数の宣言 [DllImport("winmm.dll")] public static extern int waveOutOpen(ref IntPtr phwi, uint uDeviceID, WAVEFORMATEX pwfx, IntPtr dwCallback, uint dwInstance, uint fdwOpen) ; [DllImport("winmm.dll")] public static extern int waveOutPrepareHeader(IntPtr hwo, WAVEHDR pwh, unit cbwh); waveOutWrite,waveOutCloseは略 (2)構造体WAVEFORMATEX,wavehdr_tagの宣言 [StructLayout(LayoutKind.Sequential)] 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)] public struct wavehdr_tag { public System.Text.StringBuilder lpData; public uint dwBufferLength; public uint dwBytesRecorded; public uint dwUser; public uint dwFlags; public uint dwLoops; public 不明 *lpNext; public uint reserved; } (参考 c++のヘッダーでは) typedef struct WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; }; typedef struct wavehdr_tag { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD dwUser; DWORD dwFlags; DWORD dwLoops; struct wavehdr_tag *lpNext; DWORD reserved; }; (3)HWAVEOUT__ HWAVEOUT__はuintで代用か?? |