TouchDesignerでオーディオミキシング・マルチアウトしてサラウンド


様々な映像を作ったり、色々なデバイスと連携したりと大活躍のTouchDesignerですが、オーディオ関係の処理も色々あります。

先日オーディオのミキシングから4chマルチアウトしてサラウンド体験できるものをTouchDesignerで作ったのですが、組み方の自由度が高くて良い感じでした。

同時に問題点も浮上したので、色々まとめてみます。


# 先にまとめ
### 長所
- 自由な組み方のオーディオミキサーが作れる
- マルチオーディオアウトも自由に組める
- お手製サラウンドシステムもできる
- イコライザー・コンプレッサー・リミッターもあるよ

### 短所
- PC全体の処理負荷に注意。負荷の影響を受けて、音程低下などの不思議な現象が起きる

# オーディオミキシング
BGM鳴らしならがSEも鳴らしたい、という状況は多々あると思います。
そういう場合は音をミキシングして出力する必要がありますが、TouchDesignerではオーディオデータも`Chop`の数値扱いなので、`Chop`のオペレータが普通につかえます。
ミキシングは`Math`で`Chop`をAddするだけでOK。
簡単ですね。
![2019-12-09_16h08_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/09378d12-eb35-d67b-525a-7a9ecdeb6fdc.png)

# ステレオパンニング
単にパンと呼ぶことも多いですが、2chステレオ再生する時の左右の音量バランスのことです。
chan1（L）とchan2（R）の大きさ（音量）をそれぞれ`Math`のMultiplay等で調整してやればOK。
簡単ですね。
![2019-12-09_16h19_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/decb4731-4efd-b995-e684-8052f00aec8d.png)


# マルチアウト
オーディオインターフェースがマルチアウトに対応している場合、TouchDesignerから簡単にマルチアウトできます。
Windowsの場合、`Audio Device Out`のオーディオドライバーを`ASIO`にするとオーディオインターフェースの能力をフルで使えるようになります。
`Audio Device Out`のDriverを`ASIO`にして、2chよりも多くの音データを流すとマルチアウトできるようになります。
簡単ですね。
![2019-12-09_16h33_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/76e1121b-2c8c-202c-00bd-b0380d4e2d04.png)


# ASIOドライバー
Windowsのオーディオドライバーは、遅延が大きい、マルチインプット・マルチアウトできない、など機能的に問題があったため、それらを解決するべくスタインバーグ社が作ったオーディオドライバーです。
ASIOは「アジオ」と読むことが多いです（アシオと読むこともあるみたいです）。

TouchDesignerの`Audio Device Out`は、デフォルトではドライバーがWindowsのWDMになってるので、オーディオインターフェースを使っている場合はこれを`ASIO`ドライバーにしましょう。
`ASIO`ドライバーは、音楽用のほとんどのオーディオインターフェースが対応しています。
ただし、マルチアウトはオーディオインターフェース自体が対応している必要があるので、購入時はスペックを要確認です。

なお、Macの場合はCoreAudioという標準オーディオドライバーが優秀なので、MacではASIOはサポートされなくなりました。

# お手製サラウンドシステム
TouchDesignerの良いところとして、オペレータの繋ぎ方の自由度が高いという点があります。
繋ぎ方の自由度を活かしてオーディオのミキシング・パンニング・マルチアウトを駆使すると、とても柔軟な音の鳴らし方ができるようになり、サラウンドシステムも難なく自作できます。

実際に作る際には、スピーカーの位置関係を考慮してそれぞれのマルチアウトの出力バランスをコントロールすることで、お手製サラウンドシステムが作れます。

先日4chマルチアウトの仕組みを作ったときは、オーディオ関係のオペレータの接続はこんな感じになりました。
サラウンド処理はそれぞれの音に対して行うため、外部toxファイルを作って使いまわせるようにしてるので、外部toxを読み込んでるBaseコンプの中身も含めたらもっと込み入ってます。
![td_audiomultiout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/4f8ffbb5-5d9b-6c56-7303-de75bc1c3365.png)


# イコライザー・コンプレッサー・リミッターを使う
オーディオのミキシング・マスタリングで必須になるエフェクターに、イコライザー・コンプレッサー・リミッターというのがあります。
TouchDesignerではこれらの`Chop`オペレータが用意されてます。

### イコライザー
イコライザーは`Audio Band EQ`と`Audio Para EQ`で扱えます。

`Audio Band EQ`は、音楽制作ツールのイコライザーと比べると残念ながら直感的な操作は難しいですが、指定周波数付近の音を上げたり下げたりできます。
低音や高音の強調や、中音域を上げて音の張りを作ったり、不要音域をカットしてミックスに馴染みやすくしたりします。
極端にかけると音の聞こえ方が結構変わるので、イコライザーは音作りにもよく使われます。
![2019-12-09_18h27_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/ac12e69f-286d-ab69-f6cc-d33ccbcd379d.png)

