回答編集履歴
1
追記
answer
CHANGED
@@ -3,15 +3,38 @@
|
|
3
3
|
(1) ドラムのMIDI-OUTをPCのMIDI-INへ接続
|
4
4
|
ひょっとしたらこのアプリケーション以外で接続状態になっているのかも知れませんが・・・その辺り詳しくありません。(ハードを繋いだことがないので・・・)
|
5
5
|
|
6
|
+
(2) ドラムが繋がったMIDI-INをオープン
|
7
|
+
(最初の回答でこれ書き忘れてました)
|
8
|
+
|
6
|
-
(
|
9
|
+
(3) Windows内臓シンセサイザーのMIDI-OUTをオープン
|
7
10
|
これは以前すでにできていますね?
|
8
11
|
|
9
|
-
(
|
12
|
+
(4) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
|
10
13
|
受信メッセージで肝心なのはNOTE ON/NOTE OFFであることはご存知ですね?
|
11
14
|
|
12
|
-
(
|
15
|
+
(5) ドラムから受信したNOTE ON/NOTE OFFを(2)のシンセサイザーへ中継
|
13
16
|
つまりシンセサイザーへメッセージを流し込んでやればシンセサイザーから音がでます。
|
14
17
|
|
15
18
|
・・・ただし、キーボードと違ってドラムはちょっと難しく、ひょっとしたら「スネアをたたいたのに全然違う音が鳴る><」といったことになるかも知れません。そのあたりは悩むよりまず音を出すのが先決なのでやってみるとよいと思います。
|
16
19
|
|
17
|
-
もしうまくならないようなら、とりあえずプログラムチェンジで1番(ピアノ)を選んでおき、そこへドラムのNOTE ON/NOTE OFFを流すとテストとしてはよいと思います。
|
20
|
+
もしうまくならないようなら、とりあえずプログラムチェンジで1番(ピアノ)を選んでおき、そこへドラムのNOTE ON/NOTE OFFを流すとテストとしてはよいと思います。
|
21
|
+
|
22
|
+
---
|
23
|
+
追記:コンソールアプリケーションで作っておられるので比較的(4)はやりやすい気がしますが、プログラムをビジーループさせないように気を付けた方がよいかも知れません。
|
24
|
+
|
25
|
+
```C
|
26
|
+
int main(...) {
|
27
|
+
MIDI-OUTオープン(シンセサイザー) // (2)
|
28
|
+
MIDI-INオープン(ドラム) // (3)
|
29
|
+
MIDI-OUTへプログラムチェンジ送信 // CH#1の音色を#1に。
|
30
|
+
for (;;) { // 無限ループ
|
31
|
+
Sleep(10); // <===これを挟んでおいた方がよいかも
|
32
|
+
MIDI-INから(受信できている分を全て)読み込み // (4)
|
33
|
+
// ドラムからはCH#10のメッセージが届くかも知れません。
|
34
|
+
// うまくならないようならドラムからのMIDIメッセージのCH#を#1に変えて
|
35
|
+
// MIDI-OUTへ送信するとピアノの音がCH#1から鳴らせます。
|
36
|
+
MIDI-OUTへ送信(受信できたのを全て) // (5)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
```
|
40
|
+
蛇足なコメントがあるかも知れません。その辺りはスルーしてください。
|