もう少しエンベロープについて
あのcurve
は、何者かって話ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | use v5.14; use strict; use warnings; use Cassis; use constant SAMPLING_RATE => 44100; my $eg = Cassis::EG->new( fs => SAMPLING_RATE, # sampling-rate adsr => [ 3.0, # Attack : time(sec) 0.0, # Decay : time(sec) 1.0, # Sustain: gain 3.0 # Release: time(sec) ], curve => 1.0 # default: 1.0 / exp(1.0) ); my @pitch_table = ( -9 / 12, # C -7 / 12, # D -5 / 12, # E -4 / 12, # F -2 / 12, # G 0 / 12, # A 2 / 12, # B (-9 / 12) + 1.0, # C(ここから1オクターブ上がる) (-7 / 12) + 1.0, # D (-5 / 12) + 1.0, # E (-4 / 12) + 1.0, # F (-2 / 12) + 1.0, # G ( 0 / 12) + 1.0, # A ( 2 / 12) + 1.0, # B (-9 / 12) + 2.0 # C(ここから2オクターブ上がる) ); foreach my $curve ( 0.7, 1.0, 2.0 ) { $eg ->set_curve( $curve ); my $eg_out = $eg ->one_shot( gatetime => 3.5 ); my @steps = map { $pitch_table [ int ( $_ * ( scalar ( @pitch_table ) - 1) )]; } @{ $eg_out }; my $dco = Cassis::DCO::Tri->new( fs => SAMPLING_RATE, pitch => 4.0 ); my $wav = $dco -> exec ( num => scalar ( @steps ), mod_pitch => { src => \ @steps , depth => 1.0 } ); Cassis::File:: write ( file => sprintf ( 'envelop_curve_%.1f.wav' , $curve ), fs => SAMPLING_RATE, channels => [ $wav ] ); } |
なんとなく分かって頂ければ良いのですが・・・。
基本的に、デフォルト値のままで良い気がしてて、
でも、用途に応じてcurve
もいじってみるのも良いかなーって思います。
おしまい。
Leave a Comment