`Audio Para EQ`では、TouchDesignerでは3周波数域の調整ができます。
`Audio Band EQ`との違いは、効果をかける中心周波数を変動できることと、中心周波数付近の周波数にも増減の影響がある点です。
中心周波数の影響範囲は、`BandWidth`のパラメータで指定します。
![2019-12-09_19h45_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/5916da99-985c-fbaf-3329-3e63ab1b7b3c.png)
残念ながら、これもパラメータの数字だけ見ても直感的にはわかりにくいですね...

参考までに、`Audio Para EQ`使った音の加工遊び。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">TouchDesignerはオーディオのパラメトリックEQが使えるので、Audio Para EQのBandWidthを狭くしてFrequencyを動かしまくると音がキュイキュイします。 <a href="https://t.co/zonUvqq0iQ">pic.twitter.com/zonUvqq0iQ</a></p>&mdash; foka (@foka22ok) <a href="https://twitter.com/foka22ok/status/1203994741597097984?ref_src=twsrc%5Etfw">December 9, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### コンプレッサー・リミッター
どちらも`Audio Dynamics`に付属する機能です。
コンプレッサーとリミッターは似た機能ですが、音圧の調整や必要以上に音が強くなるのを防ぐ時などに使います。
音楽製作やってないとあまり縁が無い気がするので、軽く解説してみます。

### コンプレッサー
音を潰すエフェクターです。
指定音量以上になった時に音の強くなり具合を抑えることができ、音圧調整に使われます。
音楽制作ではあえて極端にかけて音作りする時にも使われます。
![2019-12-09_18h44_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/da6fa944-7bca-b4fd-4a30-5541455d5c02.png)
色々パラメータありますが、とりあえずThrethold・Ratio・Output Gainを把握しておけば使えます。

`Threthold`
コンプレッサーが有効になる音量の閾値です。
0が最大音量なので、最大音量にコンプレッサーかけてもあまり意味が無いため通常は少し低めの音量を閾値にします。

`Ratio`
音量がThrethold以上になった時の音量増加を抑える割合です。
通常はRatioを0～1の間で設定してコンプレッサーのかけ具合を調整します。
TouchDesignerの場合は1以上にすると、音量がThrethold以上になった場合に音量が下がるという効果を作ることもできるようです。

`Output Gain`
コンプレッサー適用後の音量の増減です。
コンプレッサーは大きい音を抑えることで音量のバラ付きを抑える効果がありますが、それだけだと大きい音を小さくしているので聞こえ感も小さくなります。
コンプレッサーで音をつぶした後にGainで音を上げることで音圧が上がります。

### リミッター
指定音量以上にならないようにするエフェクターです。
音割れを防ぐために保険的に最終アウトプットの前にかけておくことも多いです。

仕組みはコンプレッサーと同じで、コンプレッサーも指定音量以上に対して音量増加を抑える仕組みですが、その効果を極端にしたものがリミッターです。
TouchDesignerの`Audio Dynamics`の場合だと、コンプレッサーの`Ratio`を1にするとリミッターと同じ効果になる気がします。
![2019-12-09_18h34_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/83e1b0ec-b3fa-394f-fff6-923849c64700.png)
リミッターの方は、特別な理由がなければ`Threthold`は0のままにしておくのが良いです。

# PCの負荷に注意
良いことずくめのように見えるTouchDesignerのオーディオ周りですが、一つ大きな弱点がありました。

BGMをループで何時間も流していると流していると、いつの間にかループさせている音楽の音程が下がる現象が発生しました。
`Audio File In`は再生スピードを変更できますが、スロー再生すると音程も下がります。
これと同じ現象が、再生スピードを変更してないのに、長時間動かしっぱなしにしていた時におきました。

明確な発生原因は不明ですが、オーディオ部分だけで耐久テストしていた時は起きず、PCに長時間負荷をかけ続けてみると起きたので、処理負荷の蓄積を怪しんでます。
オーディオ部分と直接関係ない負荷の影響で起きたので、オーディオ処理だけなく全体的な負荷がどうなっているかを気にする必要がありそうです。

音程低下現象が起きた場合ですが、`Audio File In`のCueをpulseしてみると直りました。
PC負荷が高い場合にBGMを自動ループし続けることに何か問題がありそうです。
BGMのRepeatをオフにし、サウンド`Audio File In`を`info`で調べて`flaction`が1になった（BGMが終了した）時にpulseを叩くようにすると改善が見られたので、その方法で対策を取りました。
![2019-12-09_19h09_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16457/ea509cb6-c55c-58ac-335a-6a8a82b38dde.png)


# まとめ
オーディオミキシング時の最重要エフェクターであるイコライザー・コンプレッサー・リミッターのまで扱える上、ミキシング、マルチアウトは柔軟に組み合わせてマルチオーディオのサラウンドシステムも自作できるTouchDesignerは相当便利だと思いました。

ただ、サウンド専用のツールでは無いせいか、安定性に少し不安が残る結果となりました。
状況に合わせてAbleton等の専用のオーディオツールと使いわけることを検討する必要がありそうです。