質問するログイン新規登録

回答編集履歴

1

追記

2017/11/02 12:07

投稿

KSwordOfHaste
KSwordOfHaste

スコア18406

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
- (2) Windows内臓シンセサイザーのMIDI-OUTをオープン
9
+ (3) Windows内臓シンセサイザーのMIDI-OUTをオープン
7
10
  これは以前すでにできていますね?
8
11
 
9
- (3) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
12
+ (4) プログラムでMIDI-INからドラムからのMIDIメッセージをリアルタイムに受信
10
13
  受信メッセージで肝心なのはNOTE ON/NOTE OFFであることはご存知ですね?
11
14
 
12
- (4) ドラムから受信したNOTE ON/NOTE OFFを(2)のシンセサイザーへ中継
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
+ 蛇足なコメントがあるかも知れません。その辺りはスルーしてください。