前回のその1では、コンソールアプリケーションでMIDIを使って音を出しました。MIDIを使うためにWindows APIを使っています。Windows APIは宣言の見た目が複雑なので、ソースコードを分割してみます。
2つのソースコード "A.cs"と"B.cs"があったとしたら、コマンドプロンプトで、
csc.exe "A.cs" "B.cs"
とすれば、合わせてコンパイルできます。
以下が今回のC#のソースコード"MidiAPI.cs"です。といっても、Windows APIの宣言を分割しただけです。Main関数がないので、実行はできません。
ソースコードはご自由にご利用ください。ただし、趣味のプログラムなので保証はありません。コメントとかも適当です。プログラミングを勉強する方のご参考にでもなれば。
------------------------------
using System;
using System.Runtime.InteropServices;
/*--------------------------------------------------*/
/* 使用するAPIの宣言 */
/*--------------------------------------------------*/
public class MidiAPI
{
[DllImport( "Winmm.dll")]
public extern static uint midiOutGetNumDevs();
[DllImport( "Winmm.dll")]
public extern static uint midiOutOpen( ref IntPtr lphmo, uint uDeviceID, uint dwCallback, uint dwCallbackInstance, uint dwFlags);
[DllImport( "Winmm.dll")]
public extern static uint midiOutClose( IntPtr hmo);
[DllImport( "Winmm.dll")]
public extern static uint midiOutShortMsg( IntPtr hmo, uint dwMsg);
[DllImport( "Winmm.dll")]
public extern static uint midiOutReset( IntPtr hmo);
public const uint MMSYSERR_NOERROR = 0;
public const uint MMSYSERR_BADDEVICEID = 2;
public const uint MMSYSERR_ALLOCATED = 4;
public const uint MMSYSERR_NOMEM = 7;
public const uint MMSYSERR_INVALPARAM = 11;
public const uint MMSYSERR_NODEVICE = 68;
public const uint MMSYSERR_INVALHANDLE = 5;
public const uint MIDIERR_STILLPLAYING = 65;
public const uint MIDI_MAPPER = 0xffffffff;
}
0 件のコメント:
コメントを投稿