processingとMIDIデバイスの同期ができません
[追記]
processing3.4.5で実行してみましたところ、添付した画像のようにvoid noteOn(int channel, int pitch, int velocity)内のプログラムが実行されました。大学側がprocessing3.4.5の使用の許可がありましたので、1の問題は解決されたことになります。私の回答に少しでも時間を使ってくださった方々に感謝申し上げます。ありがとうございました。
私は9月の中旬にある大学の発表に向けて、電子ドラムとパソコンをMIDIで接続してプログラムを作りたいと思っております。電子ドラムでたたくことをマウスのクリックにみたて、太鼓の達人のような音楽ゲームやVJを作りたいと思っております。
扱う電子ドラムはyamahaのDD75で扱うMIDIインターフェースはMIDIMATE eXです。
そのために、私はまず電子ドラムでの出力データをprocessing4で標準出力させたいと考えています。
現段階ではprocessing上でMIDIデバイスを使用するために必要なMidiBusのインストールは完了し、pocketMIDIというアプリケーションを使用して電子ドラムをたたくとPCに信号が入力されていることが確認できています。以下はその信号が出ている時の画像です。
参照ページに記載されているプログラムを参考にして、標準出力をするプログラムを以下のように書きました。出力した時の画像も添付しておきます。
import themidibus.*;
MidiBus myBus; // MidiBusインスタンス
void setup() {
size(300, 300); //ウインドウのサイズ
background(0); //ウインドウ背景の色
MidiBus.list(); //MIDIデバイスのリストを表示
myBus = new MidiBus(new java.lang.Object(), 2, 5); //MIDIデバイスのinput,outputを指定
}
void draw() {
}
void noteOn(int channel, int pitch, int velocity) {
// Receive a noteOn
println();
println("Note On:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void noteOff(int channel, int pitch, int velocity) {
// Receive a noteOff
println();
println("Note Off:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void controlChange(int channel, int number, int value) {
println("Control Change Received");
println("Channel: " + channel);
println("Number: " + number);
println("Value: " + value);
参照ページ:https://github.com/sparks/themidibus/blob/master/examples/Basic/Basic.pde
問題点として以下の3点があります。
1.void controllerChange(int channel, int number,int value)、void noteOn(int channel, int pitch, int velocity)、void noteOff(int channel, int pitch, int velocity)のコードが読み込まれない。エラーは出ていないが、関数内に標準出力のコードを入力しても標準出力されない。
2.そもそも、上記の引数であるchannel,number,value,pitch,velcityが扱う電子ドラムDD75とどう関係しているのかわからない。
3.アプリケーションpocketMIDIの使用方法が不明。音の出力は分かるが、表示の意味が分からない。
そこで以下の三つについてお伺いしたいです。
1.void controllerChange(int channel, int number,int value)、void noteOn(int channel, int pitch, int velocity)、void noteOff(int channel, int pitch, int velocity)のコードが読み込まれない理由は何だと考えられますか?
(追記)
myBus = new MidiBus(new java.lang.Object(), 2, 5);の部分を
myBus = new MidiBus();
myBus.registerParent(this);
myBus.addInput(2);
myBus.addOutput(5);
に書き換える方法を試してみました。エラーメッセージは表示されませんが電子ドラムを叩いても信号を出力しません。
また、inPutの指定番号を1、outPutの指定番号を4にした場合、以下のような表示がされてしまいます。
2.void controllerChange(int channel, int number, int value) 、void noteOn(int channel, int pitch, int velocity)、void noteOff(int channel, int pitch, int velocity)のコードが意味する内容は何ですか?MIDIの知識不足のためchannel,number,value,pitch,velocityについてもよく分かっておりません。(追記)pitchは音の高さ、velocityは音の大きさを表すことがわかりました。
3.pocket MIDI を利用して表示された文字は何を意味しますか?上のchannel,number,valuesに対応しているのでしょうか?
(追記)pocket midiのfile>preference>detailsで詳細を表示することができました。
ですが、channel,number,valuesに対応しているかどうかは分かっておりません。
回答をよろしくお願いします。
補足情報
電子ドラム(DD75)の取扱説明書
https://jp.yamaha.com/files/download/other_assets/6/892376/dd75_ja_om_c0.pdf
DD75のMIDI同期リファレンス
https://jp.yamaha.com/files/download/other_assets/5/892625/dd75_ja_mr_a0_web.pdf
pocketMIDIの説明ページ
https://www.morson.jp/pocketmidi-webpage/manual/pocketmidimobile/pocketmidimobile_operation_manual_ja.html
またこの投稿はマルチポストをしています。
以下がそのリンクです。
https://teratail.com/questions/scj53hc626chtq
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12302479777
分かったことがあり次第、この投稿を編集させていただきます。