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