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