VoiceStatus

VoiceStatus

Synthesizer가 생성하는 보이스(voice) 중 하나의 현재 상태에 대한 정보를 담는 클래스예요.

출처: Java API Reference

본문

javax.sound.midi 패키지에 속하는 클래스로, java.lang.Object를 상속해요.

MIDI 신디사이저는 일반적으로 최대 동시 음 수(보이스라고도 함)를 생성할 수 있어요. 보이스는 연속된 단일 음들의 스트림이고, 들어오는 MIDI 음을 특정 보이스에 할당하는 과정을 보이스 할당(voice allocation)이라고 해요. 보이스 할당 알고리즘과 각 보이스의 내용은 보통 MIDI 신디사이저 내부에 있고 외부에서 숨겨져 있어요. MIDI 자체는 신디사이저가 어떤 음을 어떤 보이스에 할당했는지, 심지어 신디사이저가 합성할 수 있는 보이스 수를 보고하는 수단도 제공하지 않아요.

하지만 Java Sound에서 Synthesizer 클래스는 getVoiceStatus() 메서드를 통해 보이스 내용을 노출할 수 있어요. 이 동작은 권장되지만 선택 사항이에요. 보이스 할당을 노출하지 않는 신디사이저는 길이가 0인 배열을 반환해요. 보이스 상태를 보고하는 Synthesizer는 모든 보이스에 대해 이 정보를 항상 유지해야 해요.

보이스가 현재 MIDI 음을 처리하지 않으면 비활성(inactive)으로 간주돼요. 보이스는 note-on 명령을 받지 않았거나, 받은 모든 note-on 명령이 해당 note-off("all notes off" 메시지 포함)로 종료됐을 때 비활성이에요. 예를 들어 16개 동시 음을 재생할 수 있는 신디사이저에 4음 화음을 연주하라고 지시하면(이전 음이 계속 재생 중이지 않다고 가정) 이 경우 4개의 보이스만 활성돼요. 보통 활성으로 보고된 보이스는 가청 소리를 생성하지만 항상 그런 건 아니에요. 특히 보이스가 단일 손뼉 소리를 합성 중이라면 그 소리는 아주 빨리 사라져서 note-off 메시지를 받기 전에 들리지 않게 될 수 있어요. 이런 상황에서도 보이스는 여전히 활성으로 간주돼요.

VoiceStatus 클래스는 활성/비활성 상태 외에도 보이스의 현재 MIDI 채널, 뱅크, 프로그램 번호, MIDI 음 번호, MIDI 볼륨을 알려주는 필드를 제공해요. 보이스가 비활성인 동안 이 필드들은 각각 지정되지 않은 값을 가지므로, 먼저 active 필드를 확인해야 해요.

public class VoiceStatus extends Object

필드

  • active (boolean): 보이스가 현재 MIDI 음을 처리하고 있는지 나타내요.
  • channel (int): 이 보이스가 재생 중인 MIDI 채널. 활성이면 0 기반 채널 번호, 비활성이면 지정되지 않음.
  • bank (int): 이 보이스가 현재 사용하는 악기의 뱅크 번호. SoundBank 객체가 아니라 MIDI bank-select 메시지가 지시하는 번호예요. 활성이면 0에서 16383 범위, 비활성이면 지정되지 않음.
  • program (int): 이 보이스가 현재 사용하는 악기의 프로그램 번호. 활성이면 0에서 127 범위, 비활성이면 지정되지 않음.
  • note (int): 이 보이스가 재생하는 MIDI 음. 활성 보이스의 범위는 반음 단위로 0에서 127이고, 60은 Middle C를 가리켜요. 비활성이면 지정되지 않음.
  • volume (int): 보이스의 현재 MIDI 볼륨 레벨. 활성이면 0에서 127 범위, 비활성이면 지정되지 않음. 이 값이 이 보이스가 만드는 소리의 순간 레벨을 반드시 반영하지는 않아요.

생성자

public VoiceStatus()

VoiceStatus를 생성해요.

더 알아보기