アプリ内で手軽にDJごっこをしてみたい！(CRI ADX2を利用)

# DJ用のエフェクトを再現してみよう
というわけで、CRI ADX2を用いて以下の動画のようなデモを作ってみました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">CRI ADX2、AtomCraft上でDJエフェクトを再現テスト中。楽しくなってきた。<br>とりあえずローパス、ハイパス、フランジャー、エコー（適当）、ビットクラッシャーまで。 <a href="https://t.co/BqmP9YPiih">pic.twitter.com/BqmP9YPiih</a></p>&mdash; 川口 / ゲームの音響や触覚でUXを考える人 (@ADX_kawaguchi) <a href="https://twitter.com/ADX_kawaguchi/status/1355788209045655553?ref_src=twsrc%5Etfw">January 31, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
なお、アプリ側はUnityでもUE4でもネイティブでも可能なので、お好きなものをご利用ください。
本記事ではADX2のデータ作成ツール、AtomCraft上でデータの作り方のみをフォローしています。

## この記事で得られるもの
* CRI ADX2 (LE含む)を用いて、DJエフェクトを再現し、アプリ上から手軽に効果が掛けられるデータの作り方、考え方
* それっぽいエフェクトパラメータの一例
* パラメータコントロール用カーブの一例
* 実装の工夫

## 必要なもの
* CRI ADX2LE (Win/mac) - https://game.criware.jp/products/adx2-le/
* DJエフェクトを掛けたい曲 (wav)

わからない用語が出てくるかもしれませんが、AtomCraftのヘルプを参照すれば解決するはずです。
![DJFX_Help.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/04cf80c3-a220-c204-a4bd-711210482ba3.png)


# 大まかな流れ
* DSPバス設定をあれこれする
* バスマップを設定する
* 変化させたい音のCueを作る
* ローパス、ハイパスの設定する
* AISAC（パラメータ変更用コントローラ）を設定する
* 上記の動画のようにいじる　→　楽しい！

今回、エフェクトそのものの仕組みはADX2に既にある機能のみを使います。
音声信号の流れる仕組みを整える感じです。

## DSPバス設定をあれこれする
![DJFX_DSPBUS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/a32c36d8-261e-6889-2312-90a5cbfbccac.png)
* バスを増やし、センド先を設定する
最初はMasterOutしか無いので、DSPバスを追加していきます。
追加されたバスは、そのままでは信号がMasterOutを通らないため音が鳴りません。
今回はBUS1〜3をエフェクト用に使い、全てBUS4に送っています。その後、BUS4で音量を揃えてからMasterに行くようにルーティングをしてあります。
※ Masterにコンプレッサを使うと（今回は存在しませんが）楽曲以外の音も変化してしまうため、楽曲の音量を揃える専用のバスを用意しています。

* バス1〜3に使いたいエフェクトを差す


## バスマップを設定する
![DJFX_BUSMAP_PJtree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/82053bef-b003-8848-7ef9-809c5f54f9bc.png)
ややこしいですが、キュー設定用のデフォルトバスマップと、オートメーション用のバスマップをそれぞれ設定します。

### デフォルトバスマップ
![DJFX_BUSMAP_defaault.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/6ff0b5e2-c8a3-3185-0039-9dd5d382330e.png)
こちらを設定しないとCueのバスセンド先の設定が面倒になるうので、複数のCueで使いまわすことを前提としてデフォルト設定をします。
ADX2で同時に使えるバスは8本が上限ですが。今回のエフェクト数では問題ありませんのでこれで進めます。
バスそのものは64本作れます）

### オートメーション用バスマップ
![DJFX_BUSMAP_auto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/e906345a-e436-b571-dd3c-4c7c72facdeb.png)
こちらはアプリ内で各パラメーターをコントロールするために設定が必要です。

## 変化させたい音のCueを作る
Cueを作り、インスペクターのバスセンドを見ると、先ほど設定したバスマップが反映されてBUS1-4が選べるようになっています。それぞれのチェックボックスをオンにし、ボリュームを右端へ。その代わり、MasterOutをゼロにします。
![DJFX_CueBUSSend.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/0cd63907-fe27-7f14-3b39-2e4f33a113de.png)



## ローパス、ハイパスの設定をする
これらのフィルター効果は、Cueのトラックに対して設定が可能なのでそれを使います。
![DJFX_Filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/7479edb1-4d38-d646-8b49-061862b9cd5c.png)

下段のバンドパスフィルタを使えばローパス、ハイパス共に可能ですが…Qの設定ができません。個人的にローパス（ハイカット）では、カットオフ周辺の帯域は少しブーストされた方が好みなので、ローパスだけ上段のバイクアッドフィルタを使います。

バイクアッドフィルタはフィルタータイプが複数ありますが、一度に１つしか使えないためハイパスはバンドパスを使っています。

ここで設定しなければならない項目は
* バイクアッドフィルタのタイプ → ローパス
* Qの値
のみです。他の値は後ほどAISACコントロールを用いて上書き変更するため、無視します。

## AISAC（パラメータ変更用コントローラ）を設定する
#### AISACを作る
こちらも使い回しを想定してグローバルで作ります。
![DJFX_GlobalAISAAC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/62f5c6e5-3719-ba09-f724-318d11aa1a51.png)

#### CueにAISACを追加していく
（上記画像のAISACアイコンをCueアイコンにD&Dする）
![DJFX_AISAC_Cue.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/8d0561b2-ce27-a09f-cc3c-0e81b8951829.png)


## AISACのグラフカーブを作っていく
再生時のAISACの状態は不明なので事故を防ぐためにも、デフォルト値のフラグをonにして値も設定しておきましょう。
### ローパスの例
![DJFX_AISAC_Lowpass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/39b22272-8889-b272-7051-5583b37211cc.png)

バイクアッドCofを選び、上記のようなグラフにしました。今回、このAISACのみデフォルト値を1にしてありますが、デフォルト値を0にし、左右の傾きを逆にしても問題ありません。

### ハイパスの例
![DJFX_AISAC_Highpass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/4a65a29b-655e-bdbd-d018-72ac036c2de8.png)
バンドパスCof低域 を選んで図のようなカーブを作ります。

### フランジャーなどBUSエフェクトの例
![DJFX_AISAC_Flanger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/24d52a04-782d-4461-ea19-587bf76028bd.png)
エフェクトを掛けるBUSの音とBUS4の音をクロスフェードするようなカーブを書きます。（スクショでBUS4がMasterになっていますが間違いです。後日余裕があれば差し替えます）
曲線はカーブタイプを変更してください。

上記画像ではCof低域のカーブも痒いてありますが、これはエフェクトによる低域の強調が気に入らなかったためです。こうやって状況に合わせた調整ができるのもAISACの良いところなのでぜひお試しください。

ポイントですが、BUS1〜3のエフェクトの設定でDry0%、Wet100%にしておきましょう。
![DJFX_DryWet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/c0ff8119-9adb-356a-6312-3a8771b67c4e.png)

## 聴きながら調整する
上記の工程を経て以下のようにAISACが大量に設定されたCueができました。
![DJFX_AIISAC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96688/cb5bc75d-2573-f900-ac73-5b4dc335d5e7.png)
このCueを再生しながら AisacControl_0xのスライダーを動かせば、それぞれのエフェクトの掛かり方を確認しながら調整が可能です。

お疲れ様でした！
あとはこのツールから皆さんのアプリに組み込むためのバイナリデータを書き出し、アプリからこれらAisacControlの値を変化させるコードを書けばDJごっこが可能です！