C#でMCIを使い録音
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-05 03:21
C#でマイクの音を録音しようと思い自分なりに勉強して
http://wisdom.sakura.ne.jp/system/winapi/media/mm8.html このページを参考に書いてみました。 [DllImport("winmm.dll")]//http://msdn.microsoft.com/ja-jp/library/cc410493.aspx private extern static uint mciSendCommand( uint IDDevice, // デバイス識別子 uint uMsg, // コマンドメッセージ uint fdwCommand, // フラグ uint dwParam // パラメータを保持している構造体 ); [StructLayout(LayoutKind.Sequential)] public struct MCI_RECORD_PARMS { public uint dwCallback; public uint dwFrom; public uint dwTo; } private MCI_RECORD_PARMS mrp; [StructLayout(LayoutKind.Sequential)]//http://wisdom.sakura.ne.jp/system/winapi/media/mm3.html public struct MCI_OPEN_PARMS { public uint dwCallback; public uint wDeviceID; public string lpstrDeviceType; public string lpstrElementName; public string lpstrAlias; } private MCI_OPEN_PARMS mop; まず、定義というのか書き方はこれで大丈夫なのか不安です。 また、mciSendCommand(mop.wDeviceID , MCI_RECORD , 0 , 0); で録音なのですが、まず、第一引数のmop.wDeviceIDにどうやって マイクのデバイス(?)を格納するのかということ。 2つ目に第二引数はMCI_RECORDとなっているのですが 'MCI_RECORD' は現在のコンテキスト内に存在しません。 となってしまいます。 このAPIを扱っている方はかなり少ないと勝手に予測しておりますが ご存知の方いらっしゃいましたら教えて頂ければありがたいです。 | ||||
|
投稿日時: 2008-05-13 10:54
亀レスですが、参考までに。
構造体定義等については、それで合っていると思われます。 (詳しくは「C# Win32API 構造体」等でググってください。) > mop.wDeviceIDにどうやってマイクのデバイス(?)を格納するのか 回答:ご自身で格納はしません。mciSendCommand関数を呼び出す事で 関数側がデバイスIDを設定します。(MCI_OPEN時) > MCI_RECORDとはなんぞや。 回答:C++ではMMsystem.hにて定義されている定数です。 定義内容は「#define MCI_RECORD 0x080F」です。 つまり、0x080Fの事。C#ではご自身で定義するなり、直接0x080Fを渡すなりしてください。 > このAPIを扱っている方はかなり少ないと勝手に予測 DirectX(DirectSound)を使う方が一般的かも? | ||||
|
投稿日時: 2008-05-13 19:23
くまっちさんとてもわかりやすい解答ありがとうございます。
よく、内容が飲み込めました。 ちょっと横道にそれますが 「MCI_RECORD 0x080F」で検索(日本語のページのみ)すると このページだけしかひっかかりませんでした。 どうやって「0x080F」という情報をえられたのでしょうか? | ||||
|
投稿日時: 2008-05-13 20:47
C++においてWin32APIを使用するためには、windows.hのインクルードが必要です。
windows.hは各種ヘッダーをインクルードしています。 この各種ヘッダーの中に、MCI関連の定義ファイルとして MMsystem.hが存在します。 これらのファイルはSDKに含まれていますのでVSがインストールされているフォルダ内を 検索してみてください。 VS2005のデフォルトインストール先では
このMMsystem.hの中に前述したとおり #define MCI_RECORD 0x080Fと記述されている行がございます。 この辺はVC++の知識がないと、なかなかたどり着けないかもしれませんね。 | ||||
|
投稿日時: 2008-05-13 21:01
なんと、答えは既に僕のパソコンの中にあったのですか。
灯台下暗し。 と思い、のぞいてみたら、肝心のフォルダがなかったのです。 おそらく、無料のExpress Editionだからだとは思うのですが。 ただ、検索したら山のようにファイルがあるのでそれをダウンロードしてみます。 ありがとうございます。 |
1