Java Sequencerを使用してMIDIソングを再生しています。
sequencer. setLoopCount (Sequencer.LOOP_CONTINUOUSLY)
内部(サウンドカード)シンセサイザーで再生した場合、これはうまく動作します(必要に応じてdummy eventが追加されています)。ループタイミングにスポットが当たっています。初期ソングイベントとMIDIソングイベントを分離する
しかし、外部(USBまたはシリアル)シンセサイザーで再生した場合、ループしたところで出力に目立った隙間ができます。これは、.midファイルの開始時にシリアル・ラインを介して送信される時間がかかる多くのセットアップ・イベントが存在するという事実によって説明されます。
ワンタイムセットアップイベントを自分のSequence
に分離しておきます。これは、曲がロードされたときに一度だけデバイスに送信されますが、メイン(ループ)Sequence
からは除外されます。
2種類のイベントを区別できる単純なアルゴリズム(またはライブラリ関数)はありますか?関連するメッセージのグループとして送信され
- Registered parameter変更、:
それはのために提供する必要があります。
- チャンネルプログラムの変更は、トラックの途中で送信されることがあります(ループされたシーケンスの一部でなければなりません)が、曲全体に同じプログラムが保存されている場合(大半の場合)、プログラムの変更はセットアップシーケンス。テンポの変更も同様です。
*これは、.midファイルの先頭にシリアルラインを介して送信される時間がかかるセットアップイベントが多数存在することによって説明されます。* - これは前提条件かguestimationか、 techincal記事またはデバッグ出力)を表示するには? –
@Charles Goodwin、いいえ手動でイベントを削除してこれをテストしました – finnw