見出し画像

非プログラマーなトラックメーカー向けライブコーディング講座#5- DAWとの連携、同期

前回#4

(有料設定してますが全文読めます)

サムネはChatGPTが考えたライブコーディング

前回(3年以上前…)はSuperdirtでマルチチャンネルの設定をしましたが、DTMで活用する場合は、TidalcyclesのオーディオとMIDIをそれぞれ用途に合わせてDAWにマルチチャンネルストリームすると、とても楽しくなります。DAWのフェーダーベースでミックスバランスを取ったり、プラグインエフェクトを使ったり、ソフトシンセをTidalcyclesのMIDIで動かしたり出来る。

オーディオのDAWへのストリーム

PC内部でTidalcyclesからDAWへオーディオをストリームするのは、OSによって方法が異なります。自分はMacを使ってるんで、そちらで説明します。標準のcoreaudioが良く出来ていて、ちょっと設定すればすぐに出来る。

🖥Macの場合

1.ルーティングソフトを入れる

いくつかあります。Black HoleもしくはGroundcontrolがおすすめ。

むかしむかし、Macの仮想オーディオルーターといえばSoundflowerでした。開発終了してしまい、後継として作られたのがBlackHole。Soundflowerを使ったことがある人はBlackHoleでもいいと思うけど、今から入れるならGroundControlの方が機能が充実してるとの、設定が簡単でいいです。

2.機器セットを作る

仮想オーディオルーターとオーディオインターフェースを合体させて、仮想と物理をくっつけたマルチチャンネルオーディオインターフェースを作ります。

Audio MIDI設定の下の+ボタンから機器セットを作って…
まとめたい複数のデバイスをチェックするだけ

自分はクロックソースはオーディオルーター側、補正はオフにして安定しますが、不安定だったら色々試してみてください。機器セット名が仮想のオーディオインターフェースの名前になるので、半角英数でわかり易い名前をつけておくと、Superdirtで設定するときにラク。

余談ですがこれ、同じ手順でUSB接続でオーディオを引き込めるハードシンセとかも統合できる。USBでDAWに入力して、別のオーディオインターフェースで出力したりが簡単にできます。これがあるからMacでDAW使ってるまである便利機能。

3.作った機器セットをSuperdirtとDAWのオーディオ入出力として設定する

Superdirtのオーディオ設定の詳細は前回#4を参考に。

  • Superdirtの出力先をオーディオルーターに

  • DAWの入力元を作成した機器セットに

  • DAWの出力先を作成した機器セットに

Apogee Groove(0IN2OUT)+Groundconrol(64IN64OUT)を設定した例

これでTidalcyclesのオーディオがDAWのレコーディング・バスに送られます。DAWをミキサーにする感じです。DAWのマスターアウトをオーディオインターフェイスのアウトバスに通せば、Tidalcyclesの音がDAWを通過して出ます。

🖥Windowsの場合は?

自分は今は音楽制作にWindowsを使ってなくて、調べてみたんだけどよくわからない…Windowsには機器セットに相当する仕組みがないので、それを実現するソフトを入れる必要があります。昔からASIO4ALLが有名だけど、UIが分かりづらいので、今ならFL ASIOか、VoiceMeter Bananaというのが良さそう。

ぱっと見、VoiceMeeter Bananaだけで解決できそうな気がする。

Tidalcyclesからの出力先指定

