ステレオ音声信号からボーカル部分を抽出する方法は?


15

現在MP3ファイルを処理していますが、この問題が発生します。私のMP3はステレオでエンコードされています。私がやりたいのは、さらに処理するためにボーカル部分を抽出することです(出力信号のモードがモノでもステレオでも問題ありません)。

私の知る限り、オーディオはMP3の異なる独立したサブ周波数帯域にエンコードされます。カットオフ周波数を適切に設定したハイパス/ローパスフィルターを使用して、ボーカル範囲に信号を制限できると思います。ただし、この場合、結果には純粋な音楽信号の一部が含まれている必要があります。またはグーグルの後、最初にバックグラウンド信号を計算するかもしれません(ボーカル部分が位相キャンセルと呼ばれるステレオオーディオの中心にあると仮定して、1つのチャンネルを他のチャンネルからの信号に追加することによって反転します)。この変換後、信号はモノになります。次に、元のステレオをモノラルにマージして、そこから背景信号を抽出します。

有効性を考えると、どちらが好まれますか(または他のソリューション:)?2番目のチャネルの場合、2つのチャネルAとBを使用して、バックグラウンドを計算するときに(BA)または(AB)を使用しますか?2つのチャネルをマージする場合と同様に、算術平均は十分に正確ですか?または、各チャネルを2倍にダウンサンプリングし、ダウンサンプリングされた信号をモノラルの結果としてインターリーブできますか?

よろしくお願いします。

回答:


21

まず第一に、mp3ファイルでのデータのエンコード方法は、圧縮ドメイン処理(非常に愚かなこと)を目的としない限り、質問とは無関係です。そのため、アルゴリズムは解凍された時間領域データで機能すると仮定できます。

和/差は、ボーカル抑制のための非常に基本的なトリックです(抽出ではありません)。ボーカルはステレオフィールドの中央でミックスされ、他の楽器は横にパンされるという仮定に基づいています。これはほとんど真実ではありません。LRとRLは同じように聞こえます(人間の耳はグローバルな位相シフトの影響を受けません)。中央で楽器をミックスすることなくモノラルミックスを実現します。問題は、バックグラウンドを回復したら、それで何をするかです。中央(平均)信号から抑制しようとしていますか?これは機能しません。(L + R)/ 2-(L-R)、これはあまり面白くありません...これらの線形結合(平均化および「中心除去」)を試すことができます。それから出てきます!

フィルタリングアプローチについて:音声のf0が1000 Hzを超えることはめったにありませんが、その倍音はそれを超えることがあります。最も高い周波数を削除すると、子音(特にsss、chhh)が不快になります。一部の男性の声は100 Hz未満になります。ただし、50 Hzまたは60 Hz未満(低音、キック)は安全にカットできますが、

検討する価値のある音声分離の最近の開発:

  • ジャンルイデュリューの背景NMF +ハーモニックコーム>フィルターモデル。Pythonコードはこちら
  • Rafiiのバックグラウンド抽出アプローチ。コードを作成するのが簡単で、エレクトロ、ヒップホップなどの非常に反復的なパターンを使用して、コンピューターで作成された音楽でうまく動作します...
  • Hsuは、f0検出、追跡、マスキングに基づいてアプローチしました。「歌のピッチ抽出と伴奏からの音声分離のためのタンデムアルゴリズム」(アクセス可能なPDFが見つかりません)。

4

参照いただきありがとうございます!あなたは、Summer_More_More_Teaのアプリケーションにとっても興味深いかもしれない、ドラムの強化に関する研究について言及するのを忘れていました。まあ、それはすべてあなたがそれで何をしたいかに本当に依存します。特定の「エンドアプリケーション」を念頭に置いていますか?

私はピクネットの上記の声明に完全に同意します。しかし、完全にするために、あなたが言及したボーカルの強化は、結果を強化するために、カラオケのトラック生成で、MattiRyynänenのいくつかの作品でも使用されたと言うべきです。

質問に答えるには:

有効性を考えると、どれが好まれますか(または他のソリューション:)?

pichenettesが言ったように、どちらもあなたのニーズに合っていないようです:ローパス/ハイパスフィルタリングは、人間の声の高調波構造(そしてより一般的には「興味深い」音-すなわち正弦波を超えたもの)のために失敗するはずです... )。

2番目のチャネルの場合、2つのチャネルAとBを使用して、バックグラウンドを計算するときに(BA)または(AB)を使用しますか?2つのチャネルをマージする場合と同様に、算術平均は十分に正確ですか?

繰り返しになりますが、2番目の方法では、中央にある信号のみを削除することができ、取得することはできません。言い換えれば、ボーカルが「中心」にある場合でも、ボーカルのみの信号を取得するための簡単な数学はありません。

または、各チャネルを2倍にダウンサンプリングし、ダウンサンプリングされた信号をモノラルの結果としてインターリーブできますか?

er ...上記のように、チャネルを平均化してモノチャネル信号を取得することは理にかなっており、信号のスペクトル特性を損なうことはありません(ステレオ信号が縮退していないと仮定)。したがって、基本的には以前と同じ音楽コンテンツを持つモノラル信号を取得します。

各チャンネルを正しくダウンサンプリングするということは、まずローパスフィルターを適用し(この場合、cutting_rate / 4のカットオフ周波数で)、2サンプルごとに安全に取得できることを意味します。ただし、こうしてダウンサンプリングされたチャネルをインターリーブすることについてはあまり言うことはありません。ほとんどの場合、これは信号のスペクトル特性を壊しています。あなたはおそらくそれを望まないでしょう。

実際、ローパスフィルター処理の後に2サンプルごとに0を設定し、これらの0を保持することにより、フーリエ領域で、高周波成分に保持された低周波成分が「ミラーリング」されます。サンプリング理論に関する信号処理のレッスンを思い出してください。インパルス(またはディラック)のシーケンスを乗算すると、フーリエ領域で別のディラックのシーケンスとの畳み込みが発生します。つまり、その場合、信号の周波数スペクトルが繰り返されます(周期化)周波数軸に沿って、サンプリングレートに等しい周期で。

通常、ダウンサンプリングするとき、0を削除します(新しいサンプリングレートを仮定するため)。しかし、ここでは、それらを維持すると、非常に迷惑な追加の高周波成分が発生します。これらの信号をインターリーブしても、これは修正されません。

まあ、全体として、短い答え:それをしないでください。:-)

最後に、LVAICA 2012会議用に開発したGUIを使用することをお勧めします。そのためのgitリポジトリがあります。私はまだそれをデバッグし改善していますので、コメントを歓迎します:D

お役に立てば幸いです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.