以下がソースコードです。細かい内容については、インターネットで調べてください。
本来はソースコードにはコメントを書くべきですが、簡単なプログラムなので省略します。趣味のプログラミングなのでご勘弁。
------------------------------
2017/5/4
APIの宣言に間違いを発見したため修正。
ハンドル(hmo)をuint(4byte)で宣言してました。64bit OSだとハンドルは8byteです。今までのソースコードだと、4byteの領域に8byteのデータを書いてました。
一応、64bit OS向けに修正しました。
------------------------------
using System;
using System.Runtime.InteropServices;
public static class Program
{
/*--------------------------------------------------*/
[DllImport( "Winmm.dll")]
extern static uint midiOutGetNumDevs();
[DllImport( "Winmm.dll")]
extern static uint midiOutOpen( ref long lphmo, uint uDeviceID, uint dwCallback, uint dwCallbackInstance, uint dwFlags);
[DllImport( "Winmm.dll")]
extern static uint midiOutClose( long hmo);
[DllImport( "Winmm.dll")]
extern static uint midiOutShortMsg( long hmo, uint dwMsg);
[DllImport( "Winmm.dll")]
extern static uint midiOutReset( long hmo);
[DllImport( "Kernel32.dll")]
extern static void Sleep( uint dwMilliseconds);
private const uint MMSYSERR_NOERROR = 0;
private const uint MMSYSERR_BADDEVICEID = 2;
private const uint MMSYSERR_ALLOCATED = 4;
private const uint MMSYSERR_NOMEM = 7;
private const uint MMSYSERR_INVALPARAM = 11;
private const uint MMSYSERR_NODEVICE = 68;
private const uint MMSYSERR_INVALHANDLE = 5;
private const uint MIDIERR_STILLPLAYING = 65;
private const uint MIDI_MAPPER = 0xffffffff;
/*--------------------------------------------------*/
public static void Main()
{
uint ret;
long hMidi = 0;
Console.WriteLine( "----- Midi -----");
/*--------------------------------------------------*/
ret = midiOutGetNumDevs();
Console.WriteLine( "Number of MIDI Device : " + ret);
/*--------------------------------------------------*/
ret = midiOutOpen( ref hMidi, MIDI_MAPPER, 0, 0, 0);
Console.WriteLine( "HMIDIOUT : " + hMidi);
ret = midiOutShortMsg( hMidi, 0x007f3c90);
Console.WriteLine( ret);
Sleep( 1000);
ret = midiOutShortMsg( hMidi, 0x007f3c80);
Console.WriteLine( ret);
ret = midiOutClose( hMidi);
/*--------------------------------------------------*/
Console.ReadLine();
}
}
0 件のコメント:
コメントを投稿