12

できるだけ多くの異なる方法でオーディオを操作する方法を学ぼうとしています。

既知のオーディオ ストリーム (stream1 と呼びましょう) と未知のオーディオ ストリーム (stream2) が 1 つのストリーム (mix1) に混合されているとします。

stream1 は事前にわかっているが、stream2 はわかっていないと仮定すると、stream1 を使用して mix1 から自分自身をキャンセルし、ノイズ/干渉を最小限に抑えて stream2 を提供することは可能でしょうか?

現実世界のコンテキストを与えるために、コンピューターにマイクとスピーカー (ヘッドフォンではない) があり、コンピューターが事前に (ミリ秒だけですが、それでも) スピーカーへの出力を知っているため、状況を想像してみてください。マイクに入ってくるミックスからその音をキャンセルします。この現実世界の状況では、送信と受信の間に何らかの歪みが生じる可能性があるため、既知のストリームは完全にはわかっていません。

これが可能であると仮定すると、関係するアルゴリズムについて誰かが読んだことを提案できますか?

4

2 に答える 2

7

はい、可能です。2 つの方法:

時間領域

ミックスされたオーディオが元のストリーム 1 のタイミングに対してサンプル精度であることを保証できる場合は、元のストリーム 1 を単純に無効にしてミックスに追加できます。ここで、通常、オーディオがミックスされるとレベルが下がるため、その波形を少しスケーリングする必要があるかもしれません。

オーディオに対して他の処理 (レベル圧縮など) が行われている場合、この種のサウンドの減算をきれいに行う能力に影響します。

周波数ドメイン

通常の PCM エンコードされたオーディオは、1 秒間に何度も圧力をサンプリングするだけですが、これはサウンドが完全に知覚される方法ではありません。私たちはさまざまな周波数を聞いています。フーリエ変換 (通常は FFT アルゴリズムで行われます) を使用する場合、オーディオ サンプルを時間ドメインから周波数ドメインに変換し、途中でさまざまな周波数バケットのサウンド レベルを取得します。

ストリーム 1 とミックスの両方を周波数ドメインに変換し、ミックスからストリーム 1 を減算してから、出力用に時間ドメインに戻すと、ストリーム 1 の大部分をミックスから効果的に削除できます。使用する頻度バケットが多いほど、より多くの CPU が必要になりますが、この削除はより正確になります。これは、サンプルを正確にする必要がないことを意味しますが、通常、ミックスのサウンドの品質が損なわれることに注意してください。

多くのオーディオ編集プログラムは、この方法を使用してバックグラウンド ノイズを除去します。

于 2014-02-16T21:28:55.847 に答える