まだ立体音響なんてやってるんですか?

バイノーラルとか、サラウンドとかを考えてみる。

linedriveの対数カーブをリニアに戻す

リニア値を対数にマッピングし直す関数としてscallやlinedriveを使ったりしますが、
対数にマッピングされたものからリニアに変換し直す逆関数のライブラリはないようです(dbtoaとかは別にして)。

linedriveはヘルプを見ると関数が書いてあったので、そこから逆関数を求めてそれをgenコードで実装しました。

f:id:onnat:20131117004252p:plain

これだけです。
パラメータとして

  • input
  • output
  • curve

の三つがあります。
ここにはlinedriveのinput,output,curveをそのまま入力します。

使い方としては、
スライダー(0 to 127)を、linedriveを使って対数カーブで0 to 1に正規化し、さらに周波数値に変換。
0 to 1に正規化された値をこの逆関数であるlinedriveinvに通すと、0 to 127に戻ってきます。


f:id:onnat:20131117005151p:plain

つまりGUIと実際の信号処理に送る値が一致させることができます。
例えば、例えばナンバーボックスに「1000」Hzを周波数値を直打ちしても、
スライダーがそれに対応した位置に戻ってきてくれます。
ただ127段階だと分解能の関係で若干の誤差は出ます。

サンプルパッチのコードは以下に置いておきます。
コピーしてMaxの[New from Clipboad]から復元できます。

https://gist.github.com/anonymous/7501803