Cassis::DCOって?
今日は、あと2時間しかないよ!
でもなんとか、間に合わせるよ!
サンプルコードは出来てるんだけどね。
という訳で、前回しれっと出てきたCassis::DCO
について。
なんで、OSCじゃないの?とか、
Cassis::Osc
と何が違うの?みたいなことになってるけど、
小分けに説明しようと思う。
まずは、サンプルコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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