わかりました。最も簡単なアプローチは、すべてのサンプルを取得すること48/44.1
です(これは、12番目のサンプルごとにキックアウトすることと同じです)。最終的にはこれを行う必要があります。
それに関する問題はエイリアシングです。ダウンサンプリングの場合、実際には、ダウンサンプリングレートの外側のスペクトルをサンプルにミラーリングしています(適切な説明については、このwikiページを参照してください)。これはエイリアシングと呼ばれます。あなたは明らかにそれを望んでいません(あなたはそれを試してみて、あなたのオーディオで何が起こるかを見ることができます)。
では、どうすればそれを防ぐことができますか?最も一般的な方法は、これらのミラーリングされた周波数チャンクのスペクトル振幅を何らかの方法で減らすことです。このように、それらはミラーリングされますが、振幅が非常に小さいため、それほど重要ではありません。これは、サンプリング比付近のカットオフ周波数を持つローパスフィルターを使用して実行できます。したがって、手順は次のようになります。
- サンプルをローパスフィルター処理して、44.1kHzを超える高周波振幅を除去します(その下にあるものを除去しないように注意してください)
- データをサブサンプリングします(この場合、12番目のサンプルごとにキックアウトします)
では、そのフィルターの要件は何ですか?重要な要件の1つは、カットオフ周波数より低い周波数振幅に触れないようにすることです。そのため、非常に低い通過帯域リップルと1の通過帯域ゲインが適切です。次に、阻止帯域を可能な限り減衰させる必要があります。これは明らかにあなたのデータに依存します。特別なオーディオ処理についてはわかりませんが、通常DSPでは、使用されるローパスフィルターはまたはFIR
ですIIR
。もちろん他にもたくさんありますが、これらは実装が非常に簡単で、ある程度までリアルタイムの制約を処理することさえできます。
したがって、2つのフィルター実装を読むことをお勧めします(または単に焦点を当てますFIR
)。私が今書いたものについて本当に混乱している場合は、ある種のローパスフィルタリング機能を備えた特定のライブラリを使用する方がよいかもしれません。しかし、あなたがそのようなものをたくさん扱っているなら、私はその問題を読むことをお勧めします、それは本当に何が起こっているのかを理解するのに役立ちます...;)