Sequence

Sequence

MIDI 시퀀스를 나타내는 클래스예요. 시퀀스는 Track 객체들을 포함하고, 타이밍 정보와 해상도를 담아요.

출처: Java API Reference

본문

javax.sound.midi 패키지에 속하는 클래스로, java.lang.Object를 상속하고 Sequence를 생성해 Track의 시간 순서 목록을 만들 수 있어요. 시퀀스는 타이밍 분할 유형, 분해능, 트랙 길이 등을 정의해요.

시퀀스는 시간 분할을 나타내는 데 두 가지 방식 중 하나를 사용해요: PPQ(per quarter note, 분기음당 펄스) 또는 SMPTE 시간 코드 기반 타이밍. PPQ 타이밍은 분기음(pulse/quarter note)당 틱 수를 지정하고, SMPTE 타이밍은 프레임당 틱 수와 프레임 속도를 지정해요.

public class Sequence extends Object

상수

  • PPQ: 분기당 펄스(PPQ) 기반 시간 분할을 나타내는 tempo-based timing 유형
  • SMPTE_24: 24프레임/초 SMPTE 시간 분할
  • SMPTE_25: 25프레임/초 SMPTE 시간 분할
  • SMPTE_30DROP: 29.97프레임/초 drop-frame SMPTE 시간 분할
  • SMPTE_30: 30프레임/초 SMPTE 시간 분할

생성자

public Sequence(float divisionType, int resolution)
    throws InvalidMidiDataException

divisionType이 지정하는 시간 분할 유형과 tick resolution으로, 아직 포함된 트랙이 없는 시퀀스를 생성해요. 초기 트랙은 이 방법으로 만들어진 시퀀스에서는 생성되지 않아요. 시퀀스가 기록된 데이터를 포함할 준비가 되면 이 메서드로 생성한 시퀀스에 트랙을 추가해 기록할 수 있어요.

  • 파라미터 divisionType: 시퀀스의 시간 분할 유형
  • 파라미터 resolution: 시간 분할 단위의 분해능(ticks per beat 또는 ticks per frame)
  • 예외 InvalidMidiDataException: 지정된 division type이 유효하지 않은 경우
public Sequence(float divisionType, int resolution, int numTracks)
    throws InvalidMidiDataException

지정된 division type, tick resolution, 트랙 수로 시퀀스를 생성해요. 트랙은 처음에 빈 상태로 존재해요. 빈 시퀀스의 트랙 목록은 getTracks()를 호출해 얻을 수 있고, 트랙은 이후에 새 MIDI 이벤트로 채울 수 있어요.

  • 파라미터 divisionType: 시퀀스의 시간 분할 유형
  • 파라미터 resolution: 시간 분할 단위의 분해능
  • 파라미터 numTracks: 시퀀스의 트랙 수
  • 예외 InvalidMidiDataException: 지정된 division type이 유효하지 않은 경우

getTracks

public Track[] getTracks()

이 시퀀스의 모든 트랙을 얻어요.

  • 반환값: 이 시퀀스의 트랙 배열

getResolution

public float getResolution()

시퀀스에 기록된 시간 분할 단위의 분해능을 얻어요. PPQ 타이밍에서는 분기음당 틱 수, SMPTE 타이밍에서는 초당 틱 수를 반환해요.

  • 반환값: 시퀀스의 timing resolution

getDivisionType

public float getDivisionType()

시퀀스에 대한 분할 유형을 얻어요.

  • 반환값: 분할 유형

getMicrosecondLength

public long getMicrosecondLength()

이 시퀀스의 마이크로초 단위 길이를 얻어요. 시퀀스의 길이는 트랙의 길이로 결정돼요. 시퀀스의 시간 분할 유형이 PPQ라면, 시퀀스의 길이는 시퀀스에 포함된 트랙에서 첫 번째 틱의 위치와 연관된 마이크로초를 더해 결정돼요. 첫 번째 트랙의 tick 위치가 명확하게 정의되면, 마이크로초 단위 길이는 그 위치에 도달하는 데 필요한 시간이에요.

  • 반환값: 마이크로초 단위의 시퀀스 길이

getTickLength

public long getTickLength()

이 시퀀스의 틱 단위 길이를 얻어요. 시퀀스의 길이는 트랙의 길이로 결정돼요. 시퀀스의 시간 분할 유형이 PPQ라면, 시퀀스의 길이는 가장 긴 트랙의 tick 위치로 결정돼요.

  • 반환값: 틱 단위의 시퀀스 길이

getPatchList

public Patch[] getPatchList()

이 시퀀스가 사용하는 패치 목록을 얻어요. 이 시퀀스가 로드될 때 로드해야 하는 패치 목록을 나타내요.

  • 반환값: 이 시퀀스가 사용하는 패치 배열

createTrack

public Track createTrack()

빈 트랙을 만들어 시퀀스에 추가해요. 트랙은 시간 순서로 추가되지 않고, 트랙 목록의 끝에 추가돼요. 반환된 트랙은 Sequence에 포함되고, 사용자가 시퀀스에서 제거할 때까지 시퀀스의 일부로 간주돼요. 그러나 트랙은 다른 트랙과 병합되지 않는다는 점을 유의해야 해요.

  • 반환값: 이 시퀀스에 추가된 트랙

deleteTrack

public boolean deleteTrack(Track track)

지정된 트랙을 삭제해요. 시퀀스에 트랙이 있는지 확인하고, 있으면 제거해요.

  • 파라미터 track: 제거할 트랙
  • 반환값: 트랙이 제거되면 true, 시퀀스에 없어서 제거되지 않으면 false

더 알아보기