ノン・リアルタイムのディスク処理

今日の私クエストは、ノン・リアルタイムのディスク処理の高速化でした。大量のオーディオ・ファイルに対して特殊な処理をする必要があって、Peakとかのマクロじゃできそうもないし、MSPのリタルタイム処理ではオーディオ・ファイルの長さ(ン十時間)だけかかっちゃうし、何か良い方法はないかと探っていたわけです。

以前のOpenGLレコーディングの時に、MSPのノン・リアルタイムでのディスク処理が無茶苦茶遅かったので、ダメだろうな〜と思いつつ、実験してみました。以下のテスト用パッチは、jongly.aifをディスク再生し、振幅を0.5倍して、test.aifに書き出すだけの処理です。このパッチを実行してみると、jongly.aifの時間長が2.8秒なのに対して、処理時間は1分22秒、ナント30倍近くも時間がかかってしまいます。全然、使えません。

nrt-disk-test.gif

それで、buffer~を使う方法などを考えていた時に、フトが気が付きました。この時はSignal Vector Sizeが8だったのですが、これを128にすると処理時間が6秒に、512にすれば1秒で処理が終わっちゃいます。これでリアルタイム処理より速く処理ができます。こうでなくっちゃね!(って常識?)

【解決策】Signal Vector Sizeを最大にする。

リアルタイム処理では、レイテンシーを少なくするためにI/O Vector SizeもSignal Vector Sizeも小さめの値に設定するのが一般的ですよね。だから、これを大きくするのが解決策だとは、なかなか思い当たらないでいました。

ちなみに、Scheduler in Audio Interruptをオフにしておかないと、ノン・リアルタイム処理で実際にかかった時間を正しく計測できませんよ。逆に言えば、ノン・リアルタイム処理で時間進行に従った処理(metroとか)を含んでいる場合は、Scheduler in Audio Interruptをオンにしておく必要があるってことです。

ノン・リアルタイムのディスク処理” に1件のフィードバックがあります

  1. ピンバック: OpenGLレコーディング « akalogue

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA