Java複数のサイン波を同時に鳴らす(3)

スポンサーリンク

複数の音源を管理してミックスするTimeLineというクラスを作りました。ここではそれを使って実際の音を作ります。

Java複数のサイン波を同時に鳴らす(2)

作るもの

以下のような音源を作ります。

  • ドミソの3つのサイン波の音が重なった3秒間の音声ファイル
  • 3つの音はそれぞれ0.5秒ずつずれて始まり同時に終わる
  • ドは0秒目から3秒間鳴る
  • ミは0.5秒目から2.5秒間
  • ソは1秒目に始まり2秒続く

それぞれの周波数は平均律の概算で以下のようになっています。

261.625Hz
329.627Hz
391.995Hz

平均律の計算方法から求めることができます。

調律の話(1)
調律の話(2)

またせっかくだからパニングもします。

  • ドは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"));

実行する

実行した結果が以下のものです。パンを聞き取るにはヘッドフォンを使うと良いです。

Javaで平均律の周波数を求める

Javaで「うなり」の音声ファイルを作成する

エンベロープを利用した音の作成

スポンサーリンク

シェアする

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

フォローする

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