5

あるオーディオウェーブを別のオーディオウェーブから差し引く方法は?一般的に、C#で(またはC / C ++のC#で実行できない場合)

音波Aと音波Bがあります(BTW:PCMです)AからBを引きます

私が必要なものは何?オープンソースライブラリ(GPLではありませんが、LGPLは問題ありません)このような操作を行う方法のチュートリアル(ライブラリの使用の有無にかかわらず)このトピックに関する記事

PS:それはすべてAECについてです…

4

2 に答える 2

6

サンプルが同じレベルに正規化され、「ゼロレベル」が0または0.0であるような符号付き形式で保存されている場合、答えはかなり単純です。

S_C = (S_A / 2) - (S_B / 2);

各サンプルS_AおよびS_BAとB。

サンプルに符号なしの値を使用している場合は、さらに作業を行う必要があります。最初に、中心がゼロの符号付きの値に変換する必要があります(たとえば、16ビットの符号なしサンプルがある場合は、それぞれから32768を減算します)。次に、数式を適用してから、それらを符号なし形式に変換し直します。オーバーフローに注意してください-前述の16ビットサンプルの変換を行う方法の例を次に示します。

#define PCM_16U_ZERO 32768

short pcm_16u_to_16s(unsigned short u)
{
    /* Ensure that we never overflow a signed integer value */
    return (u < PCM_16U_ZERO) ? (short)u - PCM_16U_ZERO : (short)(u - PCM_16U_ZERO);
}

unsigned short pcm_16s_to_16u(short s)
{
    /* As long as we convert to unsigned before the addition, unsigned arithmetic
       does the right thing */
    return (unsigned short)s + PCM_16U_ZERO;
}
于 2009-11-17T23:24:32.873 に答える
0

https://stackoverflow.com/questions/1723563/acoustic-echo-cancellation-aec-in-wpf-with-c同様の質問をし、受け入れられた回答があります。提案されたライブラリには、ある種のエコーキャンセレーションがあると思います。

残念ながら、私はオープンソースのオーディオライブラリを使用していません。以前にFmodを使用してオーディオを処理したことがありますが、AECが含まれていることを覚えていませんが、Fmodが処理し、独自のコードを実行するときに、生のオーディオにアクセスできます。

于 2009-11-17T20:38:29.703 に答える