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