Unityでコンプレッサを作ってみる


皆さんご存知、あの、なかしまです。

今時の流行りはやっぱコンプレッサですよね!ってことでUnityで簡単なコンプレッサを実装して、構造を理解しましょう。

コンプレッサとは

コンプレッサは音楽制作で使われるエフェクターの一種で、しきい値(threshold)を超えた音を決められた割合(ratio)で圧縮するものです。

ソースを書いてみよう

早速、様々な文献を探りながらソースを書いてみます。


        clip = ((AudioSource)GetComponent(typeof(AudioSource))).clip;

        float[] samples = new float[clip.samples  clip.channels];
        float[] dist = new float[clip.samples  clip.channels];
        clip.GetData(samples, 0);

        float ratio = ratioA / ratioB;
        float gain = 1.0f / (threshold + (1.0f - threshold)  ratio);
        for (int i = 0; i < dist.Length; i++) {
            dist[i] = samples[i];
            if (dist[i] > threshold) {
                dist[i] = threshold + (dist[i] - threshold)  ratio;
            } else if (samples[i] < -threshold) {
                dist[i] = threshold + (dist[i] + threshold)  ratio;
            }
            dist[i] = (gain + makeUpGain);
        }

        clip.SetData (dist, 0);

Editorを拡張する

使いやすいようにEditorを拡張してみよう。
スクリーンショット 2015-03-20 11.36.26

作ってみたはいいけど、音圧をあげようとすると”ぽつぽつ”とノイズが入って使い物にならなかった٩(๑꒦ິȏ꒦ິ๑)۶
振幅幅の上限を設けてやったりしないとだめなのかな?
実務でやったことのないジャンルだと、最終調整のノウハウが無いから難しいね!