MidiMessage

MidiMessage

MIDI 메시지의 베이스 클래스예요. 신디사이저가 응답할 수 있는 표준 MIDI 메시지뿐 아니라, 시퀀서 프로그램이 사용할 수 있는 "메타 이벤트"도 포함해요.

출처: Java API Reference

본문

javax.sound.midi 패키지에 속하는 추상 클래스로, java.lang.Object를 상속하고 Cloneable을 구현해요. 직접 하위 클래스로 MetaMessage, ShortMessage, SysexMessage가 있어요.

베이스 MidiMessage 클래스는 MIDI 메시지에 대한 세 가지 정보에 접근을 제공해요.

  • 메시지의 상태 바이트
  • 메시지의 총 바이트 길이(상태 바이트 + 데이터 바이트)
  • 완전한 메시지를 담은 바이트 배열

MidiMessage는 이 값들을 얻는(get) 메서드는 포함하지만 설정하는(set) 메서드는 포함하지 않아요. 설정은 하위 클래스의 책임이에요.

MIDI 표준은 MIDI 데이터를 바이트로 표현해요. 하지만 Java는 부호 있는 바이트를 사용하므로, Java Sound API는 MIDI 데이터를 표현할 때 바이트 대신 정수를 사용해요. 예를 들어 MidiMessagegetStatus() 메서드는 MIDI 상태 바이트를 정수로 반환해요. Java Sound 외부에서 비롯된 MIDI 데이터가 부호 있는 바이트로 인코딩됐다면 다음 변환으로 정수로 바꿀 수 있어요.

int i = (int)(byte & 0xFF)

알려진 MIDI 바이트 값을 메서드 파라미터로 전달해야 한다면 10진수 또는 16진수 표기로 정수로 직접 표현할 수 있어요. 예를 들어 ShortMessagesetMessage(int) 메서드의 첫 인자로 "active sensing" 상태 바이트를 전달하려면 254 또는 0xFE로 표현할 수 있어요.

public abstract class MidiMessage extends Object implements Cloneable

필드

  • data (byte[]): MIDI 메시지 데이터. 첫 바이트는 메시지의 상태 바이트이고, 이후 메시지 길이까지의 바이트는 데이터 바이트예요.
  • length (int): 상태 바이트와 데이터 바이트를 포함한 MIDI 메시지의 바이트 수

생성자

protected MidiMessage(byte[] data)

MidiMessage를 생성해요. 이 보호 생성자는 구체적 하위 클래스가 호출하며, data 배열이 완전하고 유효한 MIDI 메시지를 지정하도록 해야 해요.

setMessage

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

MIDI 메시지 데이터를 설정해요. 이 보호 메서드는 구체적 하위 클래스가 호출하며, data 배열이 완전하고 유효한 MIDI 메시지를 지정하도록 해야 해요.

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

getMessage

public byte[] getMessage()

MIDI 메시지 데이터를 얻어요. 반환된 바이트 배열의 첫 바이트는 메시지의 상태 바이트이고, 이후 메시지 길이까지의 바이트는 데이터 바이트예요. 바이트 배열은 실제 메시지보다 긴 길이를 가질 수 있는데, 실제 메시지의 총 길이는 getLength()가 보고해요.

  • 반환값: 완전한 MidiMessage 데이터를 담은 바이트 배열

getStatus

public int getStatus()

MIDI 메시지의 상태 바이트를 얻어요. 상태 "바이트"는 정수로 표현돼요.

  • 반환값: 이 이벤트의 상태 바이트의 정수 표현

getLength

public int getLength()

MIDI 메시지의 총 길이를 바이트로 얻어요. MIDI 메시지는 하나의 상태 바이트와 0개 이상의 데이터 바이트로 구성돼요. 반환 값은 시스템 실시간 메시지의 1, 채널 메시지의 2 또는 3, 메타·시스템 전용 메시지의 임의 값을 범위로 해요.

  • 반환값: 메시지의 바이트 길이

clone

public abstract Object clone()

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

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

더 알아보기