音量を変化させてみる

前回は、エンベロープで音程を変化させたけど、
今回は、音量を変更してみる。

use v5.14;
use strict;
use warnings;

use Cassis;
use constant SAMPLING_RATE => 44100;

my $dco = Cassis::DCO::Pulse->new( fs => SAMPLING_RATE, pitch => 4.0 );
my @wav = ();
foreach my $vol ( 1.0, 0.5, 0.25, 0.125 ) {
    my $amp = Cassis::Amp->new( volume => $vol );
    my $tmp = $amp->exec(
        src => $dco->exec(num => SAMPLING_RATE * 0.5)
    );

    push @wav, @{$tmp};
}

Cassis::File::write(
    file => 'volume.wav',
    fs => SAMPLING_RATE, channels => [ \@wav ] );

こんな感じで、Cassis::Ampを使うと音量を変更できる。
でもって、エンベロープの出力を使うと?

use v5.14;
use strict;
use warnings;

use Cassis;
use constant SAMPLING_RATE => 44100;

my $dco = Cassis::DCO::Tri->new( fs => SAMPLING_RATE, pitch => 4.0 );
my $amp = Cassis::Amp->new();
my $eg = Cassis::EG->new(
    fs => SAMPLING_RATE, # sampling-rate
    adsr => [
        0.01,    # Attack : time(sec)
        0.01,    # Decay  : time(sec)
        0.2,     # Sustain: gain
        0.5      # Release: time(sec)
    ],
    curve => 0.4 # default: 1.0 / exp(1.0)
);

my $eg_out = $eg->one_shot( gatetime => 0.05 );
my $wav = $amp->exec(
    src => $dco->exec(num => scalar(@{$eg_out})),
    mod_volume => {
        src => $eg_out,
        depth => 1.0
    }
);

Cassis::File::write(
    file => 'mod_volume.wav',
    fs => SAMPLING_RATE, channels => [ $wav ] );

これで、少しだけ音色の幅が広がりましたね!

おしまい。

Leave a Comment