[MPlayer-dev-eng] lets devoice the world ;)

Reynaldo H. Verdejo Pinochet reynaldo at opendot.cl
Fri May 12 08:14:21 CEST 2006


Attached you will find an small and simple karaoke (voice removal)
filter, right now its little more than a proof of concept but it
works ;) feel free to try it on stereo music, 2 chan audio movies,
whatever. Im working on make it perform better by adding some band
pass filters. Im planing to ad it to our libaf, anyone against? i can
asure you its harmless.

Best regards

	Reynaldo
-------------- next part --------------
Index: libaf/af.c
===================================================================
RCS file: /cvsroot/mplayer/main/libaf/af.c,v
retrieving revision 1.54
diff -a -u -r1.54 af.c
--- libaf/af.c	24 Apr 2006 07:20:33 -0000	1.54
+++ libaf/af.c	12 May 2006 03:37:31 -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 
 };
 
Index: libaf/Makefile
===================================================================
RCS file: /cvsroot/mplayer/main/libaf/Makefile,v
retrieving revision 1.30
diff -a -u -r1.30 Makefile
--- libaf/Makefile	13 Apr 2006 10:36:17 -0000	1.30
+++ libaf/Makefile	12 May 2006 03:38:06 -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 \
--- /dev/null	2006-05-11 04:55:08.396704344 -0400
+++ libaf/af_karaoke.c	2006-05-11 23:35:15.000000000 -0400
@@ -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 <stdio.h>
+#include <stdlib.h>
+#include <string.h> 
+
+#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;i<len;i+=nch)
+	{
+		a[i] = (a[i] - a[i+1]) * 0.7;
+		a[i+1]=a[i];
+	}
+	
+	return c;
+}
+
+// Allocate memory and set function pointers
+static int open(af_instance_t* af){
+	af->control	= 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
+};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/attachments/20060512/319ca370/attachment.pgp>


More information about the MPlayer-dev-eng mailing list