AudioUnitsがバッファにどのような値を期待しているか知りたかったのです。現在、振幅0.5の単一周波数で正弦波のサンプルを計算すると、すべてが正常に機能します。
しかし、複数の周波数を同時に再生したい場合、たとえば一度に5つを再生し、それらを合計してサンプルをミックスすると、サンプル値が高くなり、サウンドがきれいになりません。
ですから、ダーティな音が出る前に、サンプルの最大値を知りたいのです。
AudioUnitsがバッファにどのような値を期待しているか知りたかったのです。現在、振幅0.5の単一周波数で正弦波のサンプルを計算すると、すべてが正常に機能します。
しかし、複数の周波数を同時に再生したい場合、たとえば一度に5つを再生し、それらを合計してサンプルをミックスすると、サンプル値が高くなり、サウンドがきれいになりません。
ですから、ダーティな音が出る前に、サンプルの最大値を知りたいのです。
OSXの場合
サンプル値は通常、以内[-1.0...1.0)
で、最大値と最小値は0dBFSに対応します。ただし、より大きなサンプル値を処理する準備をする必要があります。
浮動小数点レンダリング/ミキシンググラフを使用する多くの人は、0dBFSを超えることを考慮せずに作業することに慣れています。ハードウェアまたはオーディオファイルに出力する場合にのみ、信号が0dBFSを超えないことを確認できます。
それぞれが-6dBFSの5つのサインを合計するシンセがある場合、浮動小数点数を使用して表現しているため、[-1 ... 1)を超えても、通常の状況では信号のクリッピングは発生しません。あなたの信号。
これにはいくつかの例外があります。
私は通常、明らかにクリップする信号を送信することによって、これを証明/反証します。もちろん、intを使用して処理することを選択したシグナルプロセッサ/ジェネレータは、クリッピングを回避するために十分なヘッドルームを残すことができます(そしてそうすべきです)(プロセッサが32ビット未満のものを使用してオーディオを処理する可能性は低いため)。
iOSの場合
iOSデバイスでは浮動小数点処理がはるかに遅いためAudioUnitSampleType
、canonicはQ7.24固定小数点として指定されています。
この形式の説明はここにあります。このトピックを取り巻く投稿も参照してください。
これは浮動小数点ではないため、内部クリッピングを回避するために、ゲインステージにさらに注意を払う必要があります。
float
また、iOSで32ビットグラフを構成できることにも注意してください。その場合、[-1.0...1.0)
もちろん直接制御できない限り、出力が(OS Xと比較して)より早く非浮動小数点表現に変換される可能性があるため、プロセッサの出力を超えないようにする必要があります。処理チェーンの下流の適切なポイントでステージングを取得し、それらのポイントでの振幅を適切に調整します。