AudioUnitプラグイン作ってみました

昨日PureData用のexternで簡単なデジタル・オーバードライブを実装してみたんですが、PureDataだと内蔵マイクから音を取ってきて内蔵スピーカーに出すのがデフォルトで、ファイルを読み込んでそれにリアルタイム処理をするという用途にはちょっと使いにくいのでした。いや、出来るには出来るけどめんどくさいし、PDの中だけで完結しちゃうのがなんだか残念。そんなわけで、AudioUnit用のプラグインにしてみました。

Appleの開発者向けサイトからXcode用Audio Unitテンプレートを拾ってきてあったので、それに数式を入れてコンパイルしたら出来上がり。30分もかからずできちゃいました。時不変システムだから良かったものの、これが時変システムだとメモリ管理をする必要があるのでもうちょっと時間がかかっていたことでしょう。

~/Library/Audio/Plug-ins/Componentsフォルダの中にSymclipAU.componentをコピーして、AUホスト(Digital PerformerとかLogicとかGarage Bandとか)を立ち上げれば、認識されると思います。ここをクリックしてダウンロードしてくださいiBook G3/800MHz、Mac OS X 10.3.7、DP4.12でしかテストしてません。使用したらどんな環境で動いたかコメント入れてもらえると嬉しいです。

気になる人のために、メイン部分のコードを載せておきます。このコードの元になっている数式はM. Schetzen(1980)によるものです。

gain = powl(10.0, GetParameter(kParam_One));
sign = inputSample >= 0.0 ? 1.0 : -1.0;
inputSample = inputSample * gain * sign;

if (3.0*inputSample < 1.0) {
   outputSample = 2.0 * inputSample;
} else if (3.0*inputSample < 2.0) {
   outputSample = (3.0 - (2.0 - 3.0*inputSample)*(2.0 - 3.0*inputSample)) / 3.0;
} else {
   outputSample = 1.0;
}
outputSample *= sign;