2018年3月21日水曜日

VLCのカラオケ機能の実装を見てみた

vlc-2.2.8/modules/audio_filter/karaoke.c

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が最新になってますね…