実装スポンサーリンクシーケンサーを使ってシーケンスを演奏させるプログラムを書きましたが現在の実装では強制終了しない限り処理が終了しないままになってしまいます。これをなんとかしたいと思います。現在は処理の最後でシーケンサーを開始しますがこれを終了していません。このためシーケンサーはそのままプロセス上に残ったままになります。System.out.println("start");sequencer.start();処理を終了するには以下のようにシーケンサー自体と設定されているレシーバーを終了する必要があります。receiver.close();}しかしシーケンサーは別のスレッドで動くため上記のstartの下にすぐ終了処理を書いてしまうと演奏前にシーケンサーが終了されてしまいます。これはこれで問題です。解決方法シーケンサーには以下のようにメタイベントのリスナーを設定することができます。リスナーとは「聴く人」の意味ですがJavaにおいては何かイベントがあった時にそのことを知ることができるクラスのことを意味します。listener)リスナーはインタフェースなのでMetaEventListenerは以下のメソッドを実装する必要があります。Sequencerが処理中のSequenceからMetaMessageを検出し、処理した場合に呼び出されます。meta)https://docs.oracle.com/javase/jp/8/docs/api/javax/sound/midi/MetaEventListener.html実装内容では実装します。クラスの宣言とコンストラクターです。あとでsleep処理を行うためThreadを継承しておきます。コンストラクターではシーケンサーを参照できるように引数に取ります。}以下はmetaメソッドの内容です。EndOfTrackメッセージは47、16進数で0x2fなのでこれ以外は無視します。ちなみにこのメッセージは各トラックの最後に一つずつ設定されているのですがデフォルトのシーケンサーを使う限りシーケンスの全てのイベントを処理した最後に1回だけ送られてくるようです。return;}これ以降に終了処理をします。処理を開始するとリリース音がある場合それをぶつ切りしてしまうため一秒ほど待ちます。sleep");}終了処理をします。receiver.close();}今度はシーケンサーの開始時にこのリスナーを設定します。start前にリスナーを追加する処理を追加します。EndOfTrackListner(sequencer));System.out.println("start");sequencer.start();これで実行すると曲の終了時にJavaの処理も終了するようになります。ソースリスナーのソースです。ミナ・ベルジェJavaとMIDI:音色を変更する(3)JavaとMIDI:時間情報を管理する(1)関連記事JavaとMIDI:ハノンの練習曲第一番(2)実装の続きです。実装内容は以下の8音でフレーズを設定した後音程を1ずつ増やして14回繰り返すのでした。今まではオーディオの情報を直接作り出して音楽を製作していましたがここから話題を変えてMIDIで音楽を作りたいと思います。前回boolean変数によってif文を作りました。ここでは変数ではなく判定による真偽を使って分岐するようにします。ifによる分岐と真...記事を読むJava複数のサイン波を同時に鳴らす(1)前回はステレオの音源を作成しました。今回は複数の音が重ね合わされたwavファイルを作成します。プログラムの中ではいろいろな値を使います。足し算する時は足される二つの数とその答えはそれぞれ値になります。この答えの値...記事を読むJavaとMIDI:シーケンスエディターの作成バッハのチェロ組曲のシーケンス作りをしましたがまだコードが煩雑であるのでツールをさらに追加していきたいと思います。結果として楽曲作成に集中で...記事を読む音量を自動で最大化する(2)前回最大化をするクラスを作りました。今回はこれを利用する側を作ります。こちらは以前に作ったファイル書き出し用のクラスWavFileWrite...記事を読むJavaとMIDI:入出力先デバイスの取得MIDI情報の読み込み先や書き出し先はMidiSystem.getMidiDeviceInfoというスタティックメソッドで取得できます。...記事を読む楽器の音色を決める(1)前回では楽器のためのインタフェースを決めました。これを実装したクラスを作って音色のコントロールはこのクラスで行うようにします。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。外国語としてのJavaと音楽%d人のブロガーが「いいね」をつけました。