JavaTM Platform
Standard Ed. 6

javax.sound.midi
인터페이스 MidiChannel



public interface MidiChannel

MidiChannel 객체는 단일의 MIDI 채널을 나타냅니다. 일반적으로, 각 MidiChannel 메소드는, MIDI 스펙으로 정의된 「채널 음성」, 「채널 모드」등의 MIDI 의 메세지를 처리합니다. 다만,MidiChannel 에는, 표준 MIDI 채널 메세지의 1 개에 의해 가장 최근 설정된 값을 검색하는 get 메소드도 있습니다. 같이 채널별 솔로 메소드 및 뮤트 메소드도 추가되고 있습니다.

Synthesizer 객체에는 MidiChannel 의 컬렉션이 있어, 일반적으로은 MIDI 1.0 스펙에 의해 16 채널의 각각 1 개(살)씩 규정되고 있습니다. Synthesizer 은,MidiChannelnoteOn 메세지를 수신했을 경우에 사운드를 생성합니다.

MIDI 채널 메세지의 규정 동작에 대해서는, 여기에서는 자세하게 말하지 않으므로, 「MIDI 1.0 Specification」를 참조해 주세요. 스펙은 「MIDI Reference:The Complete MIDI 1.0 Detailed Specification」라고 하는 타이틀로, MIDI Manufacturer's Association ( http://www.midi.org )로부터 발행되고 있습니다.

MIDI 는 원래 키보드 뮤지션의 움직임을 전하는 프로토콜이었습니다. 그 원형은 MidiChannel API 에 볼 수가 있습니다. API 에는 키 번호, 키 속력, 키 압력등의 MIDI 의 개념이 보관 유지되고 있습니다. MIDI 데이터는 반드시 키보드 연주자에 의해 만들어질 필요는 없는, 이라고 하는 것을 이해해 둘 필요가 있습니다 (전송원래는 다른 악기의 뮤지션이라도 소프트웨어에서도 가능). 노트가 어떻게 만들어졌는지를 관계없이, 속력과 압력에 일정한 값을 생성하는 디바이스도 있습니다. 또, MIDI 스펙에서는, 구현 측에 적합한 방법으로 신디사이저가 데이터를 사용할 수 있게 되어 있는 부분도 많이 있습니다. 예를 들어, 속력 데이터를 볼륨 또는 밝음, 혹은 그 양쪽 모두에 항상 맵 할 필요는 없습니다.

관련 항목:
Synthesizer.getChannels()

메소드의 개요
 void allNotesOff ()
          이 채널로 현재 출력중의 노트를 모두 오프로 합니다.
 void allSoundOff ()
          이 채널로 출력중의 노트를 모두, 곧바로 오프로 합니다.
 void controlChange (int controller, int value)
          지정된 콘트롤러의 값의 변화에 반응합니다.
 int getChannelPressure ()
          채널의 키보드 압력을 가져옵니다.
 int getController (int controller)
          지정의 콘트롤러의 현재의 값을 가져옵니다.
 boolean getMono ()
          현재의 물건/다중 모드를 가져옵니다.
 boolean getMute ()
          이 채널의 현재의 뮤트 상태를 가져옵니다.
 boolean getOmni ()
          현재의 엄니 모드를 가져옵니다.
 int getPitchBend ()
          이 채널의 정보 또는 하부 피치 오프셋(offset)를 가져옵니다.
 int getPolyPressure (int noteNumber)
          지정된 키를 누르고 있는 압력을 가져옵니다.
 int getProgram ()
          이 채널의 현재의 프로그램 번호를 가져옵니다.
 boolean getSolo ()
          이 채널의 현재의 솔로 상태를 가져옵니다.
 boolean localControl (boolean on)
          로컬 제어를 온 또는 오프로 합니다.
 void noteOff (int noteNumber)
          지정된 노트의 소리를 오프로 합니다.
 void noteOff (int noteNumber, int velocity)
          지정된 노트의 소리를 오프로 합니다.
 void noteOn (int noteNumber, int velocity)
          지정된 노트의 소리를 내기 시작합니다.
 void programChange (int program)
          프로그램 (패치)을 변경합니다.
 void programChange (int bank, int program)
          뱅크 번호 및 프로그램 (패치) 번호를 사용해 프로그램을 변경합니다.
 void resetAllControllers ()
          전구현 콘트롤러를 디폴트 값에 리셋 합니다.
 void setChannelPressure (int pressure)
          키보드 압력의 변화에 반응합니다.
 void setMono (boolean on)
          물건 모드를 온 또는 오프로 합니다.
 void setMute (boolean mute)
          이 채널의 뮤트 상태를 설정합니다.
 void setOmni (boolean on)
          엄니 모드를 온 또는 오프로 합니다.
 void setPitchBend (int bend)
          이 채널의 모든 노트의 피치 좌표를 변경합니다.
 void setPolyPressure (int noteNumber, int pressure)
          지정된 소리의 키 압력에 반응합니다.
 void setSolo (boolean soloState)
          이 채널의 솔로 상태를 설정합니다.
 

