ローパスフィルターを使ってみる

フィルターは、おなじみのローパス、ハイパス、バンドパスの他に、
ノッチフィルターを用意したんだけど、
それぞれ、以下のモジュールが該当する。(*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) ノッチフィルターが帯域阻止フィルターと同じなのかは、自信ないです・・・

2 Responses to “ローパスフィルターを使ってみる”

  1. どこに書くかなと思ったんですけど
    PerlでIIR書くとすげえよみづれえですね!
    $いっぱいつくせいかしら、

  2. それもあるんだけど、
    IIRの係数を出す部分は、数式の時点で混乱を招く気がしますね!
    あとは、12/25にちょろっと触れたんだけど、
    cutoffの解釈する部分に関しては、ちょっとおかしなことしてます。
    LFOで揺らす分には良い感じになるようにですね。
    コードだけだと「うーん・・・」てなるかも。

Leave a Comment