ローパスフィルターを使ってみる
フィルターは、おなじみのローパス、ハイパス、バンドパスの他に、
ノッチフィルターを用意したんだけど、
それぞれ、以下のモジュールが該当する。(*1)
Cassis::Iir2::LPF
Cassis::Iir2::HPF
Cassis::Iir2::BPF
Cassis::Iir2::BEF
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 | use v5.14; use strict; use warnings; use Cassis; use constant SAMPLING_RATE => 44100; my $dco = Cassis::DCO::Saw->new( fs => SAMPLING_RATE ); foreach my $q ( 1.0 / sqrt (2.0), 2.0, 4.0, 8.0 ) { my $cutoff = 0.4; my $lpf = Cassis::Iir2::LPF->new( cutoff => $cutoff , q => $q ); my @wav = (); while ( 0.1 < $cutoff ) { $lpf ->set_cutoff( $cutoff ); my $lpf_out = $lpf -> exec ( src => $dco -> exec ( num => SAMPLING_RATE * 0.5 ) ); push @wav , @{ $lpf_out }; $cutoff -= 0.05; } Cassis::File:: write ( file => sprintf ( 'saw_lpf_q_%.2f.wav' , $q ), fs => SAMPLING_RATE, channels => [ \ @wav ] ); } |
という訳で、今回はローパスフィルターを使ったサンプル。
q
は、アレですよ、アレ。
Qとか、Resonanceとか、Peekとか、いろんな呼び名があるみたいですね。
ところで、cutoff
をエンベロープとか、
LFOで変化させれたら素敵だと思いませんか?
でも、今日はここまで!
おしまい。
(*1) ノッチフィルターが帯域阻止フィルターと同じなのかは、自信ないです・・・
どこに書くかなと思ったんですけど
PerlでIIR書くとすげえよみづれえですね!
$いっぱいつくせいかしら、
それもあるんだけど、
IIRの係数を出す部分は、数式の時点で混乱を招く気がしますね!
あとは、12/25にちょろっと触れたんだけど、
cutoffの解釈する部分に関しては、ちょっとおかしなことしてます。
LFOで揺らす分には良い感じになるようにですね。
コードだけだと「うーん・・・」てなるかも。