Cassis::DCOって?

今日は、あと2時間しかないよ!
でもなんとか、間に合わせるよ!

サンプルコードは出来てるんだけどね。
という訳で、前回しれっと出てきたCassis::DCOについて。

なんで、OSCじゃないの?とか、
Cassis::Oscと何が違うの?みたいなことになってるけど、
小分けに説明しようと思う。

まずは、サンプルコード。

use v5.14;
use strict;
use warnings;

use Cassis;
use constant SAMPLING_RATE => 44100;

sub write_wav {
    my ( $class, $dst_file ) = @_;

    my $dco = $class->new( fs => SAMPLING_RATE );
    $dco->set_freq( 440 );

    my $wav = $dco->exec( num => SAMPLING_RATE ); # 1sec
    Cassis::File::write(
        file => $dst_file,
        fs => SAMPLING_RATE, channels => [ $wav ] );
}

write_wav( 'Cassis::DCO::Sin', 'sin.wav' );
write_wav( 'Cassis::DCO::Tri', 'tri.wav' );
write_wav( 'Cassis::DCO::Saw', 'saw.wav' );
write_wav( 'Cassis::DCO::Pulse', 'pulse.wav' );

とりあえず、実装済みなのはこの4種類。
Cassis::Oscとの違いは、
pitchを使って音程を設定できることなんだけど、
例えば、+1.0すれば1オクターブ上がって、
-1.0すれば1オクターブ下がる。
1/12ずらすと半音変化して、とかそういうの。
この辺は、おいおいということで。

あと、実装を見て貰えるといんだけど、
サブクラスに引数を丸っと渡して、そこで波形を生成するようにしている。
これは、PWMを実現するために悩んだ末の実装で、
そのうち、PWMが実装されると良いですね。

おしまい。

Leave a Comment