메소드의 상세

noteOn

void noteOn(int noteNumber,
            int velocity)
지정된 노트의 소리를 내기 시작합니다. 키 다운 속도는 일반적으로, 그 노트의 볼륨 또는 밝음, 혹은 그 양쪽 모두를 제어합니다. velocity 가 제로의 경우, 이 메소드는 noteOff(int) 와 같은 기능을 해, 노트를 정지시킵니다.

파라미터:
noteNumber - MIDI 노트 넘버, 0 에서 127 까지 (60 = 중앙의 C 음)
velocity - 키를 누르는 속도
관련 항목:
noteOff(int, int)

noteOff

void noteOff(int noteNumber,
             int velocity)
지정된 노트의 소리를 오프로 합니다. 키 업 속력을 무시하지 않는 경우는, 키 업 속력을 사용해, 노트의 감쇠에 영향을 줄 수가 있습니다. 어쨌든, 노트는 순간에 사라지는 것은 아닙니다. 노트의 감쇠 속도는 Instrument 의 내부에 의해 정해집니다. 호르드페달 (콘트롤러,controlChange 를 참조)을 누르고 있는 경우는, 이 메소드의 효과는 페달을 떼어 놓을 때까지 보류됩니다.

파라미터:
noteNumber - MIDI 노트 넘버, 0 에서 127 까지 (60 = 중앙의 C 음)
velocity - 키를 떼어 놓는 속도
관련 항목:
noteOff(int) , noteOn(int, int) , allNotesOff() , allSoundOff()

noteOff

void noteOff(int noteNumber)
지정된 노트의 소리를 오프로 합니다.

파라미터:
noteNumber - MIDI 노트 넘버, 0 에서 127 까지 (60 = 중앙의 C 음)
관련 항목:
noteOff(int, int)

setPolyPressure

void setPolyPressure(int noteNumber,
                     int pressure)
지정된 소리의 키 압력에 반응합니다. 다선율 키 압력에 의해, 키보드 연주자는 복수의 키를, 각각 다른 압력으로 동시에 누를 수가 있습니다. 압력을 무시하지 않는 경우, 일반적으로은 압력을 사용해 그 노트의 볼륨, 밝음, 바이브라토등의 특징을 변화시킵니다. 부하의 신디사이저가 이 MIDI 메세지를 지원하지 않는 경우도 있습니다. setPolyPressure 가 성공했는지의 여부를 검증하려면 ,getPolyPressure 를 사용합니다.

파라미터:
noteNumber - MIDI 노트 넘버, 0 에서 127 까지 (60 = 중앙의 C 음)
pressure - 지정된 키의 값, 0 에서 127 까지 (127 = 최대압력)
관련 항목:
getPolyPressure(int)

getPolyPressure

int getPolyPressure(int noteNumber)
지정된 키를 누르고 있는 압력을 가져옵니다.

파라미터:
noteNumber - MIDI 노트 넘버, 0 에서 127 까지 (60 = 중앙의 C 음) setPolyPressure 를 호출해도 무슨 효과도 없습니다.
반환값:
그 소리에 대한 압력, 0 에서 127 까지 (127 = 최대압력)
관련 항목:
setPolyPressure(int, int)

setChannelPressure

