Mercurial > audlegacy-plugins
annotate src/sndstretch/sndstretch_xmms.c @ 2499:4d6045c20cc5
Include cleanups, part #4.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 31 Mar 2008 15:18:05 +0300 |
parents | b8da6a0b0da2 |
children | 769e17da93dd |
rev | line source |
---|---|
881 | 1 // sndstretch_xmms.c |
2 // | |
3 // sndstretch_xmms - xmms-output plugin for adjusting | |
4 // pitch and speed of s16le data | |
5 // Copyright (C) 2001 Florian Berger | |
6 // Email: florian.berger@jk.uni-linz.ac.at | |
7 // | |
8 // This program is free software; you can redistribute it and/or modify | |
9 // it under the terms of the GNU General Public License Version 2 as | |
10 // published by the Free Software Foundation; | |
11 // | |
12 // This program is distributed in the hope that it will be useful, | |
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 // GNU General Public License for more details. | |
16 // | |
17 // You should have received a copy of the GNU General Public License | |
18 // along with this program; if not, write to the Free Software | |
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
20 // | |
21 // | |
22 | |
23 #include "sndstretch.h" | |
24 #include "sndstretch_xmms-logo.xpm" | |
25 #include "FB_logo.xpm" | |
26 | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
27 #include "config.h" |
1950
2ebeb7816c5e
Change from "" to <>-style includes. With thanks to ccr for the correct sed voodoo.
chainsaw@localhost
parents:
1642
diff
changeset
|
28 #include <audacious/plugin.h> |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
29 #include <audacious/i18n.h> |
881 | 30 #include <gtk/gtk.h> |
31 #include <math.h> | |
32 #include <stdlib.h> | |
33 #include <stdio.h> | |
34 #include <string.h> | |
35 | |
36 #define SNDSTRETCH_VERSION_STRING "0.7" | |
37 | |
38 #define SS sndstretch_var | |
39 | |
40 void sndstretch_init (void); | |
41 void sndstretch_about (void); | |
42 void sndstretch_config (void); | |
43 int sndstretch_mod_samples (gpointer *ptr, gint length, AFormat fmt, gint srate, gint nch); | |
44 | |
45 EffectPlugin sndstretch_ep = { | |
1642 | 46 .description = "SndStretch", |
47 .init = sndstretch_init, | |
48 .about = sndstretch_about, | |
49 .configure = sndstretch_config, | |
50 .mod_samples = sndstretch_mod_samples, | |
881 | 51 }; |
52 | |
1071 | 53 EffectPlugin *sndstretch_eplist[] = { &sndstretch_ep, NULL }; |
881 | 54 |
1395
761e17b23e0c
added Discovery plugin type
Cristi Magherusan <majeru@atheme-project.org>
parents:
1369
diff
changeset
|
55 DECLARE_PLUGIN(sndstretch, NULL, NULL, NULL, NULL, sndstretch_eplist, NULL, NULL, NULL); |
881 | 56 |
57 static struct { | |
58 int handle; // file handle | |
59 int fragsize; | |
60 int chnr; | |
61 int paused; | |
62 int time_offs; | |
63 int fmtsize; | |
64 int fmt; | |
65 int sampfreq; | |
66 int written; | |
67 int bpsec; | |
68 int vol_l,vol_r; | |
69 int going; | |
70 double pitch; | |
71 double speed; | |
72 double scale; | |
73 int short_overlap; | |
74 int volume_corr; | |
75 GtkObject * pitch_adj; | |
76 GtkObject * speed_adj; | |
77 GtkObject * scale_adj; | |
78 } sndstretch_var; | |
79 | |
80 | |
81 static const char sndstretch_title_text[] = "SndStretch xmms - " SNDSTRETCH_VERSION_STRING; | |
82 | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
83 static const gchar sndstretch_about_text[] = |
881 | 84 "Copyright (C) 2001 Florian Berger\n<harpin_floh@yahoo.de>\n" |
85 "Ported to Audacious by Michael Färber\n" | |
86 "http://www.geocities.com/harpin_floh/home.html"; | |
87 | |
88 static const gchar sndstretch_GPL_text[] = | |
89 "This program is free software; you can redistribute it and/or modify " | |
90 "it under the terms of the GNU General Public License as published by " | |
91 "the Free Software Foundation; either version 2 of the License, or " | |
92 "(at your option) any later version.\n\n" | |
93 "This program is distributed in the hope that it will be useful, " | |
94 "but WITHOUT ANY WARRANTY; without even the implied warranty of " | |
95 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " | |
96 "GNU General Public License for more details.\n\n" | |
97 "You should have received a copy of the GNU General Public License " | |
98 "along with this program; if not, write to the Free Software " | |
99 "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, " | |
100 "USA."; | |
101 | |
102 GtkWidget * sndstretch_about_dialog = NULL; | |
103 GtkWidget * sndstretch_config_dialog = NULL; | |
104 | |
105 | |
106 static gint sndstretch_about_destroy_cb(GtkWidget * w, GdkEventAny * e, gpointer data) | |
107 { | |
108 gtk_widget_destroy(sndstretch_about_dialog); | |
109 sndstretch_about_dialog = NULL; | |
110 return TRUE; | |
111 } | |
112 | |
113 static void sndstretch_about_ok_cb(GtkButton * button, gpointer data) | |
114 { | |
115 gtk_widget_destroy(GTK_WIDGET(sndstretch_about_dialog)); | |
116 sndstretch_about_dialog = NULL; | |
117 } | |
118 | |
119 void sndstretch_about(void) | |
120 { | |
121 GtkWidget * vbox, * scrolltext, * button; | |
122 GtkWidget * titlelabel, * copylabel; | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
123 GtkWidget * text; |
881 | 124 GtkTextBuffer * textbuffer; |
125 GtkTextIter iter; | |
126 | |
127 GdkPixmap * logopix; | |
128 GdkBitmap * logomask; | |
129 GtkWidget * logo; | |
130 | |
131 GdkPixmap * FBlogopix; | |
132 GdkBitmap * FBlogomask; | |
133 GtkWidget * FBlogo; | |
134 GtkWidget * copyhbox, * copy_rbox, * copy_lbox; | |
135 | |
136 | |
137 if (sndstretch_about_dialog != NULL) | |
138 return; | |
139 | |
140 sndstretch_about_dialog = gtk_dialog_new(); | |
141 gtk_widget_show(sndstretch_about_dialog); | |
142 | |
143 /* title logo */ | |
144 logopix = gdk_pixmap_create_from_xpm_d(sndstretch_about_dialog->window, &logomask, | |
145 NULL, | |
146 (gchar **) sndstretch_xmms_logo_xpm); | |
147 logo = gtk_pixmap_new(logopix,logomask); | |
148 | |
149 /* FB-logo */ | |
150 FBlogopix = gdk_pixmap_create_from_xpm_d(sndstretch_about_dialog->window, &FBlogomask, | |
151 NULL, | |
152 (gchar **) FB_logo_xpm); | |
153 FBlogo = gtk_pixmap_new(FBlogopix,FBlogomask); | |
154 | |
155 | |
156 gtk_signal_connect(GTK_OBJECT(sndstretch_about_dialog), "destroy", | |
157 GTK_SIGNAL_FUNC(sndstretch_about_destroy_cb), NULL); | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
158 gtk_window_set_title(GTK_WINDOW(sndstretch_about_dialog), _("About SndStretch")); |
881 | 159 |
160 | |
161 /* labels */ | |
162 titlelabel = gtk_label_new(sndstretch_title_text); | |
163 copylabel = gtk_label_new(sndstretch_about_text); | |
164 gtk_label_set_justify(GTK_LABEL(copylabel), GTK_JUSTIFY_LEFT); | |
165 | |
166 copy_lbox = gtk_hbox_new(FALSE,0); | |
167 copy_rbox = gtk_hbox_new(FALSE,0); | |
168 gtk_box_pack_end (GTK_BOX(copy_lbox), FBlogo, FALSE, TRUE, 0); | |
169 gtk_box_pack_start(GTK_BOX(copy_rbox), copylabel, FALSE, TRUE, 0); | |
170 copyhbox = gtk_hbox_new(FALSE,0); | |
171 gtk_box_pack_start(GTK_BOX(copyhbox), copy_lbox, TRUE, TRUE, 5); | |
172 gtk_box_pack_start(GTK_BOX(copyhbox), copy_rbox, TRUE, TRUE, 5); | |
173 | |
174 vbox = gtk_vbox_new(FALSE, 5); | |
175 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(sndstretch_about_dialog)->vbox), vbox, | |
176 TRUE, TRUE, 5); | |
177 | |
178 scrolltext = gtk_scrolled_window_new(NULL,NULL); | |
179 text = gtk_text_view_new(); | |
180 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); | |
181 gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); | |
182 textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); | |
183 gtk_text_buffer_get_iter_at_offset(textbuffer, &iter, 0); | |
184 gtk_text_buffer_insert(textbuffer, &iter, | |
185 sndstretch_GPL_text, strlen(sndstretch_GPL_text)); | |
186 | |
187 | |
188 scrolltext = gtk_scrolled_window_new(NULL, NULL); | |
189 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolltext), | |
190 GTK_POLICY_AUTOMATIC, | |
191 GTK_POLICY_AUTOMATIC); | |
192 gtk_container_add(GTK_CONTAINER(scrolltext), text); | |
193 | |
194 gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, TRUE, 5); | |
195 gtk_box_pack_start(GTK_BOX(vbox), titlelabel, FALSE, TRUE, 5); | |
196 gtk_box_pack_start(GTK_BOX(vbox), copyhbox, FALSE, TRUE, 5); | |
197 gtk_box_pack_start(GTK_BOX(vbox), scrolltext, TRUE, TRUE, 5); | |
198 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); | |
199 gtk_widget_set_usize(scrolltext, -1, 110); | |
200 | |
201 button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); | |
202 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(sndstretch_about_dialog)->action_area), | |
203 button, FALSE, FALSE, 0); | |
204 gtk_signal_connect(GTK_OBJECT(button), "clicked", | |
205 GTK_SIGNAL_FUNC(sndstretch_about_ok_cb), NULL); | |
206 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); | |
207 gtk_widget_grab_default(button); | |
208 gtk_widget_show(button); | |
209 gtk_widget_show_all(sndstretch_about_dialog); | |
210 } | |
211 | |
212 | |
213 | |
214 static void speed_change_cb(GtkAdjustment * adj, gpointer data) | |
215 { | |
216 SS.speed = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10)); | |
217 } | |
218 | |
219 static void pitch_change_cb(GtkAdjustment * adj, gpointer data) | |
220 { | |
221 SS.pitch = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10)); | |
222 gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.scale_adj), | |
223 (GTK_ADJUSTMENT(SS.scale_adj)->upper-10.0)*log(SS.pitch)/log(2.0)); | |
224 } | |
225 | |
226 static void scale_change_cb(GtkAdjustment * adj, gpointer data) | |
227 { | |
228 double speed_eff; | |
229 | |
230 SS.scale = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10)); | |
231 speed_eff= SS.speed/SS.pitch; | |
232 SS.pitch = SS.scale; | |
233 SS.speed = speed_eff*SS.scale; | |
234 if (SS.speed>2.0) SS.speed=2.0; | |
235 if (SS.speed<0.5) SS.speed=0.5; | |
236 gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.speed_adj), | |
237 (GTK_ADJUSTMENT(SS.speed_adj)->upper-10.0)*log(SS.speed)/log(2.0)); | |
238 gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.pitch_adj), | |
239 (GTK_ADJUSTMENT(SS.pitch_adj)->upper-10.0)*log(SS.pitch)/log(2.0)); | |
240 } | |
241 | |
242 static void overlap_toggle_cb(GtkToggleButton *butt, gpointer user_data) | |
243 { | |
244 SS.short_overlap = gtk_toggle_button_get_active(butt); | |
245 } | |
246 | |
247 static void volume_toggle_cb(GtkToggleButton *butt, gpointer user_data) | |
248 { | |
249 SS.volume_corr = gtk_toggle_button_get_active(butt); | |
250 } | |
251 | |
252 static void sndstretch_config_logobutton_cb(GtkButton * button, gpointer data) | |
253 { | |
254 sndstretch_about(); | |
255 } | |
256 | |
257 static gint sndstretch_config_destroy_cb(GtkWidget * w, GdkEventAny * e, gpointer data) | |
258 { | |
2124 | 259 ConfigDb *db = aud_cfg_db_open(); |
881 | 260 |
2124 | 261 aud_cfg_db_set_double(db, "sndstretch", "pitch", SS.pitch); |
262 aud_cfg_db_set_double(db, "sndstretch", "speed", SS.speed); | |
881 | 263 |
2124 | 264 aud_cfg_db_set_bool(db, "sndstretch", "short_overlap", SS.short_overlap); |
265 aud_cfg_db_set_bool(db, "sndstretch", "volume_corr", SS.volume_corr); | |
881 | 266 |
2124 | 267 aud_cfg_db_close(db); |
881 | 268 |
269 gtk_widget_destroy(sndstretch_config_dialog); | |
270 sndstretch_config_dialog = NULL; | |
271 return TRUE; | |
272 } | |
273 | |
274 void sndstretch_config(void) | |
275 { | |
276 GtkWidget * vbox; | |
277 GtkWidget * speed_scale, * pitch_scale, * scale_scale; | |
278 GtkWidget * speed_spin, * pitch_spin, * scale_spin; | |
279 GtkWidget * speed_hbox, * pitch_hbox, * scale_hbox, * opt_hbox; | |
280 GtkWidget * speed_frame, * pitch_frame, * scale_frame, * opt_frame; | |
281 GdkPixmap * logopix; | |
282 GdkBitmap * logomask; | |
283 GtkWidget * logo; | |
284 GtkWidget * logohbox; | |
285 GtkWidget * logobutton; | |
286 GtkWidget * volume_toggle; | |
287 GtkWidget * overlap_toggle; | |
288 | |
289 if (sndstretch_config_dialog != NULL) | |
290 return; | |
291 | |
292 sndstretch_config_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
293 gtk_widget_show(sndstretch_config_dialog); | |
294 | |
295 logopix = gdk_pixmap_create_from_xpm_d(sndstretch_config_dialog->window, &logomask, | |
296 NULL, (gchar **)sndstretch_xmms_logo_xpm); | |
297 | |
298 logo = gtk_pixmap_new(logopix,logomask); | |
299 | |
300 logobutton = gtk_button_new(); | |
301 gtk_button_set_relief(GTK_BUTTON(logobutton), GTK_RELIEF_NONE); | |
302 gtk_container_add(GTK_CONTAINER(logobutton), logo); | |
303 gtk_signal_connect(GTK_OBJECT(logobutton), "clicked", | |
304 GTK_SIGNAL_FUNC(sndstretch_config_logobutton_cb), NULL); | |
305 GTK_WIDGET_SET_FLAGS(logobutton, GTK_CAN_DEFAULT); | |
306 gtk_widget_grab_default(logobutton); | |
307 | |
308 logohbox = gtk_hbox_new(FALSE,0); // to make it rightbound | |
309 gtk_box_pack_end(GTK_BOX(logohbox), logobutton, FALSE, TRUE, 4); | |
310 | |
311 SS.speed_adj = gtk_adjustment_new( 100.0*log(SS.speed)/log(2.0), | |
312 -100, 100+10, 2, 10, 10); | |
313 SS.pitch_adj = gtk_adjustment_new( 120.0*log(SS.pitch)/log(2.0), | |
314 -120, 120+10, 2, 10, 10); | |
315 SS.scale_adj = gtk_adjustment_new( 100.0*log(SS.scale)/log(2.0), | |
316 -100, 100+10, 2, 10, 10); | |
317 | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
318 volume_toggle = gtk_check_button_new_with_label(_("Volume corr.")); |
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
319 overlap_toggle = gtk_check_button_new_with_label(_("Short Overlap")); |
881 | 320 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(volume_toggle), SS.volume_corr ); |
321 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(overlap_toggle), SS.short_overlap ); | |
322 | |
323 | |
324 gtk_signal_connect(GTK_OBJECT(SS.speed_adj), "value-changed", | |
325 GTK_SIGNAL_FUNC(speed_change_cb), NULL); | |
326 | |
327 gtk_signal_connect(GTK_OBJECT(SS.pitch_adj), "value-changed", | |
328 GTK_SIGNAL_FUNC(pitch_change_cb), NULL); | |
329 | |
330 gtk_signal_connect(GTK_OBJECT(SS.scale_adj), "value-changed", | |
331 GTK_SIGNAL_FUNC(scale_change_cb), NULL); | |
332 | |
333 gtk_signal_connect(GTK_OBJECT(volume_toggle), "toggled", | |
334 GTK_SIGNAL_FUNC(volume_toggle_cb), NULL); | |
335 | |
336 gtk_signal_connect(GTK_OBJECT(overlap_toggle), "toggled", | |
337 GTK_SIGNAL_FUNC(overlap_toggle_cb), NULL); | |
338 | |
339 speed_scale = gtk_hscale_new(GTK_ADJUSTMENT(SS.speed_adj)); | |
340 pitch_scale = gtk_hscale_new(GTK_ADJUSTMENT(SS.pitch_adj)); | |
341 scale_scale = gtk_hscale_new(GTK_ADJUSTMENT(SS.scale_adj)); | |
342 gtk_scale_set_draw_value (GTK_SCALE(speed_scale),FALSE); | |
343 gtk_scale_set_draw_value (GTK_SCALE(pitch_scale),FALSE); | |
344 gtk_scale_set_draw_value (GTK_SCALE(scale_scale),FALSE); | |
345 | |
346 speed_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.speed_adj),1.0,2); | |
347 pitch_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.pitch_adj),1.0,2); | |
348 scale_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.scale_adj),1.0,2); | |
349 gtk_widget_set_usize (speed_spin,70,20); | |
350 gtk_widget_set_usize (pitch_spin,70,20); | |
351 gtk_widget_set_usize (scale_spin,70,20); | |
352 gtk_entry_set_max_length (GTK_ENTRY(pitch_spin),7); | |
353 gtk_entry_set_max_length (GTK_ENTRY(speed_spin),7); | |
354 gtk_entry_set_max_length (GTK_ENTRY(scale_spin),7); | |
355 | |
356 speed_hbox = gtk_hbox_new(FALSE,5); | |
357 pitch_hbox = gtk_hbox_new(FALSE,5); | |
358 scale_hbox = gtk_hbox_new(FALSE,5); | |
359 opt_hbox = gtk_hbox_new(FALSE,5); | |
360 gtk_container_set_border_width(GTK_CONTAINER(speed_hbox), 3); | |
361 gtk_container_set_border_width(GTK_CONTAINER(pitch_hbox), 3); | |
362 gtk_container_set_border_width(GTK_CONTAINER(scale_hbox), 3); | |
363 gtk_container_set_border_width(GTK_CONTAINER(opt_hbox), 3); | |
364 gtk_box_pack_start(GTK_BOX(speed_hbox), speed_spin, FALSE, TRUE, 5); | |
365 gtk_box_pack_start(GTK_BOX(speed_hbox), speed_scale, TRUE, TRUE, 5); | |
366 gtk_box_pack_start(GTK_BOX(pitch_hbox), pitch_spin, FALSE, TRUE, 5); | |
367 gtk_box_pack_start(GTK_BOX(pitch_hbox), pitch_scale, TRUE, TRUE, 5); | |
368 gtk_box_pack_start(GTK_BOX(scale_hbox), scale_spin, FALSE, TRUE, 5); | |
369 gtk_box_pack_start(GTK_BOX(scale_hbox), scale_scale, TRUE, TRUE, 5); | |
370 gtk_box_pack_start(GTK_BOX(opt_hbox), volume_toggle, FALSE, TRUE, 5); | |
371 gtk_box_pack_start(GTK_BOX(opt_hbox), overlap_toggle,TRUE, TRUE, 5); | |
372 | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
373 speed_frame = gtk_frame_new(_("Speed")); |
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
374 pitch_frame = gtk_frame_new(_("Pitch")); |
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
375 scale_frame = gtk_frame_new(_("Scale")); |
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
376 opt_frame = gtk_frame_new(_("Options")); |
881 | 377 gtk_container_add(GTK_CONTAINER(speed_frame), speed_hbox); |
378 gtk_container_add(GTK_CONTAINER(pitch_frame), pitch_hbox); | |
379 gtk_container_add(GTK_CONTAINER(scale_frame), scale_hbox); | |
380 gtk_container_add(GTK_CONTAINER(opt_frame), opt_hbox); | |
381 gtk_container_set_border_width(GTK_CONTAINER(speed_frame), 5); | |
382 gtk_container_set_border_width(GTK_CONTAINER(pitch_frame), 5); | |
383 gtk_container_set_border_width(GTK_CONTAINER(scale_frame), 5); | |
384 gtk_container_set_border_width(GTK_CONTAINER(opt_frame), 5); | |
385 | |
386 vbox=gtk_vbox_new(FALSE,0); | |
387 gtk_box_pack_start(GTK_BOX(vbox), pitch_frame, FALSE, TRUE, 0); | |
388 gtk_box_pack_start(GTK_BOX(vbox), speed_frame, FALSE, TRUE, 0); | |
389 gtk_box_pack_start(GTK_BOX(vbox), scale_frame, FALSE, TRUE, 0); | |
390 gtk_box_pack_start(GTK_BOX(vbox), opt_frame, FALSE, TRUE, 0); | |
391 gtk_box_pack_start(GTK_BOX(vbox), logohbox, FALSE, TRUE, 0); | |
392 | |
393 gtk_signal_connect(GTK_OBJECT(sndstretch_config_dialog), "destroy", | |
394 GTK_SIGNAL_FUNC(sndstretch_config_destroy_cb), NULL); | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
395 gtk_window_set_title(GTK_WINDOW(sndstretch_config_dialog), _("SndStretch - Configuration")); |
881 | 396 gtk_container_add(GTK_CONTAINER(sndstretch_config_dialog), vbox); |
397 | |
1369
6d87598ff8a9
Internationalization... (The first step of the "i18n" project could be ready for Audacious 1.4 release)
Stany HENRY <StrassBoy@gmail.com>
parents:
1071
diff
changeset
|
398 gtk_widget_set_usize(sndstretch_config_dialog, -1, -1); |
881 | 399 gtk_widget_show_all(sndstretch_config_dialog); |
400 } | |
401 | |
402 | |
403 void sndstretch_init(void) | |
404 { | |
405 ConfigDb *db; | |
406 | |
2124 | 407 db = aud_cfg_db_open(); |
881 | 408 |
409 SS.fragsize=0; | |
410 SS.chnr=2; | |
411 SS.paused=0; | |
412 SS.time_offs=0; | |
413 SS.fmtsize=2; | |
414 SS.fmt=FMT_S16_NE; | |
415 SS.sampfreq=44100; | |
416 SS.written=0; | |
417 SS.bpsec=176400; | |
418 SS.vol_r=50; | |
419 SS.vol_l=50; | |
420 SS.pitch=1.0; | |
421 SS.speed=1.0; | |
422 SS.scale=1.0; | |
423 | |
424 gboolean b; | |
2124 | 425 aud_cfg_db_get_double(db, "sndstretch", "pitch", &SS.pitch); |
426 aud_cfg_db_get_double(db, "sndstretch", "speed", &SS.speed); | |
427 if (aud_cfg_db_get_bool(db, "sndstretch", "short_overlap", &b)) | |
881 | 428 SS.short_overlap = b; |
2124 | 429 if (aud_cfg_db_get_bool(db, "sndstretch", "volume_corr", &b)) |
881 | 430 SS.volume_corr = b; |
2124 | 431 aud_cfg_db_close(db); |
881 | 432 } |
433 | |
434 int sndstretch_mod_samples (gpointer *ptr, gint length, AFormat fmt, gint srate, gint nch) | |
435 { | |
436 static short int * buff_o; | |
437 static int prod_size; | |
438 static PitchSpeedJob job; | |
439 static int init_job=1; | |
440 | |
441 buff_o = realloc(buff_o, 65536); | |
442 | |
443 if (init_job) { | |
444 InitPitchSpeedJob(&job); | |
445 init_job = 0; | |
446 } | |
447 snd_pitch_speed_job(*ptr, nch, length/2, 0, SS.pitch, SS.speed, | |
448 (SS.short_overlap) ? 882 : 1764, | |
449 buff_o, &prod_size, &job, SS.volume_corr); | |
450 | |
451 *ptr = (gpointer) buff_o; | |
452 | |
453 return prod_size*2; | |
454 } |