Skip to content

Instantly share code, notes, and snippets.

@ashitani
Last active January 7, 2023 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ashitani/7de63d5f77f0e7f67c8cd2925cfac82e to your computer and use it in GitHub Desktop.
Save ashitani/7de63d5f77f0e7f67c8cd2925cfac82e to your computer and use it in GitHub Desktop.
Logic Pro X MIDI script to change iRig PADS key layout. / iRig PADSのレイアウトを変更するための Logic Pro X のMIDIスクリプト。
/*
Logic Pro X MIDI scripter script to change iRig PADS key layout.
*/
// functions
var notetable={"C":0,"C#":1,"Db":1,"D":2,"D#":3,"Eb":3,"E":4,"F":5,"F#":6,"Gb":6,"G":7,"G#":8,"Ab":8,"A":9,"A#":10,"Bb":10,"B":11};
function notename(name){let n = notetable[name.slice(0, name.length-1)];let o = name.slice(-1); return o*12+24+n;};
// ------------------------------------
// Device keymaps
// ------------------------------------
// this example is iRig PAD SCENE 2(chromatic)
let button=[35, 36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];
// ------------------------------------
// Target plugin keymaps:
// ------------------------------------
// this example is Addictive Drums2 GM Map
var ad2gm ={"Kick":36,"Snare Open Hit":38, "Snare RimShot":40,"Tom4 Open Hit":41,"HH Closed1 Tip":42, "HH Open B":46, "Tom3 Open Hit":43, "Tom3 Open Hit":43, "Tom2 Open Hit":47, "Tom1 Open Hit":50, "Ride1 Shaft":52, "Cymbal 2":57, "Cymbal 3":55, "Sticks": notename("G0"), "Snare SideStick":37};
// this example is Spekan(@fingerdrumer)'s defenitions
var fd = {"BD": ad2gm["Kick"], "SN":ad2gm["Snare Open Hit"], "RM":ad2gm["Snare RimShot"],"CH":ad2gm["HH Closed1 Tip"], "OH":ad2gm["HH Open B"], "HT":ad2gm["Tom3 Open Hit"], "LT":ad2gm["Tom2 Open Hit"], "FT":ad2gm["Tom1 Open Hit"], "RC": ad2gm["Ride1 Shaft"], "LC":ad2gm["Cymbal 2"], "HC":ad2gm["Cymbal 3"]};
// ------------------------------------
// Keymap:
// ------------------------------------
// each element means:
// [ORIGINAL_NOTE, MODIFIED_NOTE, OFFSET_OF_VELOCITY]
// NOTE can be described as
// button[BUTTON_NUMBER]
// notenumber
// notename["NOTENAME_STRING"]
// ad2gm["ADDICTIVE_DRUMS_2_STRING"]
//                 fd["FINGERDRUMMER_STRING"]
// this example is Spekan(@fingerdrumer) simplest 16pad layout + my options
let keymap =[
[button[2], fd["BD"], 0],
[button[3], fd["BD"], 0],
[button[6], fd["SN"], 0],
[button[7], fd["RM"], 0],
[button[9], fd["CH"], 0],
[button[12], fd["CH"], 0],
[button[11], fd["OH"], 0],
[button[5], fd["RC"], 0],
[button[8], fd["RC"], 0],
[button[13], fd["LC"], 0],
[button[16], fd["HC"], 0],
[button[10], fd["HT"], 0],
[button[14], fd["LT"], 0],
[button[15], fd["FT"], 0],
// my options
[button[1], ad2gm["Snare SideStick"], 0],
[button[4], ad2gm["Sticks"], 0],
];
function HandleMIDI(event)
{
if (event instanceof Note) {
var p = event.pitch;
for (const element of keymap){
if(p==element[0]){
event.pitch = element[1];
if (event instanceof NoteOn) {
var v = event.velocity;
event.velocity = Math.min(Math.max(v+element[2],0), 127);
}
}
}
}
// event.trace(); // for debugging
event.send();
}
@ashitani
Copy link
Author

ashitani commented Jan 7, 2023

iRig PADSのキーマップを変更するLogic Pro X用のMIDIスクリプト。 iRig PADSのマップエディターが最近のOSXでは動かないので苦肉の策として作成しました。

iRig PADSのほうはクロマティックスケール(SCENE2)で出力しておいて、MIDIフィルタで例えばAddictive Drums2のキーマップに割り当てることで、iRig PADSそのもののレイアウト変更を行わずにキーマップ変更することができます。また、ベロシティにオフセットを加えることができるようにしたので、ゴーストノート専用のスネア用ボタンなどを作ることができます。

この例ではスペカン氏の一番基本のレイアウトを参考にマッピングしてあります。

結果として、Logicのプロジェクト側にキーマップを持つことになるので、曲ごとにキーマップを変えたりバリエーションをつけるようなことがやりやすくなりますが、逆にすべての入力やLogicに録音されるMIDIイベントはクロマティックスケールに習うことになるので、細かい編集には慣れが必要かもしれません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment