# HG changeset patch # User reynaldo # Date 1147509991 0 # Node ID 0ea3c732d72dc642df60d04c3e641da9886c15b0 # Parent 241102f92b1372068a4f623c32c5a44831b1f295 New karaoke af diff -r 241102f92b13 -r 0ea3c732d72d AUTHORS --- a/AUTHORS Sat May 13 07:22:36 2006 +0000 +++ b/AUTHORS Sat May 13 08:46:31 2006 +0000 @@ -767,6 +767,8 @@ * mp_msg transition on unmaintained libao2 drivers * translatables to help_mp on input/libmpdemux * .wpl playlist support hack + * karaoke audio filter + * TOOLS/qepdvcd.sh Wigren, Per * bmovl - Bitmap Overlay video filter diff -r 241102f92b13 -r 0ea3c732d72d ChangeLog --- a/ChangeLog Sat May 13 07:22:36 2006 +0000 +++ b/ChangeLog Sat May 13 08:46:31 2006 +0000 @@ -569,6 +569,7 @@ * big-endian fixes in rgb2rgb converter * yuv2rgb Altivec optimization fixes * support for LADSPA plugins + * new proof-of-concept karaoke (voice removal) filter GUI: * unified audio options dialog, also for ALSA diff -r 241102f92b13 -r 0ea3c732d72d DOCS/man/en/mplayer.1 --- a/DOCS/man/en/mplayer.1 Sat May 13 07:22:36 2006 +0000 +++ b/DOCS/man/en/mplayer.1 Sat May 13 08:46:31 2006 +0000 @@ -4538,6 +4538,18 @@ Noise gate filter similar to the comp audio filter. This filter is untested, maybe even unusable. . +.TP +.B karaoke\ \ \ +Simple voice removal filter. +. +This filter exploits the fact that voice is usually recorded with +mono gear and later 'center' mixed on the final audio stream. +. +Beware that this filter will in fact turn your signal into mono. +. +Works well over 2 channel tracks; Don't ever bother trying it on anything +but 2 chan stereo. +. . . .SH "VIDEO FILTERS" diff -r 241102f92b13 -r 0ea3c732d72d DOCS/tech/MAINTAINERS --- a/DOCS/tech/MAINTAINERS Sat May 13 07:22:36 2006 +0000 +++ b/DOCS/tech/MAINTAINERS Sat May 13 08:46:31 2006 +0000 @@ -123,6 +123,7 @@ * general: Alex Beregszaszi * af_ladspa.c - Ivo van Poorten * af_equalizer.c - Reynaldo H. Verdejo Pinochet + * af_karaoke.c - Reynaldo H. Verdejo Pinochet libvo drivers: * vo_3dfx.c - OBSOLETED, use xv or tdfxfb diff -r 241102f92b13 -r 0ea3c732d72d libaf/Makefile --- a/libaf/Makefile Sat May 13 07:22:36 2006 +0000 +++ b/libaf/Makefile Sat May 13 08:46:31 2006 +0000 @@ -14,6 +14,7 @@ af_format.c \ af_gate.c \ af_hrtf.c \ + af_karaoke.c \ af_pan.c \ af_resample.c \ af_sinesupress.c \ diff -r 241102f92b13 -r 0ea3c732d72d libaf/af.c --- a/libaf/af.c Sat May 13 07:22:36 2006 +0000 +++ b/libaf/af.c Sat May 13 08:46:31 2006 +0000 @@ -30,6 +30,7 @@ extern af_info_t af_info_ladspa; extern af_info_t af_info_center; extern af_info_t af_info_sinesupress; +extern af_info_t af_info_karaoke; static af_info_t* filter_list[]={ &af_info_dummy, @@ -59,6 +60,7 @@ #endif &af_info_center, &af_info_sinesupress, + &af_info_karaoke, NULL }; diff -r 241102f92b13 -r 0ea3c732d72d libaf/af_karaoke.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libaf/af_karaoke.c Sat May 13 08:46:31 2006 +0000 @@ -0,0 +1,86 @@ +/* + (c)2006 MPlayer / Reynaldo H. Verdejo Pinochet + Based on code by Alex Beregszaszi for his 'center' filter + + License: GPL + + Simple voice removal filter +*/ + +#include +#include +#include + +#include "af.h" + +// Data for specific instances of this filter + +// Initialization and runtime control +static int control(struct af_instance_s* af, int cmd, void* arg) +{ + switch(cmd){ + case AF_CONTROL_REINIT: + af->data->rate = ((af_data_t*)arg)->rate; + af->data->nch = ((af_data_t*)arg)->nch; + af->data->format= AF_FORMAT_FLOAT_NE; + af->data->bps = 4; + return af_test_output(af,(af_data_t*)arg); + } + return AF_UNKNOWN; +} + +// Deallocate memory +static void uninit(struct af_instance_s* af) +{ + if(af->data) + free(af->data); +} + +// Filter data through filter +static af_data_t* play(struct af_instance_s* af, af_data_t* data) +{ + af_data_t* c = data; // Current working data + float* a = c->audio; // Audio data + int len = c->len/4; // Number of samples in current audio block + int nch = c->nch; // Number of channels + register int i; + + /* + FIXME1 add a low band pass filter to avoid supressing + centered bass/drums + FIXME2 better calculated* atenuation factor + */ + + for(i=0;icontrol = control; + af->uninit = uninit; + af->play = play; + af->mul.n = 1; + af->mul.d = 1; + af->data = calloc(1,sizeof(af_data_t)); + + if(af->data == NULL) + return AF_ERROR; + + return AF_OK; +} + +// Description of this filter +af_info_t af_info_karaoke = { + "Simple karaoke/voice-removal audio filter", + "karaoke", + "Reynaldo H. Verdejo Pinochet", + "", + AF_FLAGS_NOT_REENTRANT, + open +};