複数の音源を管理してミックスするTimeLineというクラスを作りました。ここではそれを使って実際の音を作ります。
作るもの
以下のような音源を作ります。
- ドミソの3つのサイン波の音が重なった3秒間の音声ファイル
- 3つの音はそれぞれ0.5秒ずつずれて始まり同時に終わる
- ドは0秒目から3秒間鳴る
- ミは0.5秒目から2.5秒間
- ソは1秒目に始まり2秒続く
それぞれの周波数は平均律の概算で以下のようになっています。
ド | 261.625Hz |
ミ | 329.627Hz |
ソ | 391.995Hz |
平均律の計算方法から求めることができます。
またせっかくだからパニングもします。
- ドは0秒目に右から始まり1秒目から2秒目までの間に左に移動する
- ミは0.5秒目に始まってから最後まで中央のまま
- ソは1秒目に左から始まり2秒目までに右に移動する
では作ります。
タイムラインのオブジェクトを作ります。最初は空です。
TimeLine tl = new TimeLine();
ドのパニングを設定します。
DoubleMap pan1 = new DoubleMap(0); pan1.putSecondValue(1, 0); pan1.putSecondValue(2, 1);
ミのパニングを設定します。
DoubleMap pan2 = new DoubleMap(0.5);
ソのパニングを設定します。
DoubleMap pan3 = new DoubleMap(1); pan3.putSecondValue(1, 0);
タイムラインにそれぞれの音を設定していきます。
tl.addReadable(0, new Panner(new OscillatorReader(new SineOscillator(), new DoubleMap(261.625), 3), pan1)); tl.addReadable(0.5, new Panner(new OscillatorReader(new SineOscillator(), new DoubleMap(329.627), 2.5), pan2)); tl.addReadable(1, new Panner(new OscillatorReader(new SineOscillator(), new DoubleMap(391.995), 2), pan3));
タイムラインをファイルに書き出します。
WavFileWriter.create(tl, new File("wav/timeline.wav"));
実行する
実行した結果が以下のものです。パンを聞き取るにはヘッドフォンを使うと良いです。