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