プロが教えるわが家の防犯対策術!

質問させていただきます。
ArduinoのMIDIライブラリを使って手持ちのシンセサイザにMIDIの信号を送りたいのですがうまくMIDIの信号が送信できてていないのか信号が反映されません。
理想はシンセサイザの鍵盤を押さえ続けると1秒ごとにモジュレーションがかかるイメージだったのですがうまくいきません。
プログラムは下記のとおりです。

#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
// put your setup code here, to run once:
MIDI.begin();
int i = 0;
}
void loop() {
if(i % 2 == 0){
MIDI.sendControlChange(1, 64, 1);
}
i++;
delay(100);
}

またピッチを変更する場合もうまく動きません。

#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
// put your setup code here, to run once:
MIDI.begin();
int i = 0;
}
void loop() {
if(i % 2 == 0){
MIDI.sendPitchBend(64, 1);
}
i++;
delay(100);
}

MIDI.sendNoteOnとMIDI.sendNoteOffは動いた(指定したノートの音が鳴って止まった)ので配線の問題はないかと思います。
MIDIライブラリの使い方がおかしいのでしょうか…回答いただければ幸いです。
よろしくお願いします。

A 回答 (1件)

リファレンスをコピペすると



void MIDI_Class::sendControlChange (
byte ControlNumber,
byte ControlValue,
byte Channel
)

Parameters:
ControlNumber The controller number (0 to 127). See the detailed description here: http://www.somascape.org/midi/tech/spec.html#ctr …
ControlValue The value for the specified controller (0 to 127).
Channel The channel on which the message will be sent (1 to 16).

ControlNumberは0始まりみたいですが、操作したいコントロールは1で合ってますか?

sendNoteOnが効くということは、Channelは合っている。と仮定すると
sendPitchBendが動作しない理由がいまいち紐づきませんでした。


※sendPitchBendの第1引数PitchValueはint型なら-8192~8192が指定可能です。もしかして指定値が小さくて変化が分かりにくい?

ディレイがms指定なら、ループの条件を見る限り1秒かけてピッチが3.2%程の変化する処理です。MIDIや音楽の事は知りませんが、念の為数秒かけてピッチ変化を確認してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
改めてソースコードを見直す良い機会になりました。
また何かありましたらよろしくお願いします。

お礼日時:2016/07/04 09:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!