音声音楽スポンサーリンク前回では楽器のためのインタフェースを決めました。これを実装したクラスを作って音色のコントロールはこのクラスで行うようにします。楽器クラスが実装しなければいけないメソッドは以下のものでした。velocity);楽器は何の曲を弾いているとかどんな曲調なのかということは考慮しません。指定の音の高さ、音の長さ、音の速さ(前回説明しました)で音を作ることのみ責任を持ちます。タイムラインのオプティマイズ(2)楽器クラスの実装について楽器の実装はここで作成する音楽作成のシステムの機能とは少し違うものです。いうのも楽器は個人の好みによって自由に変更できるもので、変えたとしても全体の機能には何も影響を与えません。このため楽器の実装クラスは別なパッケージにして基本機能とは分けることにします。基本の機能が以下のものでした。mocha.sound;楽器用のパッケージは以下のものにします。mocha.sound.soundbank;楽器の音色を考えます。ここではピアノのような音色を作ることにします。ピアノはハンマーを叩くアタック音とその後弦が振動する長いリリースの音が混ざっています。その二つの音を表現することにします。アタック音を音1、長いリリースを音2とします。音1のデザイン鋭いアタック音はエンベロープの調整によって行います。短い時間で一番大きい音になりすぐに消えるようにします。ハンマーによる複雑な音を表現するためにはサイン波ではなくもう少し硬い音を選びます。ここでは三角波にします。弱く弾く、つまり音の速さが遅いときにはあまり聞こえないようにします。デザインに使う時間の単位は1秒の1000分の1の単位であるミリ秒msにします。1ミリ秒は0.001秒になり整数で音の流れが扱えるようになります。三角波を使う無音からはじまり10ミリ秒で最高音になる。音の大きさはベロシティに比例する。150ミリ秒後に無音にもどる。コードは以下の通りです。実装するときには秒単位に戻しています。0.15));音2のデザインでは次にリリース音の方のデザインを考えます。立ち上がりは早くなく消えるまでの時間はゆっくり減衰、つまり音量が小さくなり続けます。ピアノは鍵盤から指をあげるとそれまで続いていた音はそこで途切れます。押しっぱなしで消えるまでの時間より早く音が終わるときにはその場所の音量を計算する必要があります。音1と違いあまり音の速さによる影響を受けないようにします。音色も地味なサイン波にします。サイン波を使う最大音量は音の速さの影響を半分だけ受ける音の速さが0のときでも最大音量は0.3は出すようにする最大音量には50ミリ秒で到達する音の長さが3000ミリ秒(3秒)以上の場合は3000ミリ秒で無音になる3000ミリ秒より満たない場合はその時点で減衰は終わり100ミリ秒後に無音になる。コードは以下の通りです。real_duration));長くなってしまったので音出しは次回行います。ミナ・ベルジェタイムラインのオプティマイズ(2)楽器の音色を決める(2)関連記事JavaとMIDI:フォリア(3)今回で完成させます。最後の2小節はそれまでと違うので別に作ります。フレーズの定義はこんな感じです。P...記事を読むJavaとMIDI:トラックの編集ツールを作る(1)時間の管理ができるようになったところでMIDIメッセージをもっと簡単に設定できるようにしたいと思います。下のコードを...記事を読むJavaとMIDI:バッハ・チェロ組曲の一部(4)今回で最初の4小節を完成としたいと思います。最後の手入れをします。合奏と独奏を比べたとき独奏は他の演奏者と合わせる必要...記事を読むJava複数のサイン波を同時に鳴らす(2)前回からの続きで複数の音を鳴らすwavファイルを作っています。複数の音源のサンプルを足し合わすことでミックスすることができます。SoundR...記事を読むwavファイルの調査(1)Javaで読み込むwavファイルを解析します。wavファイルを読み込むにはAUdioInputStreamというオブジェク...記事を読む標準入力からint型整数を取得するユーティリティを作る前回は入力を求めるメッセージを出力し文字列の入力を取得するところまで作りました。今回は文字列ではなくint型整数を取得したいと思います。おそ...記事を読むwavファイルの音量最大化(2)今まで作ったものを組み合わせてファイルの最大化ツールを作りました。今回作ったツールの結果です。今回は音声ファイルの再生をします。手元にwavファイルを用意してください。ない場合は以下のサンプルをダウンロードして使ってください。なん...記事を読むJavaとMIDI:シンセサイザーのリセット前回MIDIで音を鳴らしました。ここでは音を開始するコマンドと音を終了させるコマンドを時間差でシンセサイザーに送ることによって一定時間音を鳴...記事を読むJavaとMIDI:MIDIの環境を調べるMIDIをJavaを経由で利用するにあたってまずやることは自分のPC上で使えるMIDIのデバイスを調べることです。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。外国語としてのJavaと音楽%d人のブロガーが「いいね」をつけました。