public interface Sequencer extends MidiDevice
sequence
を再生するハードウェアデバイスまたはソフトウェアデバイスのことをシーケンサといいます。MIDI シーケンスには、標準 MIDI ファイルから読み込まれたデータなどの、タイムスタンプの付いた MIDI データのリストが含まれます。ほとんどのシーケンサは、シーケンスを作成し編集する機能も提供します。
Sequencer
インタフェースには、次のような基本的な MIDI シーケンサ操作のメソッドが含まれます。
Sequencer
がアクセスできるオブジェクトを通じて間接的に、次の操作もサポートされます。
修飾子と型 | インタフェースと説明 |
---|---|
static class |
Sequencer.SyncMode
SyncMode オブジェクトは、MIDI シーケンサで扱われている時間をマスターまたはスレーブデバイスと同期化する方法の 1 つを表します。 |
MidiDevice.Info
修飾子と型 | フィールドと説明 |
---|---|
static int |
LOOP_CONTINUOUSLY
ループは特定回数くり返し実行されたあとで終了するのではなく無制限に継続することを示す値。
|
修飾子と型 | メソッドと説明 |
---|---|
int[] |
addControllerEventListener(ControllerEventListener listener, int[] controllers)
要求された種類の制御変更イベントをシーケンサが処理するときに通知を受け取るためのコントローライベントリスナーを登録します。
|
boolean |
addMetaEventListener(MetaEventListener listener)
メタイベントがシーケンスで発生してシーケンサによって処理されるときに通知を受け取るためメタイベントリスナーを登録します。
|
int |
getLoopCount()
再生の反復数を取得します。
|
long |
getLoopEndPoint()
ループの終点を取得します (MIDI ティック単位)。
|
long |
getLoopStartPoint()
ループの始点を取得します (MIDI ティック単位)。
|
Sequencer.SyncMode |
getMasterSyncMode()
このシーケンサの現在のマスター同期モードを取得します。
|
Sequencer.SyncMode[] |
getMasterSyncModes()
このシーケンサがサポートするマスター同期モードのセットを取得します。
|
long |
getMicrosecondLength()
マイクロ秒で表した現在のシーケンスの長さを取得します。シーケンスが設定されていない場合は、0 が返されます。
|
long |
getMicrosecondPosition()
シーケンス上の現在の位置をマイクロ秒単位で取得します。
|
Sequence |
getSequence()
シーケンサが現在操作しているシーケンスを取得します。
|
Sequencer.SyncMode |
getSlaveSyncMode()
このシーケンサの現在のスレーブ同期モードを取得します。
|
Sequencer.SyncMode[] |
getSlaveSyncModes()
シーケンサがサポートするスレーブ同期モードのセットを取得します。
|
float |
getTempoFactor()
シーケンサの現在のテンポ係数を返します。
|
float |
getTempoInBPM()
1 分当たりのビートで表示される現在のテンポを取得します。
|
float |
getTempoInMPQ()
四分音符当たりのマイクロ秒で表示される現在のテンポを取得します。
|
long |
getTickLength()
MIDI ティックで表した現在のシーケンスの長さを取得します。シーケンスが設定されていない場合は、0 が返されます。
|
long |
getTickPosition()
シーケンスの現在の位置を MIDI ティック単位で取得します。
|
boolean |
getTrackMute(int track)
トラックの現在のミュート状態を取得します。
|
boolean |
getTrackSolo(int track)
トラックの現在のソロ状態を取得します。
|
boolean |
isRecording()
シーケンサが現在録音中かどうかを示します。
|
boolean |
isRunning()
シーケンサが現在実行中かどうかを示します。
|
void |
recordDisable(Track track)
指定されたトラックへの録音を不可にします。
|
void |
recordEnable(Track track, int channel)
指定されたトラックに、特定のチャネルで受信するイベントを録音する準備をします。
|
int[] |
removeControllerEventListener(ControllerEventListener listener, int[] controllers)
1 つ以上の種類のコントローライベントについて、コントローライベントリスナーの処理対象を削除します。
|
void |
removeMetaEventListener(MetaEventListener listener)
実際にリスナーが登録された場合、このシーケンサの登録済みリスナーのリストから指定されたメタイベントリスナーを削除します。
|
void |
setLoopCount(int count)
ループを再生する反復回数を設定します。
|
void |
setLoopEndPoint(long tick)
ループで最後に再生される MIDI ティックを設定します。
|
void |
setLoopStartPoint(long tick)
ループで再生する最初の MIDI ティックを設定します。
|
void |
setMasterSyncMode(Sequencer.SyncMode sync)
このシーケンサが使用するタイミング情報のソースを設定します。
|
void |
setMicrosecondPosition(long microseconds)
シーケンス上の現在の位置をマイクロ秒単位で設定します。
|
void |
setSequence(InputStream stream)
シーケンサが操作する現在のシーケンスを設定します。
|
void |
setSequence(Sequence sequence)
シーケンサが操作する現在のシーケンスを設定します。
|
void |
setSlaveSyncMode(Sequencer.SyncMode sync)
シーケンサのスレーブ同期モードを設定します。
|
void |
setTempoFactor(float factor)
指定された係数によりシーケンサの実際の再生テンポをスケーリングします。
|
void |
setTempoInBPM(float bpm)
テンポを 1 分当たりのビートで設定します。
|
void |
setTempoInMPQ(float mpq)
テンポを四分音符当たりのマイクロ秒で設定します。
|
void |
setTickPosition(long tick)
現在のシーケンサの位置を MIDI ティックで設定します。
|
void |
setTrackMute(int track, boolean mute)
トラックのミュート状態を設定します。
|
void |
setTrackSolo(int track, boolean solo)
トラックのソロ状態を設定します。
|
void |
start()
現在ロードされているシーケンスの MIDI データの再生を開始します。
|
void |
startRecording()
MIDI データの録音および再生を開始します。
|
void |
stop()
アクティブの場合録音を停止し、現在ロードされているシーケンスがあれば、その再生を停止します。
|
void |
stopRecording()
アクティブの場合録音を停止します。
|
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open
static final int LOOP_CONTINUOUSLY
setLoopCount(int)
、定数フィールド値void setSequence(Sequence sequence) throws InvalidMidiDataException
このメソッドは、Sequencer
が閉じている場合でも呼び出すことができます。
sequence
- ロードするシーケンス。InvalidMidiDataException
- シーケンスが無効な MIDI データを含んでいるか、シーケンスがサポートされていない場合。void setSequence(InputStream stream) throws IOException, InvalidMidiDataException
このメソッドは、Sequencer
が閉じている場合でも呼び出すことができます。
stream
- MIDI ファイルデータを含むストリーム。IOException
- ストリームの読み込み中に入出力例外が発生した場合。InvalidMidiDataException
- ストリームで無効なデータが発生したか、またはストリームがサポートされていない場合。Sequence getSequence()
このメソッドは、Sequencer
が閉じている場合でも呼び出すことができます。
null
。void start()
setLoopCount
で設定された反復数だけ繰り返されます。その反復の後、またはループカウントが 0 のとき、再生はシーケンスの終わりまで続行されます。
この実装により、適切なコントローラ、ピッチベンド、およびプログラム変更イベントが送信されます。この結果、ループの始点に移動したときにシンセサイザの状態の一貫性が保証されます。
IllegalStateException
- Sequencer
が閉じている場合。setLoopStartPoint(long)
, setLoopEndPoint(long)
, setLoopCount(int)
, stop()
void stop()
IllegalStateException
- Sequencer
が閉じている場合。start()
, isRunning()
boolean isRunning()
false
です。シーケンサは、start()
または startRecording()
が呼び出されると実行を開始します。その後シーケンスの再生が完了するか、または stop()
が呼び出されるまでの間、
isRunning
は true
を返します。true
、そうでない場合は false
void startRecording()
トラックはデフォルトでは録音可能になっていません。MIDI データを録音するためには、少なくとも 1 つのトラックが具体的に録音可能になっている必要があります。
IllegalStateException
- Sequencer
が閉じている場合。startRecording()
, recordEnable(javax.sound.midi.Track, int)
, recordDisable(javax.sound.midi.Track)
void stopRecording()
IllegalStateException
- Sequencer
が閉じている場合。startRecording()
, isRecording()
boolean isRecording()
false
です。シーケンサは startRecording()
が呼び出されると録音を開始し、その後は stop()
または stopRecording()
が呼び出されるまでこのメソッドは true
を返します。true
、そうでない場合は false
void recordEnable(Track track, int channel)
track
- イベントが録音されるトラックchannel
- イベントが受信されるチャネル。チャネル値に -1 が指定されている場合、トラックは全チャネルからのデータを受信する。IllegalArgumentException
- トラックが現在のシーケンスの一部でない場合、スローされる。void recordDisable(Track track)
track
- 録音を不可にするトラック、または全トラックを録音不可にする場合は null
。float getTempoInBPM()
getTempoFactor()
, setTempoInBPM(float)
, getTempoInMPQ()
void setTempoInBPM(float bpm)
bpm
- 1 分当たりのビートで表される目的の新たなテンポgetTempoFactor()
, setTempoInMPQ(float)
, getTempoInBPM()
float getTempoInMPQ()
getTempoFactor()
, setTempoInMPQ(float)
, getTempoInBPM()
void setTempoInMPQ(float mpq)
mpq
- 四分音符当たりのマイクロ秒で表される目的の新たなテンポ。getTempoFactor()
, setTempoInBPM(float)
, getTempoInMPQ()
void setTempoFactor(float factor)
getTempoInMPQ()
および getTempoInBPM()
から返される値には影響しません。これらの値はスケーリング前のテンポを示します。
外部同期が使用されている場合はテンポ係数は調整できません。その場合、setTempoFactor
はテンポ係数を常に 1.0 に設定します。
factor
- 要求されたテンポスカラーgetTempoFactor()
float getTempoFactor()
setTempoFactor(float)
long getTickLength()
long getTickPosition()
Sequence
に格納されているテンポとタイミング解像度の両方によって決まります。)setTickPosition(long)
void setTickPosition(long tick)
tick
- 目的のティック位置getTickPosition()
long getMicrosecondLength()
long getMicrosecondPosition()
getMicrosecondPosition
、インタフェース: MidiDevice
setMicrosecondPosition(long)
void setMicrosecondPosition(long microseconds)
microseconds
- マイクロ秒単位での目的の位置getMicrosecondPosition()
void setMasterSyncMode(Sequencer.SyncMode sync)
sync
の値に応じて内部クロック、MIDI クロック、または MIDI タイムコードになります。sync
引数は、getMasterSyncModes()
から返される、サポートされているモードの 1 つであることが必要です。sync
- 目的のマスター同期モードSequencer.SyncMode.INTERNAL_CLOCK
, Sequencer.SyncMode.MIDI_SYNC
, Sequencer.SyncMode.MIDI_TIME_CODE
, getMasterSyncMode()
Sequencer.SyncMode getMasterSyncMode()
setMasterSyncMode(Sequencer.SyncMode)
, getMasterSyncModes()
Sequencer.SyncMode[] getMasterSyncModes()
void setSlaveSyncMode(Sequencer.SyncMode sync)
sync
引数は、getSlaveSyncModes()
から返される、サポートされているモードの 1 つであることが必要です。sync
- 目的のスレーブ同期モードSequencer.SyncMode.MIDI_SYNC
, Sequencer.SyncMode.MIDI_TIME_CODE
, Sequencer.SyncMode.NO_SYNC
, getSlaveSyncModes()
Sequencer.SyncMode getSlaveSyncMode()
setSlaveSyncMode(Sequencer.SyncMode)
, getSlaveSyncModes()
Sequencer.SyncMode[] getSlaveSyncModes()
Sequencer.SyncMode.MIDI_SYNC
, Sequencer.SyncMode.MIDI_TIME_CODE
, Sequencer.SyncMode.NO_SYNC
void setTrackMute(int track, boolean mute)
getTrackMute(int)
を呼び出してください。track
- トラック番号。現在のシーケンスのトラックは、0 からシーケンスのトラック数から 1 を引いた値の範囲で番号付けされる。mute
- トラックの新しいミュート状態。true
はトラックがミュートであることを意味し、false
はトラックがミュートでないことを意味する。getSequence()
boolean getTrackMute(int track)
track
- トラック番号。現在のシーケンスのトラックは、0 からシーケンスのトラック数から 1 を引いた値の範囲で番号付けされる。true
、そうでない場合は false
。void setTrackSolo(int track, boolean solo)
solo
が true
の場合は、このトラックおよびソロになっているほかのトラックの音だけが聞こえます。solo
が false
の場合は、ソロになっているほかのトラックの音だけが聞こえますが、ソロになっているトラックがないときはミュートになっていないトラックの音がすべて聞こえます。
このメソッドはいくつかの理由で失敗することがあります。たとえば、指定されたトラック番号が現在のシーケンスに対して有効でない、あるいはシーケンサがこの機能をサポートしていない、などです。この操作が成功したかどうかを確認する必要のあるアプリケーションでは、この呼び出しに続いて
を呼び出してください。getTrackSolo(int)
track
- トラック番号。現在のシーケンスのトラックは、0 からシーケンスのトラック数から 1 を引いた値の範囲で番号付けされる。solo
- トラックの新しいソロ状態。true
はトラックがソロであることを意味し、false
はトラックがソロでないことを意味する。getSequence()
boolean getTrackSolo(int track)
track
- トラック番号。現在のシーケンスのトラックは、0 からシーケンスのトラック数から 1 を引いた値の範囲で番号付けされる。true
、そうでない場合は false
。boolean addMetaEventListener(MetaEventListener listener)
listener
- 追加するリスナーtrue
、そうでない場合は false
removeMetaEventListener(javax.sound.midi.MetaEventListener)
、MetaEventListener
、MetaMessage
void removeMetaEventListener(MetaEventListener listener)
listener
- 削除するメタイベントリスナーaddMetaEventListener(javax.sound.midi.MetaEventListener)
int[] addControllerEventListener(ControllerEventListener listener, int[] controllers)
controllers
引数によって指定されます。(各番号は 0 から 127 まで。さまざまな種類のコントローラに対応する番号については、MIDI 1.0 仕様を参照。)
戻された配列には、リスナーが今後イベントを受信する MIDI コントローラの番号を含んでいます。シーケンサによってはコントローライベント通知をサポートしていない場合があり、その場合、配列の長さは 0 です。ほかのシーケンサはいくつかのコントローラの通知をサポートしますが、全コントローラについてではありません。このメソッドは繰り返し呼び出されることがあります。各回とも、返された配列は、その特定の呼び出しで要求されたコントローラだけでなく、リスナーが通知を受ける全コントローラを示します。
listener
- 登録済みリスナーのリストに追加するコントローライベントリスナーcontrollers
- 変更通知が要求される MIDI コントローラ番号removeControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
、ControllerEventListener
int[] removeControllerEventListener(ControllerEventListener listener, int[] controllers)
controllers
引数は、リスナーが今後変更通知を受けとらないコントローラに対応する MIDI 番号の配列です。登録済みリスナーのリストからこのリスナーを完全に削除するには、controllers
に null
を渡します。戻された配列には、リスナーが今後イベントを受信する MIDI コントローラの番号を含んでいます。リスナーがどのコントローラの変更通知も受信しない場合、配列の長さは 0 です。listener
- 古いリスナーcontrollers
- 変更通知を取り消す MIDI コントローラ番号、または全コントローラに対して取り消す場合は null
addControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
void setLoopStartPoint(long tick)
始点の値 0 は、ロードされているシーケンスの先頭を意味します。始点の値は終点の値以下でなければならず、ロードされているシーケンスのサイズ内に入っていなければいけません。
シーケンサのループ始点のデフォルトは、シーケンスの先頭です。
tick
- ループの始点 (MIDI ティック単位、ゼロから始まる)IllegalArgumentException
- 要求されたループ始点を設定できない場合。通常は、始点がシーケンスのデュレーション外にあるか、始点が終点より後にあることが原因setLoopEndPoint(long)
, setLoopCount(int)
, getLoopStartPoint()
, start()
long getLoopStartPoint()
setLoopStartPoint(long)
void setLoopEndPoint(long tick)
終点の値 -1 は、ロードされているシーケンスの最後のティックを意味します。それ以外の場合、終点の値は始点の値以上でなければならず、ロードされているシーケンスのサイズ内に入っていなければいけません。
シーケンサのループ終点のデフォルトは -1 で、シーケンスの最後という意味です。
tick
- ループの終点 (MIDI ティック単位、ゼロから始まる)、または最後のティックを示す -1IllegalArgumentException
- 要求されたループ終点を設定できない場合。通常は、終点がシーケンスのデュレーション外にあるか、終点が始点より前にあることが原因setLoopStartPoint(long)
, setLoopCount(int)
, getLoopEndPoint()
, start()
long getLoopEndPoint()
setLoopEndPoint(long)
void setLoopCount(int count)
count
回までループの始点に戻ります。その後は、シーケンスの最後まで再生が続行されます。
このメソッドを呼び出したときの現在位置がループの終点より大きい場合、ループは実行されず、シーケンスの最後まで再生が続行されます。ただし、この呼び出しに続いてループの終点を変更した場合は、ループが実行されます。
count
の値を 0 に設定するとループが無効になります。つまり、ループの終点に達しても再生が続行され、ループの始点には戻りません。これがシーケンサのデフォルトです。
ループ中に再生を停止すると、現在のループ状態は解除されます。そのあとに開始要求を行うとき、中断されたループ操作の影響は受けません。
count
- ループの終点からループの始点まで再生をループバックする回数、またはループが中断されるまでループを継続する場合は LOOP_CONTINUOUSLY
IllegalArgumentException
- count
の値が負であり、かつ LOOP_CONTINUOUSLY
に等しくない場合setLoopStartPoint(long)
, setLoopEndPoint(long)
, getLoopCount()
, start()
int getLoopCount()
setLoopCount(int)
, start()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.