static block_t *Process (filter_t *filter, block_t *block)
{
const float factor = .70710678 /* 1. / sqrtf (2) */;
float *spl = (float *)block->p_buffer;
for (unsigned i = block->i_nb_samples; i > 0; i--)
{
float s = (spl[0] - spl[1]) * factor;
*(spl++) = s;
*(spl++) = s;
/* TODO: set output format to mono */
}
(void) filter;
return block;
}
左 - 右してモノラル化してるだけでした。
終了!
ちなみに、カラオケ機能はオーディオエフェクトウインドウ([ウインドウ]-[オーディオエフェクト...]メニュー)のフィルタータブから設定することができます。
VLCだから凝った処理をしてるのかなと思ったけどそうでもないようです。
逆に言えばこんな単純な処理でも使い物になるって事なんだと思います。
自分もとりあえずこの方法で実装してみるかなあ。
なお、カラオケ(ボーカルキャンセル)の原理と凝った実装方法については下記が参考になります。
参考: ボーカルキャンセラーの使い方 - Art Studio まほろば
参考: CDからボーカルを除去・抽出・移調するソフト/ボーカルキャンセラー2 - Art Studio まほろば
また、VLCのソースはVLC media player source code - VideoLANから入手可能です。
いつの間にか3.0.1が最新になってますね…