From 4875845b44a02b1c7f1b4f0a57c22597e0c01c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net> Date: Sat, 8 Oct 2011 11:47:13 +0300 Subject: [PATCH] Add trivial ugly stereo karaoke filter --- modules/LIST | 1 + modules/audio_filter/Modules.am | 2 + modules/audio_filter/karaoke.c | 79 +++++++++++++++++++++++++++++++++ po/POTFILES.in | 1 + 4 files changed, 83 insertions(+) create mode 100644 modules/audio_filter/karaoke.c diff --git a/modules/LIST b/modules/LIST index 403b47e0da84..fd93ff032a4d 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 db4d9a795e3d..6643c84eaf48 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 000000000000..81bc27611009 --- /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 ab6ea467d703..c586e08a4fc3 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 -- GitLab