回答編集履歴

1

追記

2017/11/02 12:07

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -8,19 +8,25 @@
8
8
 
9
9
 
10
10
 
11
+ (2) ドラムが繋がったMIDI-INをオープン
12
+
13
+ (最初の回答でこれ書き忘れてました)
14
+
15
+
16
+
11
- (2) Windows内臓シンセサイザーのMIDI-OUTをオープン
17
+ (3) Windows内臓シンセサイザーのMIDI-OUTをオープン
12
18
 
13
19
  これは以前すでにできていますね?
14
20
 
15
21
 
16
22
 
17
- (3) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
23
+ (4) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
18
24
 
19
25
  受信メッセージで肝心なのはNOTE ON/NOTE OFFであることはご存知ですね?
20
26
 
21
27
 
22
28
 
23
- (4) ドラムから受信したNOTE ON/NOTE OFFを(2)のシンセサイザーへ中継
29
+ (5) ドラムから受信したNOTE ON/NOTE OFFを(2)のシンセサイザーへ中継
24
30
 
25
31
  つまりシンセサイザーへメッセージを流し込んでやればシンセサイザーから音がでます。
26
32
 
@@ -31,3 +37,43 @@
31
37
 
32
38
 
33
39
  もしうまくならないようなら、とりあえずプログラムチェンジで1番(ピアノ)を選んでおき、そこへドラムのNOTE ON/NOTE OFFを流すとテストとしてはよいと思います。
40
+
41
+
42
+
43
+ ---
44
+
45
+ 追記:コンソールアプリケーションで作っておられるので比較的(4)はやりやすい気がしますが、プログラムをビジーループさせないように気を付けた方がよいかも知れません。
46
+
47
+
48
+
49
+ ```C
50
+
51
+ int main(...) {
52
+
53
+ MIDI-OUTオープン(シンセサイザー) // (2)
54
+
55
+ MIDI-INオープン(ドラム) // (3)
56
+
57
+ MIDI-OUTへプログラムチェンジ送信 // CH#1の音色を#1に。
58
+
59
+ for (;;) { // 無限ループ
60
+
61
+ Sleep(10); // <===これを挟んでおいた方がよいかも
62
+
63
+ MIDI-INから(受信できている分を全て)読み込み // (4)
64
+
65
+ // ドラムからはCH#10のメッセージが届くかも知れません。
66
+
67
+ // うまくならないようならドラムからのMIDIメッセージのCH#を#1に変えて
68
+
69
+ // MIDI-OUTへ送信するとピアノの音がCH#1から鳴らせます。
70
+
71
+ MIDI-OUTへ送信(受信できたのを全て) // (5)
72
+
73
+ }
74
+
75
+ }
76
+
77
+ ```
78
+
79
+ 蛇足なコメントがあるかも知れません。その辺りはスルーしてください。