diff --git a/modules/LIST b/modules/LIST index 403b47e0da8489c3a575031f49f8be6f6e789a8d..fd93ff032a4d8c6202fc7363c59058ffab90b750 100644 --- a/modules/LIST +++ b/modules/LIST @@ -167,6 +167,7 @@ $Id$ * invert: inverse video filter * iomx: IPC/OpenMaxIL for Android * jack: jack server audio output + * karaoke: simple karaoke audio filter * kate: kate text bitstream decoder * libass: Subtitle renderers using libass * libbluray: Library to access Blu-Ray drives diff --git a/modules/audio_filter/Modules.am b/modules/audio_filter/Modules.am index db4d9a795e3dfdc400361170020a4202c1166d99..6643c84eaf48e588a0f89244a453bc7fd3cf9406 100644 --- a/modules/audio_filter/Modules.am +++ b/modules/audio_filter/Modules.am @@ -1,5 +1,6 @@ SOURCES_equalizer = equalizer.c equalizer_presets.h SOURCES_compressor = compressor.c +SOURCES_karaoke = karaoke.c SOURCES_normvol = normvol.c SOURCES_audiobargraph_a = audiobargraph_a.c SOURCES_param_eq = param_eq.c @@ -18,6 +19,7 @@ libvlc_LTLIBRARIES += \ libchorus_flanger_plugin.la \ libcompressor_plugin.la \ libequalizer_plugin.la \ + libkaraoke_plugin.la \ libnormvol_plugin.la \ libparam_eq_plugin.la \ libscaletempo_plugin.la \ diff --git a/modules/audio_filter/karaoke.c b/modules/audio_filter/karaoke.c new file mode 100644 index 0000000000000000000000000000000000000000..81bc27611009174256e1a0eff29a0ff19e315865 --- /dev/null +++ b/modules/audio_filter/karaoke.c @@ -0,0 +1,79 @@ +/***************************************************************************** + * karaoke.c : karaoke mode + ***************************************************************************** + * Copyright © 2011 Rémi Denis-Courmont + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <assert.h> + +#include <vlc_common.h> +#include <vlc_aout.h> +#include <vlc_filter.h> +#include <vlc_plugin.h> + +static int Open (vlc_object_t *); + +vlc_module_begin () + set_shortname (N_("Karaoke")) + set_description (N_("Simple Karaoke filter")) + set_category (CAT_AUDIO) + set_subcategory (SUBCAT_AUDIO_AFILTER) + + set_capability ("audio filter", 0) + set_callbacks (Open, NULL) +vlc_module_end () + +static block_t *Process (filter_t *, block_t *); + +static int Open (vlc_object_t *obj) +{ + filter_t *filter = (filter_t *)obj; + + if (filter->fmt_in.audio.i_format != VLC_CODEC_FL32 + || !AOUT_FMTS_IDENTICAL(&filter->fmt_in.audio, &filter->fmt_out.audio)) + return VLC_EGENERIC; + + if (filter->fmt_in.audio.i_channels != 2) + { + msg_Err (filter, "voice removal requires stereo"); + return VLC_EGENERIC; + } + + filter->pf_audio_filter = Process; + return VLC_SUCCESS; +} + +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; +} diff --git a/po/POTFILES.in b/po/POTFILES.in index ab6ea467d703b30f0b43f609b53c4ddc1e6f2d7a..c586e08a4fc319078205041d07a8c12673d0eefa 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -300,6 +300,7 @@ modules/audio_filter/converter/format.c modules/audio_filter/converter/mpgatofixed32.c modules/audio_filter/equalizer.c modules/audio_filter/equalizer_presets.h +modules/audio_filter/karaoke.c modules/audio_filter/normvol.c modules/audio_filter/param_eq.c modules/audio_filter/resampler/bandlimited.c