もう少しエンベロープについて
あの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