2020年9月6日日曜日

C#で、もう1回、MIDI その2

  前回のその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 件のコメント:

コメントを投稿