diff -urN midi_prog-/vcd.c midi_prog/vcd.c --- midi_prog-/vcd.c 2015-04-21 01:00:00.000000000 +0900 +++ midi_prog/vcd.c 2015-04-22 00:00:00.000000000 +0900 @@ -7,7 +7,7 @@ struct vcd_rec{ struct filter_rec fl; - struct filter_stat_rec stat; + struct filter_stat_rec stat, stat_lpf; struct out_rec *ot; int ch, tempo, div4; @@ -35,12 +35,14 @@ } void -vcd_init(struct vcd_rec *vcd, int ch, double fl_Q, struct out_rec *ot, int tempo, int div4) +vcd_init(struct vcd_rec *vcd, int ch, double fl_Q, double lpf_freq, double lpf_Q, struct out_rec *ot, int tempo, int div4) { + struct filter_rec lpf = { LPF, lpf_freq, lpf_Q }; vcd->fl.type = BPF; vcd->fl.freq = vcd_freq(ch); vcd->fl.Q = fl_Q; filter_init(&vcd->fl, &vcd->stat, ot->smp_t); + filter_init(&lpf, &vcd->stat_lpf, ot->smp_t); vcd->ot = ot; vcd->ch = ch; @@ -68,7 +70,7 @@ vcd->smp_cnt++; vcd->cnt++; - vcd->abs_sum += v < 0 ? -v : v; + vcd->abs_sum += filter_out(&vcd->stat_lpf, v < 0 ? -v : v); if(!is_update_vcd_tm(vcd)) return; @@ -90,7 +92,9 @@ { struct out_rec otr; in_rec_t irec; - double v, fl_Q = opt_double("-Q", ac, av, 1.0); + double v, fl_Q = opt_double("-Q", ac, av, 20); + double lpf_freq = opt_double("-lpf_freq", ac, av, 20); + double lpf_Q = opt_double("-lpf_Q", ac, av, 0.8); int tempo = opt_int("-tempo", ac, av, 500000); int div4 = opt_int("-div4", ac, av, 96); int note = 69; @@ -123,7 +127,7 @@ } } - for(i=0; i