パワーを貯める時の音を作る(2)
前回に引き続き、違う方法を思いついたので試してみた。
use v5.14; use strict; use warnings; use Cassis; use constant SAMPLING_RATE => 44100; my $dco = Cassis::DCO::Tri->new( fs => SAMPLING_RATE ); my $eg = Cassis::EG->new( fs => SAMPLING_RATE, adsr => [ 0.9, 0.0, 1.0, 0.01 ], curve => 1.3 ); foreach my $pitch ( 2.0, 2.5, 3.0 ) { my $eg_out = $eg->one_shot( gatetime => 1.0 ); my @wav = (); my $n = scalar(@{$eg_out}); my $step = 3000; while ( scalar(@wav) < $n ) { my $tmp = (scalar(@wav) / $n) ** 1.4; $dco->set_pitch( $pitch + ($tmp * 1.8) ); my $dco_out = $dco->exec( num => $n < (scalar(@wav) + $step) ? ($n - scalar(@wav)) : $step ); push @wav, @{$dco_out}; } my $amp = Cassis::Amp->new(); my $amp_out = $amp->exec( src => \@wav, mod_volume => { src => $eg_out, depth => 1.0 } ); Cassis::File::write( file => sprintf( 'bubububububu_%.1f.wav', $pitch ), fs => SAMPLING_RATE, channels => [ $amp_out ] ); }
今回は、階段状に音程を上げていく方法で、
ファミコンとかでありがちな感じに仕上がってると思う。
こうやって使ってみると、いろいろ不満が出てきたので、
少しissueを投げて、改修してみようと思う。
おしまい。
Leave a Comment