日別アーカイブ: 2016年10月1日

DD2のMIDIスクリプトファイルでのピッチ変更

春に買ったLaunchpad MK2用のスクリプトは割りとすぐに”ほぼできあがり”の状態にまで持っていけたのですが、最後に難題として残ったのがピッチ変更をどのように実現するかという問題でした。

元々入っているLaunchpad S用のスクリプトのピッチ変更部分のコードが流用できると思っていたのですが、どうもうまく動かなかったのです。setとgetを使ってデッキのピッチ値を変更するだけのコードだったのですが、なぜうまく動かないのかは今もって謎です。

結局、他のコントローラ用のスクリプトなども参考にして、ピッチ変更用の配列を作って、スイッチが押されるたびに添え字を増減させてピッチ設定をするコードを書きました。

//PitchA array subscript
int pary_A = 5;

//Pitcharray
array<float> midiPitchTable = {
0.1,
0.2,
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1.0
};

//DeckA pitch change down
case 0x51:
if(value > 0 && pary_A < 0) pary_A = 0;
if(value > 0 && pary_A > 0) pary_A = pary_A - 1;
if(value > 0) set(PITCH_A, 1.0 - midiPitchTable[pary_A]);

例としてデッキAのピッチを下げる処理を簡略化して書いてみました。

事前に0.1-1.0の10段の配列を用意しておいて、ボタンが操作されると配列の添字を1減らします。結果、ピッチが下がるというわけです。例では10段しか変えられないですが、実際には実用的な上下限と実用的な変動幅が必要になります。

case 0x51というのはLaunchpad側から送られてくるMIDIメッセージです。「どのボタンが押された時にこの処理をするか」という部分です。

配列に正の値しかないのでピッチがマイナスにならないように思うのですが、Deckadance2のスクリプト上ではピッチ0というのがピッチ下限を指し、ピッチ1というのはピッチ上限を指します。

配列によってピッチ変更の上下限と変更幅が決まってしまうので、これはお好みの値を考えないといけません。自分しか使わないので、自分用に都合良く作ってしまおうと思っています。