音出しその2 PitchBend

PitchBend 解決。お試しはこちら。横ドラッグで、PitchBend。

PitchBend できないのかなぁ と 色々さぐってたら。

私 大きな勘違いしてたようです。PitchBendは エクスクルーシブメッセージじゃなくて、イベントメッセージじゃないですかっ! ControllChange なんかより上のレベルでした。なんか変だと思った。

NoteOnとか、ControllChangeとかと同じレベルに実装されてなきゃいけないものでした。ということは、ない。PitchBendがない。MidiOutput クラスに、sendPtichBendとかいうメソッドが実装されてないといけないはず。

ないものは作ってしまえというわけで、rwmidi ライブラリに手を入れました。

MidiEvent.java   に、PitchBend イベントを追加

public static final int PROGRAM_CHANGE = 0xC0;
public static final int PITCH_BEND = 0xE0;

PitchBend イベントの イベントコードは 0xE0

MidiOutput.java に sendPitchBend メソッドを追加。

/**
* Send a Pitch Bend on this output
* @param channel Channel on which to send the message
* @param value Program Change value
* @return 1 on success, 0 on error
*/
public int sendPitchBend(int channel, int value) {
ShortMessage msg = new ShortMessage();
try {
int bb = value & 0×7f;
int ub = value >> 7;
msg.setMessage(MidiEvent.PITCH_BEND, channel, bb, ub);
receiver.send(msg, -1);
return 1;
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}

これで 0~16383 の範囲の数字で 正常動作するはず。

processingの mouseDragged イベントにコード追加。

void mouseDragged() {
// Xdrag で Bent
print( “mouse dragged ” );
int bend = (mouseX - org_mouseX)*8+8192;
if( bend<0 ){ bend=0; }
if( bend>16383 ){ bend=16383; }
println( bend );
output.sendPitchBend( ch_s, bend );

これで 実行。 をぉ いい感じ。横ドラッグで、PitchBendがかかってる~。

ただ、これも NoteOn 時に リセットしてやらないと ダメな感じ。

それも実装。

mousePressedイベント

output.sendPitchBend( ch_s, 8192 );
output.sendController( ch_s, 11, vel_s );
output.sendNoteOn( ch_s, pit_s, vel_s);

8192 と マジックナンバー書いてしまったけど、まぁ いいかな。8192が センターだし、これでよしとしよう。

お試しは、こちら。 はぁ、よかったよかった。

rwmidi <たろう>Patch の バイナリ(jarファイル)は こちら。ソースはこちら。いずれも、解凍して 使ってください。

コメント / トラックバック 6 件

  1. ねぎ より:

    初めまして。
    processingで音をだす方法を探ってみたらここにたどり着きました。
    とりあえずコピペで音を出してみました。
    鳴った瞬間はとてもうれしかったです。

    貴重な資料を残して下さってありがとうございます。

    それでは。

  2. リピートです。前回購入させていただいた時と同じく、とても迅速ていねいな対応で、すぐに届けていただけました☆
    商品と一緒に、納品書と手書きの気持ちのこもったお手紙が入っていました☆
    とても気持ちよくお買い物をさせていただける、信頼できるお店だと思います☆
    商品もとても良品ですので、また購入させていただきたいです!
    コーチ ショルダーバッグ♪送料無料 中古ABランク コーチ ショルダーバッグ ミニシグネチャー ソーホー スモール フラップ 6818 キャンバス スウェード レザー ピンク 中古 ワンショルダー セミショルダー ハンドバッグ 革 スエード 150305025 COACH
    可愛くてきれいな良品です☆
    中古ランクABでしたが、商品説明で掲載されていたスレなど、全然気にならないぐらいとてもきれいで、私としてはまったく使用感無いレベルです☆(笑)
    デザインもとても可愛く、内側のポケットや仕切りも使いやすい仕様なので、小ぶりなわりに使いやすさもあり、購入して良かったです!!
    姉への誕生日プレゼントに贈ったのですが、姉もとても喜んでいました☆
    本当は自分でも欲しかったぐらいです☆
    ブルガリ ブランドコピー http://www.giginza.com/brand/list-138.html

  3. 2018 激安通販専門店
    ロレックス、ブルガリ、オーデマ ピゲ、
    グッチ、エルメス、パネライ、シャネル、
    パテックフィリップ偽物(コピー商品)の腕時計の販売、通販。
    当店のスーパーコピー商品は他店よりも質が高く、金額も安くなっております。
    ご購入する度、ご安心とご満足の届けることを旨にしております

コメントをどうぞ