パワーを貯める時の音を作る(1)

今、作ってるゲームのドックフーディングがてら、
実践編ということで、パワーを貯める時の音を作ってみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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