非プログラマーなトラックメーカー向けライブコーディング講座#5- DAWとの連携、同期
(有料設定してますが全文読めます)
サムネは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.機器セットを作る
仮想オーディオルーターとオーディオインターフェースを合体させて、仮想と物理をくっつけたマルチチャンネルオーディオインターフェースを作ります。
自分はクロックソースはオーディオルーター側、補正はオフにして安定しますが、不安定だったら色々試してみてください。機器セット名が仮想のオーディオインターフェースの名前になるので、半角英数でわかり易い名前をつけておくと、Superdirtで設定するときにラク。
余談ですがこれ、同じ手順でUSB接続でオーディオを引き込めるハードシンセとかも統合できる。USBでDAWに入力して、別のオーディオインターフェースで出力したりが簡単にできます。これがあるからMacでDAW使ってるまである便利機能。
3.作った機器セットをSuperdirtとDAWのオーディオ入出力として設定する
Superdirtのオーディオ設定の詳細は前回#4を参考に。
Superdirtの出力先をオーディオルーターに
DAWの入力元を作成した機器セットに
DAWの出力先を作成した機器セットに
これで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にすべて表示されます。
さっきのコードの<"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側でレコーディングしてずれを測る方法になります。
おわりに
うーん、あんまりわかりやすく書けなかった。なんかもっとこうスマートに説明できないものだろうか…。まぁここに書いてあるのは取っ掛かりの参考程度にして、いろいろ試してみて下さい!
良かったら投げ銭お願いします🙇
ここから先は
¥ 300
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?