回答編集履歴
1
追記
test
CHANGED
@@ -8,19 +8,25 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
+
(2) ドラムが繋がったMIDI-INをオープン
|
12
|
+
|
13
|
+
(最初の回答でこれ書き忘れてました)
|
14
|
+
|
15
|
+
|
16
|
+
|
11
|
-
(
|
17
|
+
(3) Windows内臓シンセサイザーのMIDI-OUTをオープン
|
12
18
|
|
13
19
|
これは以前すでにできていますね?
|
14
20
|
|
15
21
|
|
16
22
|
|
17
|
-
(
|
23
|
+
(4) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
|
18
24
|
|
19
25
|
受信メッセージで肝心なのはNOTE ON/NOTE OFFであることはご存知ですね?
|
20
26
|
|
21
27
|
|
22
28
|
|
23
|
-
(
|
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
|
+
蛇足なコメントがあるかも知れません。その辺りはスルーしてください。
|