低レベルオーディオエンジンオーディオデータの再フォーマット-サンプルレートとビット深度の変換
まず第一に、そこには低レベルのオーディオプログラミングチュートリアルがまばらにあるように思われるので、誰かがいくつかの良いリソースを知っているなら、私は非常に感謝するでしょう。さて、目前のトピックに移りましょう!
開発しようとしているオーディオエンジンにWASAPIを使用していますが、読み取ったオーディオファイルデータを、オーディオデバイスが受信できる形式に再フォーマットするのに問題があります。具体的には、読み取ったオーディオファイルのサンプリングレートとビット深度を、要求されたデバイスの形式にオンザフライで変換する方法を考えています。線形補間が使用された例を見ましたが、そのようなフィルターはエイリアシングなどのアーティファクトが多すぎることを他の場所で読んだので、リアルタイムアプリケーションでオーディオデータを再フォーマットするための実用的なアルゴリズムは何でしょうか。
回答
Sinc補間は、サンプリング前に元々適切に帯域制限されていたデータにエイリアシングアーティファクトを導入しません。(ただし、SincまたはDirichletカーネルの期間は無限であるため、少し変更する必要があります。)
再構築が機能する理由と補間方法に関する1つの標準的なリファレンスは次のとおりです。 https://ccrma.stanford.edu/~jos/resample/
ここにBasicの簡単な実装があります: http://www.nicholson.com/rhn/dsp.html#3
他の一般的な方法は、ローパスフィルター処理された整数比のアップサンプリングと、それに続く適切な2つの比率によるローパスフィルター処理された整数比のダウンサンプリングです。別の一般的な方法は、(ウィンドウ化されたSinc(または最適化されたFIRフィルターの複数のフェーズの)多相FIRフィルターバンクを生成することです。別の一般的な方法は、Sincカーネルの各こぶの多項式補間器を使用してFarrowフィルターバンクを作成することです。 。
量子化ノイズフロアを仕様が何であれ低く保つために、十分なビットの算術中間値を運ぶ必要があります。