LFOによる周波数の変調(2)

スポンサーリンク

前回オシレーターの読み込みクラスに周波数変調ができるような改修をしました。今回はこれを使って音を出したいと思います。

LFOによる周波数の変調(1)

確認内容

モジュレータによる影響度をはかるために以下のふた通りのパターンで音出しをします。

  1. モジュレーターの周波数は変えずに出力を少しずつ上げていく
  2. モジュレーターの出力を変えずに周波数を少しずつ上げていく

実装内容
タイムラインを作成します。

TimeLine tl = new TimeLine();

1番目のサンプルを作ります。まずモジュレーターを定義します。周波数は5Hz、出力は最初は0で6秒後に20になるようにします。

//modulator1
DoubleMap freqMod1 = new DoubleMap(5);
DoubleMap envMod1  = new DoubleMap(0);
envMod1.putSecondValue(6, 20);

1番目のモジュレーターを作成します

OscillatorReader modulator1 = new OscillatorReader(new SineOscillator(), freqMod1, envMod1, 6);

音を出すオシレーターを定義します。変調をかけるオシレーターをモジュレーターと呼ぶのに対して実際に音を出すオシレーターはキャリアと呼びます。こちらは周波数500Hzで音量は1のまま変わりません。

DoubleMap freq1 = new DoubleMap(500);
DoubleMap env1  = new DoubleMap(1);
tl.addReadable(0, new OscillatorReader(new SineOscillator(), freq1, env1, 6, new SoundReadable[]{modulator1}));

これで最初のサンプルができました。0秒目から6秒間音がなるようになっています。次に2番目のサンプルを作ります。こちらは周波数が1Hzから始まって6秒後に20Hzになるようにしています。出力は10のまま買えません。

//modulator2
DoubleMap freqMod2 = new DoubleMap(1);
freqMod2.putSecondValue(6, 20);
DoubleMap envMod2  = new DoubleMap(10);

2番目のオシレーターを作ります。

OscillatorReader modulator2 = new OscillatorReader(new SineOscillator(), freqMod2, envMod2, 6);

2番目のキャリアも1番目と全く同じです。7秒目から6秒間音を出します。

DoubleMap freq2 = new DoubleMap(500);
DoubleMap env2  = new DoubleMap(1);
tl.addReadable(7, new OscillatorReader(new SineOscillator(), freq2, env2, 6, new SoundReadable[]{modulator2}));

最後に書き出します。

WavFileWriter.create(tl, new File("wav/lfo.wav"));

実行結果

できた音を聞いて見ます。最初のサンプルはビブラートの速さは変わらずにより深くかかるようになっています。2番目はビブラートの深さはそのままで早くなっています。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。