音声音楽スポンサーリンクエンベロープ・ジェネレーターとはシンセサイザーの音量の変化をコントロールするエンベロープを作成するものです。Javaでこれを実装して楽器クラスから演奏音を簡単に作れるようにしたいと思います。エンベロープを利用した音の作成エンベロープの最適化まず今までエンベロープとして使っていたDoubleMapを最適化したいと思います。今まではあるサンプル位置での値を毎回計算していました。計算する内容はざっと以下の通りでした。指定された位置の前後の設定値を取得する。前後のサンプル位置と設定値を元に指定された位置の値を計算する。演奏音作成時にはサンプル位置は最初から順に読み込んでいます。設定値はそれほど多くなければ1の処理で取得される設定値が頻繁に変わることはありません。このため最後の計算以外の処理はなるべくしないようにしたいと思います。前後のサンプル位置keyFloorとkeyCeiling、前後の設定値valueFloorとvalueCeilingを変数として持つようにしました。設定が足された時には再読み込みしなければいけませんので更新フラグupdatedを定義しておきます。更新フラグはfalse「更新していない」にしておきます。設定値が追加かされた時にも更新フラグはfalse「更新していない」にします。更新していて位置が前の位置と同じであれば前の値を返します。}更新していて位置が後の位置と同じであれば後の値を返します。}更新していない場合、位置が前後の間からはみ出すようであれば再計算します。keyCeiling){前と後の設定を取得します。ceilingEntry(index);両方ない場合は中断します。}前がない場合は後と同じに、後がない場合には前と同じにします。}それぞれの値を変数に代入します。ceiling.getValue();更新フラグを「更新した」にします。}前後の位置が同じ場合には前の値を返します。これはこの後の計算で0で割ってしまわないようにするためです。}指定された位置が前後の中間の位置にある場合には前後の値を按分して返します。今後雛形のエンベロープから演奏用のエンベロープを作っていきたいと思います。雛形のエンベロープより時間が短い時のために「切り出し」ができるようにしておきます。指定の時間のサンプル位置とその時の値を取得します。新規にDoubleMapのインスタンスを作りそこにサンプル位置前の設定を全てコピーします。最後に指定のサンプル位置とその値も設定値として保持するようにします。全ての設定値に同じ値をかけられるようにします。音量の調節が必要な時に便利です。連想配列は通常の配列と同じように複数のインスタンスをまとめて管理できます。異なるのは通常の配列が順番によって管理しているのに対して連想配列は...記事を読むJavaとMIDI:ハノンの練習曲第一番(2)実装の続きです。実装内容は以下の8音でフレーズを設定した後音程を1ずつ増やして14回繰り返すのでした。...記事を読む標準入力からint型整数を取得するユーティリティを作る前回は入力を求めるメッセージを出力し文字列の入力を取得するところまで作りました。今回は文字列ではなくint型整数を取得したいと思います。おそ...記事を読むJava複数のサイン波を同時に鳴らす(3)複数の音源を管理してミックスするTimeLineというクラスを作りました。ここではそれを使って実際の音を作ります。Java複数のサイ...記事を読むJavaとMIDI:シンセサイザーのリセット前回MIDIで音を鳴らしました。スタンダードMIDIファイルをJavaで演奏します。前回は以下の3以降を実装しました。SM...記事を読むJavaとMIDI:曲の構造と表現の分離(1)前回の演奏部分のコードは4小節を演奏するだけのものであるのにコード量がまだ多いです。チェロ組曲第一番の前奏曲は同じようなフレーズがずっと続い...記事を読むJava複数のサイン波を同時に鳴らす(1)前回はステレオの音源を作成しました。今回は複数の音が重ね合わされたwavファイルを作成します。音を重ね合わせることをミックスmixと言います...記事を読む音声作成クラスのオプティマイズ(1)この先もう少し凝ったことをするために一度クラスを最適化、オプティマイズします。サンプリングレートをコンストラクタで...記事を読むJavaとMIDI:フォリア(2)次にフレーズを作っていきたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。外国語としてのJavaと音楽%d人のブロガーが「いいね」をつけました。