MetaMessage

MetaMessage

신디사이저에는 의미가 없지만 MIDI 파일에 저장하고 시퀀서 프로그램이 해석할 수 있는 MidiMessage예요. Standard MIDI Files 명세는 시퀀스 번호, 가사, 큐 포인트, 템포 설정 등 다양한 유형의 메타 이벤트를 정의해요.

출처: Java API Reference

본문

javax.sound.midi 패키지에 속하는 클래스로, MidiMessage를 상속하고 Cloneable을 구현해요. 가사, 저작권, 템포 표시, 시간·조 서명, 마커 등의 메타 이벤트도 있어요.

MIDI 와이어 프로토콜로 데이터를 전송할 때 상태 값 0xFF를 가진 ShortMessage는 시스템 리셋 메시지를 나타내요. MIDI 파일에서는 이 같은 상태 값이 MetaMessage를 나타내요. 메타 메시지 유형은 상태 바이트 0xFF 다음에 오는 첫 바이트로 구분되고, 이후 바이트는 데이터 바이트예요. 시스템 전용 메시지처럼 MetaMessage 유형에 따라 데이터 바이트 수가 임의로 달라져요.

public class MetaMessage extends MidiMessage

필드

  • META (int): MIDI 파일에서 사용되는 MetaMessage의 상태 바이트(0xFF, 또는 255)예요. 실시간 "MIDI wire" 프로토콜에서 사용되는 ShortMessage.SYSTEM_RESET과 같은 값을 가져요.

생성자

public MetaMessage()

MetaMessage를 생성해요. 메시지 내용은 여기서 설정하지 않고, 나중에 setMessage로 설정해요.

public MetaMessage(int type, byte[] data, int length)
    throws InvalidMidiDataException

MetaMessage를 생성하고 메시지 파라미터를 설정해요. 메시지 내용은 setMessage 메서드로 바꿀 수 있어요.

  • 파라미터 type: 메타 메시지 유형(128보다 작아야 함)
  • 파라미터 data: MIDI 메시지의 데이터 바이트
  • 파라미터 length: data 바이트 배열의 바이트 수. 음수가 아니고 data.length보다 작거나 같아야 해요.
  • 예외 InvalidMidiDataException: 파라미터 값이 유효한 MIDI 메타 메시지를 지정하지 않는 경우
protected MetaMessage(byte[] data)

MetaMessage를 생성해요.

  • 파라미터 data: 완전한 메시지를 담은 바이트 배열. 메시지 데이터는 setMessage 메서드로 바꿀 수 있어요.

setMessage

public void setMessage(int type, byte[] data, int length)
    throws InvalidMidiDataException

MetaMessage의 메시지 파라미터를 설정해요. 메타 메시지에는 상태 바이트 값 0xFF 하나만 허용되므로 여기서 지정할 필요가 없어요. 모든 메타 메시지에 대해 getStatus 호출은 0xFF를 반환해요. type 인자는 MetaMessage에서 상태 바이트 다음에 오는 바이트의 유효한 값이어야 해요. data 인자는 MetaMessage의 이후 모든 바이트를 담아야 해요. 즉 MetaMessage의 유형을 지정하는 바이트는 데이터 바이트로 간주되지 않아요.

  • 예외 InvalidMidiDataException: 파라미터 값이 유효한 MIDI 메타 메시지를 지정하지 않는 경우

getType

public int getType()

MetaMessage의 유형을 얻어요.

  • 반환값: MetaMessage 유형을 나타내는 정수

getData

public byte[] getData()

메타 메시지 데이터의 복사본을 얻어요. 반환된 바이트 배열은 상태 바이트나 메시지 길이 데이터를 포함하지 않아요. 메타 메시지 데이터의 길이는 배열의 길이예요. 전체 메시지의 길이는 상태 바이트와 메타 메시지 유형 바이트를 포함하므로 반환된 배열보다 길 수 있어요.

  • 반환값: 메타 메시지 데이터를 담은 배열

clone

public Object clone()

이 객체와 같은 클래스, 같은 내용을 가진 새 객체를 만들어요.

  • 반환값: 이 인스턴스의 복제본

더 알아보기