Simulinkによる音声信号処理の入門として、簡易カラオケ回路を作ってみました。ボーカル除去といえば、近年はニューラルネットワークを使ったアルゴリズムの研究が盛んですが、今回は最も簡単なセンターキャンセル方式を用います。

原理

メインボーカルは通常、スピーカーの左右チャネルの中心に定位するようにミックスされています。つまり、メインボーカルは左チャネルと右チャネルに(振幅と位相が)全く同じ信号が記録されています。よって、片方のチャネルの信号からもう片方のチャネルの信号を引き算すれば、メインボーカル成分を除去することができます。電子工作の定番ネタとして、以下に示す減算回路を用いた簡易カラオケ回路がよく知られています。

減算回路の回路図
減算回路(差動増幅回路)

詳細は省略しますが、減算回路では$L_{in}$端子の電圧から$R_{in}$端子の電圧を引き算した電圧が出力されます。メインボーカルのような同相信号は殆ど出力されないため、ボーカル除去が可能です。今回はSimulinkを使ったディジタル信号処理により、この回路と同等のシステムを作成します。

構成

下図のように、MP3などのオーディオファイルの左右信号を分離し、引き算します。単純に引き算すると16bitで表現できるピーク値を超え、クリップ(音割れ)する可能性があるため、引き算の前に$\frac{1}{2}$倍しています。

カラオケ回路の構成図
全体の構成

From Multimedia Fileブロック

音声信号の取り込みにはFrom Multimedia Fileブロックを使います。下図のように、「ファイル名」にMP3などのオーディオファイルを指定します。

From Multimedia Fileブロック
From Multimedia Fileブロック の設定

Multiport Selectorブロック

MATLABでは、ステレオの音声信号は2つの列をもつ行列として扱われます。1列目には左チャネルの信号が、2列目には右チャネルの信号が格納されています。左右の信号を分離するために、Multiport Selectorブロック を以下のように設定して使います。

Multiport Selectorブロック
Multiport Selectorブロック の設定

Audio Device Writerブロック

リアルタイムで信号処理しながら音楽を再生したい場合はAudio Device Writerブロックを使います。基本的にデフォルトの設定のままで問題無いと思います。オーディオファイルとして出力したい場合はTo Multimedia Fileブロックを使います。

結果

以下のような結果となりました。ボーカル除去前と除去後の信号を約10秒おきに繰り返しています。

メインボーカルがきれいに除去されていることがわかります。ただし最近の曲では、 メインボーカルに左右で違う信号となるようなエフェクトを掛けていることが多くあり、その場合は精度が落ちるようです。

おまけ-分離した左右信号を元に戻す方法-

分離した左右チャネルの信号を元のステレオ信号に戻すには、Vector Concatenateブロックを以下のように設定して使います。

Vector Concatenateブロック
Vector Concatenateブロック の設定

参考

  1. T_NAKAの阿房ブログ「オペアンプ差動増幅回路を真面目に計算してみる」
  2. MathWorks「From Multimedia File」
  3. MathWorks「Multiport Selector」
  4. MathWorks「Audio Device Writer」
  5. MathWorks「Vector Concatenate、Matrix Concatenate」
  6. MathWorks「To Multimedia File」

コメントを残す

メールアドレスが公開されることはありません。