void setChannelPressure(int pressure)
키보드 압력의 변화에 반응합니다. 채널 압력은, 키보드 연주자가 키보드 전체를 얼마나 강하게 누르고 있는지를 나타냅니다. 이것은,setPolyPressure 의 설정에 의해, 키별 압력센서의 최대치 또는 평균치가 됩니다. 좀 더 일반적으로 말하면(자), 채널 압력은, 다선율 키 압력을 구현하고 있지 않는 디바이스의 단일의 센서의 측정치입니다. setPolyPressure 로 말하고 있도록(듯이), 압력을 사용해 사운드의 다양한 면을 제어할 수 있습니다. 부하의 신디사이저가 이 MIDI 메세지를 지원하지 않는 경우도 있습니다. setChannelPressure 가 성공했는지의 여부를 검증하려면 ,getChannelPressure 를 사용합니다.

파라미터:
pressure - 키보드를 누르고 있는 압력, 0 에서 127 까지 (127 = 최대압력)
관련 항목:
setPolyPressure(int, int) , getChannelPressure()

getChannelPressure

int getChannelPressure()
채널의 키보드 압력을 가져옵니다. 디바이스가 채널 압력의 설정을 지원하지 않는 경우, 이 메소드는 항상 0 을 돌려줍니다. setChannelPressure 를 호출해도 무슨 효과도 없습니다.

반환값:
그 소리에 대한 압력, 0 에서 127 까지 (127 = 최대압력)
관련 항목:
setChannelPressure(int)

controlChange

void controlChange(int controller,
                   int value)
지정된 콘트롤러의 값의 변화에 반응합니다. 콘트롤러는 키보드의 키 이외의 제어장치로, 스윗치, 슬라이더, 페달, 다이얼, 숨압력센서 등입니다. MIDI 1.0 스펙은, MIDI 디바이스의 일반적인 콘트롤러에 표준 번호를 주어 콘트롤러의 몇개인가에 대해 목적을 설명하고 있습니다. 콘트롤러의 변화에 대한 Instrument 의 반응의 방법은, 그 Instrument 특유인 경우가 있습니다.

MIDI 1.0 스펙은 7 비트 콘트롤러와 14 비트 콘트롤러의 양쪽 모두를 정의합니다. 다이얼이나 슬라이더등의 연속형 콘트롤러는 14 비트 (2 MIDI 바이트)가 표준으로, 스윗치등의 이산 콘트롤러는 7 비트 (1 MIDI 바이트)가 표준입니다. 각 형의 제어의 예상 해상도를 알려면 , 스펙을 참조해 주세요.

콘트롤러 64 ~ 95 (0x40 - 0x5F)에서는, 7 비트의 정밀도가 가능합니다. 7 비트 콘트롤러의 값은 모두,value 인수에 의해 설정됩니다. 콘트롤러의 추가 설정에 의해, 14 비트의 정밀도가 가능하게 됩니다. 이것에는 콘트롤러 번호를 2 개 사용합니다. 1 개(살)은 최상정도 7 비트용으로, 이제(벌써) 1 개(살)은 최하정도 7 비트용입니다. 콘트롤러 번호 0 ~ 31 (0x00 - 0x1F)은, 14 비트 콘트롤러의 최상정도 7 비트를 제어해, 콘트롤러 번호 32 ~ 63 (0x20 - 0x3F)은, 14 비트 콘트롤러의 최하정도 7 비트를 제어합니다. 예를 들어, 콘트롤러 번호 7 (0x07)은 채널 음량 콘트롤러의 상위 7 비트를 제어해, 콘트롤러 번호 39 (0x27)는 하위 7 비트를 제어합니다. 14 비트 콘트롤러의 값은, 상위 7 비트와 하위 7 비트의 상호작용에 의해 정해집니다. 콘트롤러의 최상정도 7 비트가 설정되면(자) (콘트롤러 번호 0 ~ 31 을 사용), 하위의 7 비트는 자동적으로 0 으로 설정됩니다. 그 후, 하위 7 비트에 대응하는 콘트롤러 번호를 사용해 한층 더 콘트롤러의 값이 변경됩니다. 부하의 신디사이저가 특정의 콘트롤러 메세지를 지원하지 않는 경우도 있습니다. controlChange 호출에 성공했는지의 여부를 검증하려면 ,getController 를 사용합니다.

