ローパスフィルターを使ってみる
フィルターは、おなじみのローパス、ハイパス、バンドパスの他に、
ノッチフィルターを用意したんだけど、
それぞれ、以下のモジュールが該当する。(*1)
Cassis::Iir2::LPF
Cassis::Iir2::HPF
Cassis::Iir2::BPF
Cassis::Iir2::BEF
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で揺らす分には良い感じになるようにですね。
コードだけだと「うーん・・・」てなるかも。