Tidalcylesからのマルチチャンネルは、Superdirtで設定していれば(前回#4を参照)、パターンの後ろに下記の関数で記述できます。

#orbit n {-- nはチャンネルナンバーで、0以上の整数 --}

DAW内のイン・アウトは各DAWと機器セットのチャンネルの割り当てによるので、お好みで設定してください。

MIDIの使い方

SuperdirtでのMIDI設定

ここ読むのが一番正確なんですが、英語だし結構めんどくさいんですよね。あまり深く考えずに使えるように解説するので、詰まったらリファレンスを翻訳ソフトにでも突っ込んでください。

まず、PC内部でTidalcyclesからDAWにMIDIを送るには仮想MIDIドライバが必要。Macは標準でIACドライバーというのがあるのでそれを使います。WIndowsは何かしらの仮想MIDIドライバを入れてください。

前回説明したSuperdirtのstartup.scdの最後に下記をコピペして保存してください。MacならSupercolliderを起動し直せば、MIDIレイテンシー0でIAC DriverがTidalcycles内で使えるようになります。

MIDIClient.init;
~midiOut = MIDIOut.newByName("IAC Driver", "IACBus1");
~midiOut.latency = 0.0;
~dirt.soundLibrary.addMIDI(\midi, ~midiOut);

MIDIClient.init;はSupercolliderでMIDIポート情報をイニシャライズするコマンドで、PC内にある使用できるMIDIポートがpostにすべて表示されます。

SupercolliderのMIDIポートリストの例

さっきのコードの<"IAC Driver", "IACBus1">の部分を、このリストからMIDIに使いたいポート名をコピペして入れ替えれば、そのMIDIドライバが使えるようになります。

TidalcyclesでのMIDIの記述

今回の記事は設定までなのですが、このあとのレイテンシー補正でコードを使うので、簡単に説明しておきます。

d1$midinote"64 65 66 67"#s"midi"#midichan 0
  • midinote : ノートナンバー

  • #s"midi" : MIDI送信を指定

  • #midichan N : チャンネルを指定(0=ch.1)

この他コントロールチェンジやMMCも送信できますが、今回は割愛。

オーディオ/MIDIのレイテンシー補正

TidalcyclesとDAWを連携する際に一番の問題となるのが、レイテンシーに対する対処です。Tidalcyclesからデータが送られるときのレイテンシーがオーディオ / MIDIそれぞれで異なるため、単に繋いだだけだとズレにかなり悩まされます。ソースごとに調整しなければなりません。

どのソースを基準に同期を揃えるか

環境によって違うかもなので、とにかくTidalcyclesのMIDI、TIdalcyclesのオーディオ、DAWのオーディオなどで一番遅延が大きいソースを特定して基準にします。それ以外のソースを基準に合わせて後ろにずらしましょう。自分の環境は大体はTidalcyclesからDAWに送るオーディオが一番遅いので、それに合わせてMIDIを後ろにずらしてます。

Tidalcyclesの関数のみで補正する方法

レイテンシーの補正の方法はいくつかあるんですが、ここではTidalcyclesの関数毎に補正する方法を紹介します。

自分は当初、Ableton liveのトラックディレイでソフトシンセ、ハードシンセ毎に調整してたんですが、起動のたびにバッファーの値に誤差?が出るのかズレ加減が変わるので、全部のトラックをひとつひとつ調整するのが大変でした。

今はnudgeというパラメータ関数を使って調整してます。

#nudge 1      -- 1サイクル後ろにずらす 
#nudge(-0.25) -- 1/4サイクル前にずらす 

Cycle単位でタイミングをずらせる関数で、前後どちらにもずらせます。本来はリズムのシャッフルなどに使う関数で、基準がCycleなのでずらしたい秒から変換してやる必要があります。

下記のように定義したカスタムのパラメータ関数を、タイミングを調整したいコードに追加すればOK。何秒ずらすかは環境によるので、耳で聞いて判断するしか無いですが、同じ系統のトラックには同じカスタム関数を適用しているため、一度数字が決まれば一気に更新ができます。

let MidiTrackDelay = nudge(delaytime*(bpm/4/60)) 
   -- <delaytime>は補正したい秒数 <bpm>にはbpmを入れる

--例
d1$n"0 1 2 3 4"#s"midi"#midichan 0#MidiTrackDelay -- MIDIの送信を設定した秒数ずらす

自分は下のような同期確認用のコードを用意してます。キックのサンプルを、TidalcyclesからのオーディオからとAbleton liveのセッションビューのセルに入れてTidalcyclesのMIDIで叩いたものを、耳で聴いてタイミングが一致するようにTidalcyclesのMIDI送信側を調整してます。他にMIDIでトリガーしてるハードシンセをDAWに入力してる場合、ズレ具合が異なるので別途調整します。

--Sync Check
do{
let bpm = 120;mtd = nudge(0.0039*(bpm/4/60));mctd = nudge(0.01*(bpm/4/60))
;
setbpm(bpm)
;
p"tidalclick"$s"kBDS:0*3"#gain 1#orbit 0 -- TidalCyclesのキック(基準)
;
p"abletonmidiclick"$n"0*3"#live_midi01#mtd -- MIDI -> ableton live
;
p"mckick1"$n"1*3"#amp 1#mctd#live_midi15 -- MIDI -> live -> Elektron Model:Cycles
;
p"hihat"$s"{~kHHS:13}%6"#orbit 6 -- 裏拍のクリック
}

(ちなみにdo{}ブロックを使うと複数のトラックの塊をまとめてEvaluteできます)

再生したものを耳で聴いて調整してるけど、厳密にやるならDAW側でレコーディングしてずれを測る方法になります。

おわりに

うーん、あんまりわかりやすく書けなかった。なんかもっとこうスマートに説明できないものだろうか…。まぁここに書いてあるのは取っ掛かりの参考程度にして、いろいろ試してみて下さい!

良かったら投げ銭お願いします🙇

ここから先は

0字

¥ 300

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