MaxTips
[expr]オブジェクト内でのif文
Maxで条件分岐をさせるとき、[if]オブジェクトを使うことがあります。
でも[if]オブジェクトって then~ else~ 文の中に計算式をかけないんですよね。
if $f1<=0.5 then ($f1+0.5) else out2 ($f1-0.5)
という式が[if]オブジェクトの中では書けません。エラーになります。
ですので、[if]オブジェクトを使う場合仕方なくout2を書いて別々のアウトレットから出力して、それぞれの計算をすることになります。
でも[expr]オブジェクトを使って条件分岐を書くことができます。
[expr]オブジェクトで条件分岐する方法
expr ($f1+0.5)*($f1<=0.5)+($f1-0.5)*($f1>0.5)
上記のように比較演算子を使ってTRUE=1, False=0を返します。
これを乗算することで、条件分岐として使うことが可能です。
こんな感じ。
このソースはこちらです。
https://gist.github.com/6b1edf3428d774949e70.git
N個からひとつ選ぶGUI
MaxでN個からひとつだけを選ぶには、radiogroupオブジェクトがある。
「でも、ラジオボタンじゃ嫌だ、俺はトグルのデザインが好きなんだ!」
ラジオボタン小さいしね。
ということで、トグルスイッチをラジオボタン的に使うパッチ。
routerオブジェクト内でマトリクスを組んだだけです。
ソースはこちら。
https://gist.github.com/anonymous/8487825
戻し切り:分析合成フィルタ
刃物の切る技で「戻し切り」っていうのがあるそうです。
野菜の繊維を傷つけることなく切れば、切った野菜が元通りくっつくという。
(るろうに剣心が包丁の試し切りで大根切って戻してたアレです。)
そんなことが現実に刃物で出来るかは寡聞にして知りませんが、
音の信号処理ではよく似たような処理をします。
具体的には、低域から高域まで入っている全帯域の信号を
低域、中域、高域のようにいくつかのサブバンドに分割してなんらかの処理をしたあと、
それらをくっつけてまたもとの全帯域の信号に戻すというものです。
例えば、マルチバンドコンプレッサは、音をいくつかのバンドに分けてそれぞれコンプレッションしたあと、またそれらを足しています。
ここで、信号を帯域ごとに分けて取り出すにはハイパスフィルタ(HPF)、ローパスフィルタ(LPF),バンドパスフィルタ(BPF)などのイコライザを使います。
これらのフィルタを使って、帯域を分割して処理をしたあと、それらの信号を足して、もとの全帯域の信号に直すわけですね。
ここで、注意しなければならないのは、フィルタによる位相の変化です。
例えば、Protoolsのプラグインでやってみましょう。
1.ホワイトノイズにLPF(1kHz,12dB/oct)をかけて、低域だけの音を取り出します。
2.今度はホワイトノイズにHPF(1kHz,12dB/oct)をかけます。高域だけの音を取り出します。
3.それをコンプなどの処理をせず、そのまま足せば、元のホワイトノイズに戻ってるはず....
1kHzにノッチが出来てる。。。
なんで!!!
それは、低域だけ取り出した音と高域だけ取り出した音とでは、分割した周波数で位相が逆転するからです。
じゃあどうすれば、元のホワイトノイズに戻るかっていうと、
もう一度同じイコライザをかけて、逆になった位相をまた逆にして元に戻してあげればいいのです。
つまり
4.さっきの低域だけ取り出した音に、もう一度このLPF(1kHz,12dB/oct)をかける。
5.そして、高域だけ取り出した音に、もう一度このHPF(1kHz,12dB/oct)をかける。
同じ処理を重ねているだけなので、各バンドの振幅特性(周波数特性)は変わりません。
6.ところが、さっきと同じように、その二つを足すと....
1kHzのノッチが消えて、ホワイトノイズのフラットな特性に戻っています。
バンド分割のフィルタリングによる位相変化を防ぐために、
フィルタリングを二段がけにするのです。
最初にかけた1段目の分割するためのフィルターを分析フィルタ(Analysys Filter),
そして位相を元に戻すためにかけた2段目のフィルタを合成フィルタ(Synthesis Filter)と呼ばれています。二つセットで使う場合には、分析合成フィルタ(Analysys/Synthesis Filter)となります。
マルチバンドコンプなどの場合には、コンプ処理の前に分析フィルタでバンド分割をして、
コンプ処理をそれぞれ行い、処理後に合成フィルタを通し、位相を合わせているんですね。
Maxによる分析合成フィルタのパッチを作ってみました。
スペクトログラムが二リア軸なので、10kHzに設定しています。
最初にバンド分割(分析フィルタ)を通した信号を足しただけでは、バンドの分割周波数にノッチができています。
しかし、もう一度同じフィルタ(合成フィルタ)を通すことで、そのノッチが消えています。
今回、ProtoolsのフィルターQ値は12dB/octで実験しましたが、他のQ値ではどうなるか。
あるいは、リニアフェイズEQなどはどうなるのか。
そのへんはまた時間あったら書きますが、興味あったら調べてみてね。
linedriveの対数カーブをリニアに戻す
リニア値を対数にマッピングし直す関数としてscallやlinedriveを使ったりしますが、
対数にマッピングされたものからリニアに変換し直す逆関数のライブラリはないようです(dbtoaとかは別にして)。
linedriveはヘルプを見ると関数が書いてあったので、そこから逆関数を求めてそれをgenコードで実装しました。
これだけです。
パラメータとして
- input
- output
- curve
の三つがあります。
ここにはlinedriveのinput,output,curveをそのまま入力します。
使い方としては、
スライダー(0 to 127)を、linedriveを使って対数カーブで0 to 1に正規化し、さらに周波数値に変換。
0 to 1に正規化された値をこの逆関数であるlinedriveinvに通すと、0 to 127に戻ってきます。
つまりGUIと実際の信号処理に送る値が一致させることができます。
例えば、例えばナンバーボックスに「1000」Hzを周波数値を直打ちしても、
スライダーがそれに対応した位置に戻ってきてくれます。
ただ127段階だと分解能の関係で若干の誤差は出ます。
サンプルパッチのコードは以下に置いておきます。
コピーしてMaxの[New from Clipboad]から復元できます。
Nigel Westlake《Fabian Theory》
パーカッションソロ(マリンバ)、3 トムトム、エレクトロニクス(デジタルディレイ)のためのライブエレクトロニクス作品。
ディレイタイムには566ミリ秒という指定が上演の技術注記(Technical performance notes)に書いてある。また、途中でループを使うセクションもある。
再生スピーカーの指定はないみたいだけど、マルチチャンネルでやったら絶対おもしろいと思う。
サラウンドサウンドの音場デザイン
サラウンドのデザインパターン
サラウンドの音場をどのようにイメージして、デザインして、制作すれば良いのか。
音楽のサラウンドデザイン
特に音楽で用いられるデザインパターン
- ステージレイアウト
- 独立チャンネルレイアウト
- 全方向レイアウト
これらのデザインパターンがわかりやすい図入りで解説されています。
サラウンド寺子屋
第37回サラウンド塾 ゲームのサラウンドデザイン:染谷和孝
http://surroundterakoya.blogspot.jp/2006/10/37.html
音楽のサラウンドデザイン(ミキシング)のポイント
- 安定した音場をつくる。
- そのための楽器の役割を考えてデザインする
- 曲の中で一定の定位にSTAYする楽器はなにか?
- 曲のなかでギミック効果(音の移動)を出す楽器はなにか?
- 360度音場に素を作らない
- ハードセンターに入れすぎない。
- LFEは遅れを補正
- サラウンドスコープでチェック
など実際のミックスにおける具体的な指針が述べられています。