見出し画像

Logic Pro Xで使えるAddictive Drums用のユーティリティを公開します!

おはすみよし🎶

バーチャルシンガーソングライターの元住吉菜々緒です!

XLN AudioのAddictive Drums 2って、軽くて使いやすくて音も良いので、かなり重宝しているのですが、もっと使い勝手を上げることができると思うんですよね

そんなわけで今回は、そんなAD2をもっと便利にするユーティリティを大公開しちゃいます!

とりあえずユーティリティはこちらから

この元住吉菜々緒が使っているDAW、Logic Pro XにはMIDIプラグインというものがあって、その中にScripterというのがあるんです

このScripter、JavaScriptでコードを書くことで、いろんな機能をもたせられるんですが、今回はこの機能を使いました

なので、残念ながらLPX限定です

導入の仕方

AD2のトラックのMIDI FXスロットにScripterを追加して、「Open Script in Editor」ボタンを押します

するとエディタが立ち上がるので以下のコードをコピペして、「Run Script」ボタンを押せば準備完了

/*

GM音源のドラムマッピングでADを演奏する

*/

NeedsTimingInfo = true

// UI
PluginParameters = [
	{name: "bass note", type: "menu",
	valueStrings: ["C1", "C2", "C3"], defaultValue: "C2"},
	{name: "HH type", type: "menu",
	valueStrings: ["1", "2"], defaultValue: "1"},
	{name: "length", type: "lin",
	defaultValue: 1, minValue: 1, maxValue: 4, numberOfSteps: 3},
	{name: "subdivision", type: "lin",
	defaultValue: 2, minValue: 2, maxValue: 8, numberOfSteps: 6},
	{name: "cycle", type: "lin",
	defaultValue: 2, minValue: 2, maxValue: 8, numberOfSteps: 6},
	]

var DRUM_MAP = {
	// Bass Drum
	60: 36,
	// Snare
	61: 42, // stick
	62: 38, // SD open
	63: 101, // clap
	64: function(e, ti) {
		// フラム
		var on = new NoteOn(e)
		on.pitch = 38
		
		var on2 = new NoteOn(on)
		on2.velocity = on.velocity * 0.8

		sendNote(on2)
		sendNote(on, 30)
	},
	// TOM
	65: 65, 67: 67, 69: 69, 71: 71, // TOM
	// HH
	66: function(e, ti) {
		// Close
		var on = new NoteOn(e)
		var hh = GetParameter("HH type") == 0 ? 50 : 52

		if(ti.playing) {
			var length = GetParameter("length")
			var subDiv = GetParameter("subdivision")
			var cycle = GetParameter("cycle")
			var beat = ti.blockEndBeat - 1

			var beatPos = Math.round(beat * subDiv) % (length * subDiv) % cycle
			on.pitch = beatPos < 0.5 || cycle - 0.5 < beatPos ? hh : hh - 1
		} else {
			on.pitch = hh
		}
		sendNote(on)
	},
	68: 48, // Pedal
	70: 56, // Open
	// CYM
	73: 77, // Clash 1
	75: 60, // Ride 1 Tip
	77: 61, // Ride 1 Bell
	79: 81, // Clash 3 (Splash)
	81: 79, // Clash 2
	83: 62, // Ride Shaft
	// Perc
	78: 96, // Tamb
	80: 47, // Cowb
}

// MIDI受信コールバック
function HandleMIDI(e)
{
	var ti = GetTimingInfo()
	var p = e.pitch - GetParameter("bass note") * 12 + 24

	if(e instanceof NoteOn && DRUM_MAP[p]){
		if(DRUM_MAP[p] instanceof Function) {
			// 特殊処理
			DRUM_MAP[p](e, ti)
		} else {
			var on = new NoteOn(e)
			on.pitch = DRUM_MAP[p]
			sendNote(on)
		}
	} else if(e instanceof NoteOff && DRUM_MAP[p]){
		// 握り潰し
	} else {
		e.trace()
		e.send();
	}
}

// MIDIイベント(再)送信
function sendNote(on, delay) {
	delay = delay || 0
	on.sendAfterMilliseconds(delay)
	var off = new NoteOff(on)
	off.sendAfterMilliseconds(delay + 10)	
}

高階関数が美しすぎてビビりますね

AD2の問題点その1 音色が多すぎて広範囲にいろんな音が散らばっている

で、これなんなの?っていう話ですけど、そのためにはAD2を使っている上で、この元住吉菜々緒が感じている問題点について書いていきます

AD2のキーマッピングって、C1からG#6で5オクターブ半とかあるんですよ

この元住吉菜々緒が入力に使っているキーボードは37鍵なので、オクターブスイッチを押しまくらないと入力できないんですよね

これが地味にストレスだったのです

そこで今回のメイン機能ですが、GM音源風のキー配置に上書きしています

え?そんなのAD2のキーマッピングを変更してGM配置を使えばいいじゃない?って思いました?

これは、AD2のキーマッピングも使いたいことがあって、そのときに同じ音源に複数のMIDIトラックをアサインして、両方のマッピングを併用できるようにしているんですね

ちなみにやり方は「トラック」→「その他」→「同じ音源を使った新規トラック」です

bass note

キーマッピング関連のパラメータは2種類あります

「bass note」は、C1 C2 C3のどこからGM配列にするかが決められます

低い方にわざわざ行くの面倒なんだよねーっていう人におすすめ

この元住吉菜々緒の場合はC2〜が入力しやすいのでC2がデフォルトになっています

HH type

クローズハイハットの音色を2種類から選べます

ShaftとTipは選べないのか?というと選べませんので、どうしてもという人は普通のマッピングを使ってください

このユーティリティでマスクされてない音域は普通のAD2のマッピングで鳴るので、使いたいところをbass noteの設定で避けて使うのも良いでしょう

あとオープンHHは常にCです

AD2の問題点2 フラムを自分で入力しなければならない

Eを押すとフラムが入力できるようにしました

リムショットはないのか?というとないです

てか要らなくないですか?

AD2の問題点3 というかハイハットが勝手にグルーブする機能をつけました

ハイハットの音色なのですが、打ち込み時はShaftが鳴るようになっているんですが、実は再生時に勝手にShaftとTipの音色を切り替えるようにしています

なのでクローズハイハットベタ打ちでも何かグルーブが出るようになっているんですね

パラメータでいろいろ変更できるんですが、8ビートの場合はデフォルトのlength 1, subdivision 2, cycle 2がおすすめです

16ビートはlength 1, subdivision 4, cycle 3がいいと思います

パラメータの意味も書いておきますがループ再生しながらいじってみていい感じのところを見つけるのが早いと思います

length

パターンがなん拍で繰り返されるか?っていう値です

1なら1拍ずつ、4なら1小節のループになります

subdivision

1拍をいくつに区切っているのかです

2なら8分音符、4なら16分音符、3なら8分3連、みたいな感じなので、グルーブの最小単位にしておくのが良いと思います

cycle

subdivisionされた音いくつ分で繰り返すかですね

たとえば2だとshaft tip shaft tip……、4ならshaft tip tip tip shaft tip tip tip……という具合です

3とかにするとクロスリズム的な回り込みが発生すると思うんですが、lengthの設定でリセットされるという寸法です

技術的な話

誰も興味ないと思うので有料でスクリプトの解説をします笑

改造したい人は読む価値あるかも?

Scripterのコードを書きたい人には公式のドキュメントがおすすめです

ここから先は

1,457字

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?