파라미터:
controller - 콘트롤러 번호 (0 ~ 127, 해석에 대해서는 MIDI 1.0 스펙 참조)
value - 지정된 콘트롤러가 변경되는 값 (0 ~ 127)
관련 항목:
getController(int)

getController

int getController(int controller)
지정의 콘트롤러의 현재의 값을 가져옵니다. 반환값은 7 비트로 표현됩니다. 14 비트 콘트롤러의 경우, MSB 콘트롤러치와 LSB 콘트롤러치를 따로 따로 취득할 필요가 있습니다. 예를 들어, 볼륨 콘트롤러의 14 비트치를 요구하려면 , 콘트롤러 7 (0 x07, 채널 볼륨 MSB)의 값과 128 을 곱해 콘트롤러 39 (0 x27, 채널 볼륨 LSB)의 값을 더합니다. 디바이스가 특정의 콘트롤러의 설정을 지원하지 않는 경우, 이 메소드는 이 콘트롤러에 대해서 0 을 돌려줍니다. controlChange 를 호출해도 무슨 효과도 없습니다.

파라미터:
controller - 바람직한 값의 콘트롤러 번호. 가능 범위는 0 ~ 127, 해석에 대해서는 MIDI 1.0 스펙 참조
반환값:
지정된 콘트롤러의 현재의 값 (0 ~ 127)
관련 항목:
controlChange(int, int)

programChange

void programChange(int program)
프로그램 (패치)을 변경합니다. 이것에 의해, 현재 선택되고 있는 계측의 뱅크로부터 특정의 계측이 선택됩니다.

MIDI 스펙은, 벌써 들리고 있는 소리를 새로운 인스트르먼트 (음색)로 전환하든가, 혹은 노트·오프에 의해 종료시킬 때까지 원래의 음색을 계속할까에 대해서는, 규정하고 있습니다.

프로그램 번호는 제로로부터 시작됩니다 (0 ~ 127 으로 나타내진다). MIDI 하드웨어 디스플레이 및 MIDI 에 관한 문서에는, 일반적으로 0 ~ 127 은 아니고 1 ~ 128 까지의 번호가 사용됩니다. 부하의 신디사이저가 특정의 프로그램을 지원하지 않는 경우도 있습니다. programChange 호출에 성공했는지의 여부를 검증하려면 ,getProgram 를 사용합니다.

파라미터:
program - 바꾸는 프로그램 번호 (0 ~ 127)
관련 항목:
programChange(int, int) , getProgram()

programChange

void programChange(int bank,
                   int program)
뱅크 번호 및 프로그램 (패치) 번호를 사용해 프로그램을 변경합니다. 부하의 신디사이저가 특정의 뱅크 또는 프로그램을 지원하지 않는 경우도 있습니다. programChange 호출에 성공했는지의 여부를 검증하려면 ,getProgramgetController 를 사용합니다. 제어의 변경에 의해 뱅크가 변경되고 있을 가능성이 있으므로, 다음의 스테이트먼트를 사용해 현재의 뱅크를 확인합니다.
   int bank = (getController(0) * 128)
              + getController(32);
 

파라미터:
bank - 바꾸는 뱅크 번호 (0 ~ 16383)
program - 지정된 뱅크 (0 ~ 127)에서 사용하는 프로그램 (패치)
관련 항목:
programChange(int) , getProgram()

getProgram

int getProgram()
이 채널의 현재의 프로그램 번호를 가져옵니다.

반환값:
현재 선택되고 있는 패치의 프로그램 번호
관련 항목:
Patch.getProgram() , Synthesizer.loadInstrument(javax.sound.midi.Instrument) , programChange(int)

setPitchBend

void setPitchBend(int bend)
이 채널의 모든 노트의 피치 좌표를 변경합니다. 이것은 현재 출력중의 노트 모두후속의 노트에 영향을 줍니다. 피치의 벤드를 없애려면 , 값을 중앙의 위치에 리셋 할 필요가 있습니다.

