エンベロープを使ってみる
EGとは、Envelope Generatorのことですね。
これに該当するのはCassis::EG
です。
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 => [ 1.0, # Attack : time(sec) 1.0, # Decay : time(sec) 0.5, # Sustain: gain 1.0 # Release: time(sec) ], curve => 1.0 # default: 1.0 / exp(1.0) ); my $dco = Cassis::DCO::Sin->new( fs => SAMPLING_RATE, pitch => 4.0 ); foreach my $gatetime ( 0.5, 1.0, 2.0, 3.0, 4.0 ) { my $eg_out = $eg->one_shot( gatetime => $gatetime ); my $wav = $dco->exec( num => scalar(@{$eg_out}), mod_pitch => { src => $eg_out, depth => 1.0 } ); Cassis::File::write( file => sprintf('mod_pitch_%.1f.wav', $gatetime), fs => SAMPLING_RATE, channels => [ $wav ] ); }
エンベロープはADSRを採用しました。
やっぱ、ADSRでしょ!みたいのをずっと思ってたので、
これはこれで良かったのですが、実はcurve
の値が肝でして、
線形補間だと微妙だったので非線形にもできるようにしました。
ほんとは音量に対してエンベロープを適用したかったんだけど、
それは次回のお楽しみということで。
pitch
を変化させる場合は、こんな感じに書くことが出来ます。
おしまい。
Leave a Comment