Mercurial > mplayer.hg
annotate libaf/af_karaoke.c @ 29130:33956c5f5005
Reemit the ID_AID_x_LANG for the track. This allows the identification of the
audio track by language code (en or es) rather than by ID (128 or 129).
patch by Kevin DeKorte, kdekorte gmail com
author | diego |
---|---|
date | Sat, 11 Apr 2009 13:51:02 +0000 |
parents | 72d0b1444141 |
children | 0f1b5b68af32 |
rev | line source |
---|---|
18470 | 1 /* |
28229
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
2 * simple voice removal filter |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
3 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
4 * copyright (c) 2006 Reynaldo H. Verdejo Pinochet |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
5 * Based on code by Alex Beregszaszi for his 'center' filter. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
6 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
7 * This file is part of MPlayer. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
8 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
9 * MPlayer is free software; you can redistribute it and/or modify |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
10 * it under the terms of the GNU General Public License as published by |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
11 * the Free Software Foundation; either version 2 of the License, or |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
12 * (at your option) any later version. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
13 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
14 * MPlayer is distributed in the hope that it will be useful, |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
17 * GNU General Public License for more details. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
18 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
19 * You should have received a copy of the GNU General Public License along |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
22 */ |
18470 | 23 |
24 #include <stdio.h> | |
25 #include <stdlib.h> | |
26 #include <string.h> | |
27 | |
28 #include "af.h" | |
29 | |
30 // Data for specific instances of this filter | |
31 | |
32 // Initialization and runtime control | |
33 static int control(struct af_instance_s* af, int cmd, void* arg) | |
34 { | |
35 switch(cmd){ | |
36 case AF_CONTROL_REINIT: | |
37 af->data->rate = ((af_data_t*)arg)->rate; | |
38 af->data->nch = ((af_data_t*)arg)->nch; | |
39 af->data->format= AF_FORMAT_FLOAT_NE; | |
19199 | 40 af->data->bps = 4; |
18470 | 41 return af_test_output(af,(af_data_t*)arg); |
42 } | |
43 return AF_UNKNOWN; | |
44 } | |
45 | |
46 // Deallocate memory | |
47 static void uninit(struct af_instance_s* af) | |
48 { | |
49 if(af->data) | |
50 free(af->data); | |
51 } | |
52 | |
53 // Filter data through filter | |
54 static af_data_t* play(struct af_instance_s* af, af_data_t* data) | |
55 { | |
56 af_data_t* c = data; // Current working data | |
57 float* a = c->audio; // Audio data | |
19199 | 58 int len = c->len/4; // Number of samples in current audio block |
18470 | 59 int nch = c->nch; // Number of channels |
60 register int i; | |
61 | |
62 /* | |
18589 | 63 FIXME1 add a low band pass filter to avoid suppressing |
18470 | 64 centered bass/drums |
18589 | 65 FIXME2 better calculated* attenuation factor |
18470 | 66 */ |
67 | |
68 for(i=0;i<len;i+=nch) | |
69 { | |
70 a[i] = (a[i] - a[i+1]) * 0.7; | |
71 a[i+1]=a[i]; | |
72 } | |
73 | |
74 return c; | |
75 } | |
76 | |
77 // Allocate memory and set function pointers | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
19199
diff
changeset
|
78 static int af_open(af_instance_t* af){ |
18470 | 79 af->control = control; |
80 af->uninit = uninit; | |
81 af->play = play; | |
24888 | 82 af->mul = 1; |
18470 | 83 af->data = calloc(1,sizeof(af_data_t)); |
84 | |
85 if(af->data == NULL) | |
86 return AF_ERROR; | |
87 | |
88 return AF_OK; | |
89 } | |
90 | |
91 // Description of this filter | |
92 af_info_t af_info_karaoke = { | |
93 "Simple karaoke/voice-removal audio filter", | |
94 "karaoke", | |
95 "Reynaldo H. Verdejo Pinochet", | |
96 "", | |
97 AF_FLAGS_NOT_REENTRANT, | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
19199
diff
changeset
|
98 af_open |
18470 | 99 }; |