- PR -

C# MCIでMIDIコマンドを直接送信したい

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-07-16 09:00
質問1
C#からMCIでMIDIコマンドをMIDIファイルを経由せず直接送信する方法を教えてください。

質問2(.NETについての質問で無くて恐縮ですが)
MIDIコマンドについて解説されている書籍、サイト等を教えてください。

質問の背景
 C#からMCIでMIDIファイルを再生する方法が分かりました。(下記参照)
しかし、この方法では再生する音楽を一旦ファイルに保存する必要があります。
MIDIファイルを介在せずメモリ上から直接送信する方法を教えてください。
 また、MIDIコマンドについての知識が不十分なので、解説サイトや書籍を
ご紹介いただけたらありがたいです。


// MIDIファイルを再生する

[DllImport("winmm.dll", CharSet = CharSet.Auto)]
private static extern int mciSendString(string text, StringBuilder buff, int buffSize, IntPtr wndCallback);
...
private void button1_Click(object sender, EventArgs e)
{
string file = "C:\\sample.mid";
string alias = "dummy";
string text = String.Format("open \"{0}\" alias {1}", file, alias);
if (mciSendString(text, null, 0, IntPtr.Zero) != 0) return;
text = String.Format("play {0}", alias);
mciSendString(text, null, 0, IntPtr.Zero);
}
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-07-16 11:13
引用:

ひろしさんの書き込み (2007-07-16 09:00) より:
質問1
C#からMCIでMIDIコマンドをMIDIファイルを経由せず直接送信する方法を教えてください。



1次情報(Microsoftの大元の情報)では確認できていないのですが、
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/mciCommand_play.html
このサイトの情報によれば、ファイル以外からは演奏できないようです。

引用:

質問2(.NETについての質問で無くて恐縮ですが)
MIDIコマンドについて解説されている書籍、サイト等を教えてください。



http://hp.vector.co.jp/authors/VA022217/tips/api/mci.html
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/mciCommand_play.html

など、その他「MCIコマンド」で検索すると大量に情報がありますが、
どういった内容を必要とされているのでしょうか?

引用:

この方法では再生する音楽を一旦ファイルに保存する必要があります。



前提がよくわからないのですが、元々midiファイルはないのですか?
どういう形式で情報を持っているのでしょうか?
#それとも1度だけファイルを読み込んでおいて、
#後はキャッシュしておきたいということですかね。

ファイルに存在するのではなく、例えば、画面上にキーボードを表示して、
そこで押された音階を鳴らすとかそういうのが目的なら、
mci系のAPIではなくmidiOut系のAPIではどうでしょうか?

http://www.codeproject.com/cs/media/MIDIToolkit.asp?df=100&forumid=34097&exp=0&select=2118481
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-07-16 23:00
ご回答ありがとうございます。
直接MIDIデバイスにコマンドを送信するには、ご指摘の通りmidiOut系を使うのが適切
なようですね。
MIDIについて理解不足なこともあって悪戦苦闘しています。
1

スキルアップ/キャリアアップ(JOB@IT)