Launch Control XL のノブのとこの LED を制御する

備忘録です。

Launch Control XL のノブのとこの LED を制御するには、System Exclusive Message を発射する必要があります。

詳細はググると出てくる公式の Developer Guide (PDF注意) を読んでいただきたいのですが、一応。

下のような MIDI メッセージを発射すればいいようです (便宜上 Array っぽく書きます && 以下の数字はすべて10進数です)。

[240, 0, 32, 41, 2, 17, 120, <テンプレート>, <インデックス>, <値>, 247]

テンプレートはそのままこれのテンプレートのことです。User, Factory の順に 0 から 7、8 から 15 までが割り当てられています。

インデックスでノブの番号を識別します。上から順に Send ASend BPan / Device と並んでいますが、それぞれ列順に左から 0 から 7、8 から 15、16 から 23 が割り当てられています。

最後の値のところで色と輝度を指定します。ここは下表のように指定します:

ビット 6 5..4 3 2 1..0
0 緑色LEDの輝度 1 1 赤色LEDの輝度

もしくは次に示す数式から計算できます:

(16 * 緑色LEDの輝度) + (赤色LEDの輝度) + 12

ここでの輝度は2ビットで表現されるので、要するに4段階です (当然数字が小さいほうが暗い)。緑と赤をうまいこと混色するとオレンジとか黄色が作れるという塩梅です。

実はこの他にも LED に対してフラグを指定できる *1 のですが、読んだ限りではそんなに使わないだろうという感じがしたのでここでは省略します。詳細は(ry

以下はより個人的な備忘録になります。

Ruby の UniMIDI というライブラリを使って、適当に色を弄ろうとするとこんなコードになります。

require 'unimidi'

# デバイス選択ダイアログが出るほう

UniMIDI::Output.gets do |dev|
  dev.puts(*[240, 0, 32, 41, 2, 17, 120, 8, 0, 61, 247])
end

# もしくは Launch Control XL しか MIDI デバイスを接続していないときは

dev = UniMIDI::Output.all[0].open 
dev.puts(*[240, 0, 32, 41, 2, 17, 120, 8, 0, 61, 247])

以下はすべての色をずらずらっと表示した様子です:

*1:3..2 ビットが立ってるのはそれの関係