パワーを貯める時の音を作る(1)
今、作ってるゲームのドックフーディングがてら、
実践編ということで、パワーを貯める時の音を作ってみます。
use v5.14;
use strict;
use warnings;
use Cassis;
use constant SAMPLING_RATE => 44100;
my $osc = Cassis::Osc::Tri->new( fs => SAMPLING_RATE, freq => 120 );
my $filter = Cassis::Iir2::LPF->new( cutoff => 0.2, q => 1.0 );
my $eg1 = Cassis::EG->new(
fs => SAMPLING_RATE,
adsr => [ 0.8, 0.0, 1.0, 0.01 ],
curve => 1.3
);
my $eg2 = Cassis::EG->new(
fs => SAMPLING_RATE,
adsr => [ 1.0, 0.0, 1.0, 0.01 ],
curve => 1.0
);
foreach my $freq ( 120, 140, 160 ) {
$osc->set_freq( $freq );
my $eg_out1 = $eg1->one_shot( gatetime => 0.8 );
$eg2->trigger( gatetime => 0.8 );
my $eg_out2 = $eg2->exec( num => scalar(@{$eg_out1}) );
my $osc_out = $osc->exec(
num => scalar(@{$eg_out1}),
mod_freq => {
src => $eg_out2,
depth => 0.8
}
);
my $amp = Cassis::Amp->new();
my $amp_out = $amp->exec(
src => $filter->exec(
src => $osc_out,
mod_cutoff => {
src => $eg_out2,
depth => 0.2
}
),
mod_volume => {
src => $eg_out1,
depth => 1.0
}
);
Cassis::File::write(
file => sprintf( 'boooooon_%d.wav', $freq ),
fs => SAMPLING_RATE, channels => [ $amp_out ] );
}
音量と音程に変化を付ければなんとかなると思ったら、
案の定、だいたいうまくいきました。
でも、せっかくフィルターもあるので、
少しずつフィルターを開いてみました。
Cassisを使うメリットは、
こんな感じで簡単にバリエーションを増やせて、
しかも、カットする必要がないところですね。
他にも作り方はあると思いますが、今日のところはこんな感じで。
おしまい。
Leave a Comment