MIDI 스펙에서는 핏치벤드를 14 비트치에 규정해, 제로가 최대 하부 비뚤어져, 16383 이 최대 윗쪽 비뚤어져, 8192 가 중앙 (핏치벤드 없음)이다고 규정하고 있습니다. 피치 변경의 실제의 값은 지정되고 있지 않습니다. 피치는, 핏치벤드의 감도 설정에 의해 변경할 수 있습니다. 다만, 일반적인 MIDI 스펙에서는, 디폴트 범위는 중앙에서 상하 2 반음으로 되어 있습니다. 부하의 신디사이저가 이 MIDI 메세지를 지원하지 않는 경우도 있습니다. setPitchBend 가 정상적으로 실행되었는지의 여부를 검증하려면 ,getPitchBend 를 사용합니다.

파라미터:
bend - 피치 변경량, 마이너스가 아닌 14 비트의 값 (8192 = 비뚤어져 없음)
관련 항목:
getPitchBend()

getPitchBend

int getPitchBend()
이 채널의 정보 또는 하부 피치 오프셋(offset)를 가져옵니다. 디바이스가 핏치벤드의 설정을 지원하지 않는 경우, 이 메소드는 항상 8192 를 돌려줍니다. setPitchBend 를 호출해도 무슨 효과도 없습니다.

반환값:
일그러짐량, 마이너스가 아닌 14 비트의 값 (8192 = 비뚤어져 없음)
관련 항목:
setPitchBend(int)

resetAllControllers

void resetAllControllers()
전구현 콘트롤러를 디폴트 값에 리셋 합니다.

관련 항목:
controlChange(int, int)

allNotesOff

void allNotesOff()
이 채널로 현재 출력중의 노트를 모두 오프로 합니다. 노트는 순간에 사라지는 것은 아닙니다. 노트의 감쇠 속도는 Instrument 의 내부에 의해 정해집니다. 호르드페다르콘트로라 (controlChange 를 참조)를 누르고 있는 경우는, 이 메소드의 효과는 페달을 떼어 놓을 때까지 보류됩니다.

관련 항목:
allSoundOff() , noteOff(int)

allSoundOff

void allSoundOff()
이 채널로 출력중의 노트를 모두, 곧바로 오프로 합니다. 호르드페달 및 현재의 Instrument 의 내부 감쇠 속도는 무시합니다.

관련 항목:
allNotesOff()

localControl

boolean localControl(boolean on)
로컬 제어를 온 또는 오프로 합니다. 로컬 제어의 디폴트는 온입니다. 「온」으로 설정되어 있으면(자), 디바이스가 사운드의 합성 및 MIDI 메세지의 전송도 할 수 있는 경우, 디바이스가 노트 온 및 노트 오프 메세지에 응답해 사운드를 합성해, 디바이스 자체가 전송 합니다. 「오프」로 설정되면(자), 신디사이저는 신디사이저 자체의 전송 된 MIDI 메세지는 무시하지만 다른 디바이스로부터 수신한 메세지는 무시하지 않습니다. 부하의 신디사이저가 로컬 제어를 지원하지 않는 경우도 있습니다. localControl 호출에 성공했는지의 여부를 검증하려면 , 반환값을 확인합니다.

파라미터:
on - 로컬 제어를 온으로 하는 경우는 true, 오프로 하는 경우는 false
반환값:
새로운 로컬 제어치. 로컬 제어가 지원 되어 있지 않은 경우는 false

setMono

void setMono(boolean on)
물건 모드를 온 또는 오프로 합니다. 물건 모드에서는, 채널은 한 번에 1 개의 노트만을 합성합니다. 다중 모드 (물건 모드 오프와 같다)에서는, 채널은 동시에 복수의 노트를 합성할 수 있습니다. 디폴트는 물건 오프 (다중 모드 온)입니다.

「물건」은, 「모노포닉크 (단성의 것)」라고 하는 단어의 생략형으로, 이 문맥에서는 「다선율 (다성의 것)」이라고 하는 단어의 반대를 의미해, MIDI 채널별의 단일의 신디사이저음을 가리킵니다. 얼마나 많은 오디오 채널이 있는가 하는 것으로는 관계 없습니다 ( 「모노포닉크」대 「스테레오포닉크」의 녹음의 경우와 같다). 부하의 신디사이저가 물건 모드를 지원하지 않는 경우도 있습니다. setMono 호출에 성공했는지의 여부를 검증하려면 ,getMono 를 사용합니다.

