もう少しエンベロープについて
あのcurve
は、何者かって話ですね。
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