Changeset 74
- Timestamp:
- 10/08/07 22:17:36 (1 year ago)
- Files:
-
- nekostring/trunk/gui/Makefile (modified) (1 diff)
- nekostring/trunk/gui/callbacks.c (modified) (2 diffs)
- nekostring/trunk/gui/callbacks.h (modified) (1 diff)
- nekostring/trunk/gui/interface.c (modified) (10 diffs)
- nekostring/trunk/gui/main.c (modified) (2 diffs)
- nekostring/trunk/gui/widgets.h (modified) (1 diff)
- nekostring/trunk/src/Makefile (modified) (1 diff)
- nekostring/trunk/src/gui_friendly_patches.c (modified) (2 diffs)
- nekostring/trunk/src/neko_ensemble.c (modified) (3 diffs)
- nekostring/trunk/src/neko_synth.h (modified) (1 diff)
- nekostring/trunk/src/neko_voice.h (modified) (1 diff)
- nekostring/trunk/src/neko_voice_render.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
nekostring/trunk/gui/Makefile
r73 r74 82 82 CC = gcc 83 83 CCDEPMODE = depmode=gcc3 84 CFLAGS = -g -O284 CFLAGS = 85 85 CPP = gcc -E 86 86 CPPFLAGS = nekostring/trunk/gui/callbacks.c
r39 r74 96 96 void on_voice_slider_change( GtkWidget *widget, gpointer data ) 97 97 { 98 GtkAdjustment *adj;98 // GtkAdjustment *adj; 99 99 100 100 … … 103 103 //float cval = GTK_ADJUSTMENT(widget)->value; // / 10.0f; 104 104 float cval = gtk_range_get_adjustment(GTK_RANGE(widget))->value; // / 10.0f; 105 float value;105 // float value; 106 106 107 107 //printf("from slider: %d -> %f\n",index, cval); nekostring/trunk/gui/callbacks.h
r39 r74 13 13 #include 14 14 void on_voice_slider_change( GtkWidget *widget, gpointer data ); 15 15 void update_voice_widget(int port, float value); 16 16 extern lo_address osc_host_address; 17 17 extern char * osc_control_path; nekostring/trunk/gui/interface.c
r41 r74 97 97 gtk_widget_set_size_request (vbox4, 50, 135); 98 98 99 vs_cello = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new ( 1, 0, 1, 0, 0, 0)));99 vs_cello = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (.75, 0, 1, 0, 0, 0))); 100 100 gtk_widget_show (vs_cello); 101 101 gtk_box_pack_start (GTK_BOX (vbox4), vs_cello, TRUE, FALSE, 0); … … 131 131 gtk_widget_set_size_request (vbox6, 50, 135); 132 132 133 vs_violin = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new ( 1, 0, 1, 0, 0, 0)));133 vs_violin = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (.8, 0, 1, 0, 0, 0))); 134 134 gtk_widget_show (vs_violin); 135 135 gtk_box_pack_start (GTK_BOX (vbox6), vs_violin, TRUE, FALSE, 0); … … 167 167 gtk_widget_set_size_request (vbox7, 50, 135); 168 168 169 vs_cspeed = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (1 .34706, 0.5, 2, 0, 0, 0)));169 vs_cspeed = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (1, 0.5, 2, 0, 0, 0))); 170 170 gtk_widget_show (vs_cspeed); 171 171 gtk_box_pack_start (GTK_BOX (vbox7), vs_cspeed, TRUE, FALSE, 0); … … 185 185 gtk_widget_set_size_request (vbox8, 50, 135); 186 186 187 vs_cdepth = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0 , 0, 1, 0, 0, 0)));187 vs_cdepth = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0.5, 0, 1, 0, 0, 0))); 188 188 gtk_widget_show (vs_cdepth); 189 189 gtk_box_pack_start (GTK_BOX (vbox8), vs_cdepth, TRUE, FALSE, 0); … … 202 202 gtk_widget_set_size_request (vbox9, 50, 135); 203 203 204 vs_vspeed = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0 .5, 0, 1, 0, 0, 0)));204 vs_vspeed = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0))); 205 205 gtk_widget_show (vs_vspeed); 206 206 gtk_box_pack_start (GTK_BOX (vbox9), vs_vspeed, TRUE, FALSE, 0); … … 219 219 gtk_widget_set_size_request (vbox10, 50, 135); 220 220 221 vs_vdepth = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0 .6541176, 0, 1, 0, 0, 0)));221 vs_vdepth = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0))); 222 222 gtk_widget_show (vs_vdepth); 223 223 gtk_box_pack_start (GTK_BOX (vbox10), vs_vdepth, TRUE, FALSE, 0); … … 257 257 gtk_widget_set_size_request (vbox11, 50, 135); 258 258 259 vs cale14 = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0.811765, 0, 1, 0, 0, 0)));260 gtk_widget_show (vs cale14);261 gtk_box_pack_start (GTK_BOX (vbox11), vs cale14, TRUE, FALSE, 0);262 gtk_widget_set_size_request (vs cale14, 50, 120);263 gtk_scale_set_draw_value (GTK_SCALE (vs cale14), FALSE);264 gtk_range_set_inverted (GTK_RANGE (vs cale14), TRUE);259 vs_tone = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0.75, 0, 1, 0, 0, 0))); 260 gtk_widget_show (vs_tone); 261 gtk_box_pack_start (GTK_BOX (vbox11), vs_tone, TRUE, FALSE, 0); 262 gtk_widget_set_size_request (vs_tone, 50, 120); 263 gtk_scale_set_draw_value (GTK_SCALE (vs_tone), FALSE); 264 gtk_range_set_inverted (GTK_RANGE (vs_tone), TRUE); 265 265 266 266 label18 = gtk_label_new ("Tone"); … … 274 274 gtk_widget_set_size_request (vbox12, 50, 135); 275 275 276 vs cale15 = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0.188235, 0, 1, 0, 0, 0)));277 gtk_widget_show (vs cale15);278 gtk_box_pack_start (GTK_BOX (vbox12), vs cale15, TRUE, FALSE, 0);279 gtk_widget_set_size_request (vs cale15, 50, 120);280 gtk_scale_set_draw_value (GTK_SCALE (vs cale15), FALSE);281 gtk_range_set_inverted (GTK_RANGE (vs cale15), TRUE);276 vs_volume = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0.7, 0, 1, 0, 0, 0))); 277 gtk_widget_show (vs_volume); 278 gtk_box_pack_start (GTK_BOX (vbox12), vs_volume, TRUE, FALSE, 0); 279 gtk_widget_set_size_request (vs_volume, 50, 120); 280 gtk_scale_set_draw_value (GTK_SCALE (vs_volume), FALSE); 281 gtk_range_set_inverted (GTK_RANGE (vs_volume), TRUE); 282 282 283 283 label19 = gtk_label_new ("Volume"); … … 458 458 GLADE_HOOKUP_OBJECT (window1, hbox4, "hbox4"); 459 459 GLADE_HOOKUP_OBJECT (window1, vbox11, "vbox11"); 460 GLADE_HOOKUP_OBJECT (window1, vs cale14, "vscale14");460 GLADE_HOOKUP_OBJECT (window1, vs_tone, "vs_tone"); 461 461 GLADE_HOOKUP_OBJECT (window1, label18, "label18"); 462 462 GLADE_HOOKUP_OBJECT (window1, vbox12, "vbox12"); 463 GLADE_HOOKUP_OBJECT (window1, vs cale15, "vscale15");463 GLADE_HOOKUP_OBJECT (window1, vs_volume, "vs_volume"); 464 464 GLADE_HOOKUP_OBJECT (window1, label19, "label19"); 465 465 GLADE_HOOKUP_OBJECT (window1, label17, "label17"); … … 511 511 "value_changed", GTK_SIGNAL_FUNC(on_voice_slider_change), 512 512 (gpointer)NEKO_PORT_VIBRATO_CHORUS); 513 gtk_signal_connect (GTK_OBJECT (vs_vdepth), 514 "value_changed", GTK_SIGNAL_FUNC(on_voice_slider_change), 515 (gpointer)NEKO_PORT_MIX); 516 513 gtk_signal_connect (GTK_OBJECT (vs_tone), 514 "value_changed", GTK_SIGNAL_FUNC(on_voice_slider_change), 515 (gpointer)NEKO_PORT_TONE); 516 gtk_signal_connect (GTK_OBJECT (vs_volume), 517 "value_changed", GTK_SIGNAL_FUNC(on_voice_slider_change), 518 (gpointer)NEKO_PORT_VOLUME); 517 519 518 520 return window1; nekostring/trunk/gui/main.c
r39 r74 25 25 #include "support.h" 26 26 #include "widgets.h" 27 #include "callbacks.h" 27 28 28 29 // define a few globals … … 47 48 } 48 49 49 osc_action_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) {50 void osc_action_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { 50 51 51 printf("%s\n",user_data);52 // printf("%s\n",user_data); 52 53 53 54 } 54 55 55 osc_control_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) {56 int osc_control_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { 56 57 57 58 int port; nekostring/trunk/gui/widgets.h
r19 r74 42 42 GtkWidget *hbox4; 43 43 GtkWidget *vbox11; 44 GtkWidget *vs cale14;44 GtkWidget *vs_tone; 45 45 GtkWidget *label18; 46 46 GtkWidget *vbox12; 47 GtkWidget *vs cale15;47 GtkWidget *vs_volume; 48 48 GtkWidget *label19; 49 49 GtkWidget *label17; nekostring/trunk/src/Makefile
r73 r74 85 85 CC = gcc 86 86 CCDEPMODE = depmode=gcc3 87 CFLAGS = -g -O287 CFLAGS = 88 88 CPP = gcc -E 89 89 CPPFLAGS = nekostring/trunk/src/gui_friendly_patches.c
r6 r74 20 20 "nekostrings", 21 21 0.999, // bass 22 1.0, // cello22 .75, // cello 23 23 1.0, // viola 24 0. 6, // violin24 0.8, // violin 25 25 1.0, // speed 26 26 1.0, // depth … … 30 30 0.5, // decay 31 31 0.0001, // bass decay 32 0. 5, // tone32 0.75, // tone 33 33 .7 // volume 34 34 } nekostring/trunk/src/neko_ensemble.c
r41 r74 36 36 float x1 = synth->ens_x1; 37 37 float y1 = synth->ens_y1; 38 float lp1 = synth->ens_lp1; 39 float lp2 = synth->ens_lp2; 40 38 41 39 42 float depth1=3; 40 43 float depth2=*(synth->depth)*2.5; 41 float mix= 0.5+0.5* *(synth->mix);44 float mix=1;//0.5+0.5* *(synth->mix); 42 45 float s1, s2; // samples from the buffer 43 46 44 47 float s_mix_1; //, s_mix_2, s_mix_3; // mix for antialiasing 45 48 float so1,so2,so3; 46 float d1,d2 ;49 float d1,d2,hp,lowpass,q; 47 50 48 51 //float mult = WAVE_POINTS/6.28; 49 52 50 //printf("%d %d %d %d\n",x1,y1,xomega,yomega); 53 lowpass=0.15f+(*(synth->tone)*0.6); 54 51 55 for (sample = 0; sample < sample_count; sample++) 52 56 { 53 57 // Write input into delay line 54 58 // we'll just use left as the input 55 56 synth->ens_buffer[buffer_pos] = left[sample]; 59 lp2 = lp2 + lowpass * lp1; 60 hp = left[sample] - lp2 -1.7 * lp1; 61 lp1 = lowpass * hp + lp1; 62 synth->ens_buffer[buffer_pos] = lp2; 57 63 58 64 // we have two LFOs, a fast one for the vibrato and a slow one for the chorus … … 68 74 69 75 //d1=200+20*sin(x1+4.2)+1.0f; d2=0.5*sin(y1+4.2)+1.0f; 70 d1 = 200 + 20*sine_wave[(int)(x1+682) & BUF_MASK]+1.0f; d2 = 0 .5*sine_wave[(int)(y1+682) & BUF_MASK] + 1.0f;76 d1 = 200 + 20*sine_wave[(int)(x1+682) & BUF_MASK]+1.0f; d2 = 0;//.5*sine_wave[(int)(y1+682) & BUF_MASK] + 1.0f; 71 77 delay_3 = 1200 + (d1*depth1+d2*depth2 * dr); 72 78 … … 123 129 synth->ens_x1 = x1; 124 130 synth->ens_y1 = y1; 131 synth->ens_lp1 = lp1; 132 synth->ens_lp2 = lp2; 125 133 synth->buffer_pos = buffer_pos; 126 134 nekostring/trunk/src/neko_synth.h
r34 r74 82 82 float ens_buffer[1280]; 83 83 float ens_x1, ens_y1; 84 float ens_lp1, ens_lp2; 84 85 85 86 /* translated controller values */ nekostring/trunk/src/neko_voice.h
r36 r74 74 74 float pos, /* persistent */ 75 75 pw; /* comes from LADSPA port each cycle */ 76 int osc_index; 77 float osc_audio[MINBLEP_BUFFER_LENGTH]; 76 78 float hp_last, hp_last_in; 77 79 float lp_last; nekostring/trunk/src/neko_voice_render.c
r73 r74 177 177 void vco(unsigned long sample_count, neko_voice_t *voice, struct blosc *osc, int index, 178 178 float highpass, float lowpass, float gain, float w) { 179 180 // FIXME - aliasing 181 // description of problem 182 // oscillator "buzzes" because of aliasing 183 // antialiasing minblep is clobbered by the low/highpass filtering 184 // proposed fix - render osc to osc->buffer, then filter to voice->buffer 185 // similar to how amplitude is done 186 187 int index2 = osc->osc_index; // need this, for the filter code 179 188 unsigned long sample; 180 189 float pos = osc->pos; … … 188 197 float lp3 = osc->lp_d3, lp4=osc->lp_d4; 189 198 190 if (lowpass > .825) lowpass = .825; 191 if (highpass < 0.01) highpass = 0.01; 199 int osc_index = osc->osc_index; 200 201 // clamp offscale filter values 202 if (highpass < 0.0001) highpass = 0.0001; 203 if (highpass > .995) highpass = .995; 204 if (lowpass < 0.0001) lowpass = 0.0001; 205 if (lowpass > .995) lowpass = .995; 206 if (gain < 0.0001) gain = 0.0001; 207 192 208 //freqcut = cutoff[sample] * 2.0f; 209 193 210 194 211 for (sample=0; sample < sample_count; sample++) { … … 197 214 pos -= 1.0f; 198 215 //blosc_place_step_dd(voice->osc_audio, index, pos, w, lowpass*gain); 216 blosc_place_step_dd(osc->osc_audio, osc_index, pos, w, gain); 199 217 } 200 218 201 219 out = 1.0f-(2*pos); // make saw wave 202 220 out = (out>0?out:0)-0.25; // chop off second half, adjust for DC offset 221 osc->osc_audio[osc_index + DD_SAMPLE_DELAY] += gain * out; 222 osc_index++; 223 } 203 224 204 225 // qres goes from 2 (fully down) to 0.05 (fully up) 205 226 206 lp2 = lp2 + lowpass * lp1; 207 hp = out - lp2 - 1.17f * lp1; 208 lp1 = lowpass * hp + lp1; 209 210 lp4 = lp4 + highpass * lp3; 211 hp = lp2 - lp4 - 1.7f * lp3; 212 lp3 = highpass * hp + lp3; 213 214 out=hp; 215 /* 216 out=(lowpass*out)+((1-lowpass)*lp_last); 217 lp_last=out; 218 219 hp_last = highpass * hp_last + out - hp_last_in; 220 hp_last_in = out; 221 out=hp_last; 222 */ 223 voice->osc_audio[index + DD_SAMPLE_DELAY] += gain * out; 224 index++; 225 } 227 for (sample=0; sample < sample_count; sample++) { 228 out = osc->osc_audio[index2 + DD_SAMPLE_DELAY]; 229 // 12dB/oct filter code 230 /* 231 lp2 = lp2 + lowpass * lp1; 232 hp = out - lp2 - 1.17f * lp1; 233 lp1 = lowpass * hp + lp1; 234 235 lp4 = lp4 + highpass * lp3; 236 hp = lp2 - lp4 - 1.7f * lp3; 237 lp3 = highpass * hp + lp3; 238 239 out=hp; 240 */ 241 // 6dB/oct filter code (more like the Solina filters) 242 out=(lowpass*out)+((1-lowpass)*lp_last); 243 lp_last=out; 244 hp_last = highpass * hp_last + out - hp_last_in; 245 hp_last_in = out; 246 out=hp_last; 247 voice->osc_audio[index + DD_SAMPLE_DELAY] += out; 248 index++; 249 index2++; 250 } 251 252 if (osc_index > MINBLEP_BUFFER_LENGTH - (NEKO_NUGGET_SIZE + LONGEST_DD_PULSE_LENGTH)) { 253 memcpy(osc->osc_audio, osc->osc_audio + osc_index, LONGEST_DD_PULSE_LENGTH * sizeof (float)); 254 memset(osc->osc_audio + LONGEST_DD_PULSE_LENGTH, 0, (MINBLEP_BUFFER_LENGTH - LONGEST_DD_PULSE_LENGTH) * sizeof (float)); 255 osc_index = 0; 256 } 257 osc->osc_index = osc_index; 226 258 osc->hp_last = hp_last; 227 259 osc->hp_last_in = hp_last_in; … … 318 350 319 351 320 kf = omega1/(float)(synth->sample_rate) ;352 kf = omega1/(float)(synth->sample_rate)*10.0f; 321 353 322 354 //printf("%f %f\n",omega1, kf); 323 355 324 356 // generate cello 325 vco(sample_count, voice, &voice->osc_cello, osc_index, 0. 001, 0.4-(kf/2), *(synth->cello), deltat * omega1/2);357 vco(sample_count, voice, &voice->osc_cello, osc_index, 0.97, 0.3-(kf/2), *(synth->cello), deltat * omega1/2); 326 358 // generate viola 327 vco(sample_count, voice, &voice->osc_viola, osc_index, 0. 02, 0.55+kf, *(synth->viola), deltat * omega1);359 vco(sample_count, voice, &voice->osc_viola, osc_index, 0.9-kf, 0.3+kf, *(synth->viola)-(.25-(kf/2)), deltat * omega1); 328 360 // generate violin 329 vco(sample_count, voice, &voice->osc_violin, osc_index, 0.05-kf, 0.95+kf, *(synth->violin), deltat * omega1*2); 361 362 vco(sample_count, voice, &voice->osc_violin, osc_index, 0.8, 0.35+kf, *(synth->violin)/*-(.25-(kf/2))*/, deltat * omega1*2); 330 363 331 364 // apply the VCA, copying the buffer as we go