파라미터:
on - 물건 모드를 온으로 하는 경우는 true, 오프 (즉 다중 모드를 온)로 하는 경우는 false
관련 항목:
getMono() , VoiceStatus

getMono

boolean getMono()
현재의 물건/다중 모드를 가져옵니다. 물건 모드와 폴리 모드의 변환을 허가하지 않는 신디사이저는,setMono 호출을 고려하지 않고, 항상 같은 값을 돌려줍니다.

반환값:
물건 모드가 온의 경우는 true, 그 이외는 false (즉 다중 모드가 온)
관련 항목:
setMono(boolean)

setOmni

void setOmni(boolean on)
엄니 모드를 온 또는 오프로 합니다. 엄니 모드에서는, 채널은 전채널에 송신된 메세지에 응답합니다. 엄니가 오프의 경우는, 채널은 그 채널 번호에 송신된 메세지에만 응답합니다. 디폴트는 엄니 오프입니다. 부하의 신디사이저가 엄니 모드를 지원하지 않는 경우도 있습니다. setOmni 가 정상적으로 실행되었는지의 여부를 검증하려면 ,getOmni 를 사용합니다.

파라미터:
on - 엄니 모드를 온으로 하는 경우는, 오프로 하는 경우는 false
관련 항목:
getOmni() , VoiceStatus

getOmni

boolean getOmni()
현재의 엄니 모드를 가져옵니다. 엄니 모드의 변환을 허가하지 않는 신디사이저는,setOmni 호출을 고려하지 않고, 항상 같은 값을 돌려줍니다.

반환값:
엄니 모드가 온의 경우는 true, 그 이외는 false (즉 엄니 모드가 오프)
관련 항목:
setOmni(boolean)

setMute

void setMute(boolean mute)
이 채널의 뮤트 상태를 설정합니다. true 의 값은, 그 채널의 소리가 지워지고 있는 것을 의미해,false 는 그 채널로 소리가 출력되는 것을 의미합니다 (다른 채널이 솔로로 되어 있지 않은 경우).

allSoundOff() 와 달리, 이 메소드는 특정의 채널인 만큼 적용되어 전채널에는 적용되지 않습니다. 또, 이 메소드는 현재 출력되고 있는 노트 뿐만이 아니라, 그 후 수신되는 노트도 무음으로 합니다. 부하의 신디사이저가 채널 뮤트를 지원하지 않는 경우도 있습니다. setMute 호출에 성공했는지의 여부를 검증하려면 ,getMute 를 사용합니다.

파라미터:
mute - 새로운 뮤트 상태
관련 항목:
getMute() , setSolo(boolean)

getMute

boolean getMute()
이 채널의 현재의 뮤트 상태를 가져옵니다. 부하의 신디사이저가 이 채널의 뮤트를 지원하지 않는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
채널의 소리가 지워지고 있는 경우는 true, 그렇지 않은 경우는 false
관련 항목:
setMute(boolean)

setSolo

void setSolo(boolean soloState)
이 채널의 솔로 상태를 설정합니다. solotrue 의 경우는, 이 채널 및 다른 솔로가 되어 있는 것 외의 채널의 소리만이 들립니다. solofalse 의 경우는, 다른 솔로가 되어 있는 채널의 소리만이 들립니다만, 솔로가 되어 있는 채널이 없을 때는 뮤트로 되어 있지 않은 채널의 소리가 모두 들립니다. 부하의 신디사이저가 솔로 채널을 지원하지 않는 경우도 있습니다. setSolo 호출에 성공했는지의 여부를 검증하려면 ,getSolo 를 사용합니다.

파라미터:
soloState - 채널의 새로운 솔로 상태
관련 항목:
getSolo()

getSolo

boolean getSolo()
이 채널의 현재의 솔로 상태를 가져옵니다. 부하의 신디사이저로 이 채널을 솔로로 할 수 없는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
채널이 솔로의 경우는 true, 그렇지 않은 경우는 false
관련 항목:
setSolo(boolean)

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.