Интерфейс MidiChannel
public interface MidiChannel
Объект MidiChannel представляет собой отдельный MIDI-канал. Как правило, каждый метод MidiChannel обрабатывает сообщение MIDI для соответствующего канала ("голос канала" или "режим канала") согласно спецификации MIDI. Однако, MidiChannel добавляет некоторые методы "get", которые извлекают значение, установленное последним сообщением стандартного MIDI-канала. Аналогично, добавлены методы для соло и глушения на канальном уровне.
Объект содержит набор SynthesizerMidiChannels, обычно по одному для каждого из 16 каналов, определенных спецификацией MIDI 1.0. Synthesizer генерирует звук, когда его MidiChannels получают сообщения noteOn.
Для получения дополнительной информации о рекомендуемом поведении сообщений MIDI-канала, которые здесь не документированы подробно, см. спецификацию MIDI 1.0. Спецификация называется MIDI Reference:
The Complete MIDI 1.0 Detailed Specification, и опубликована Ассоциацией производителей MIDI (http://www.midi.org).
MIDI изначально был протоколом для передачи жестов пианиста. Эта генезис видна в API MidiChannel, который сохраняет такие MIDI-концепции, как номер клавиши, скорость нажатия клавиши и давление на клавишу. Следует понимать, что данные MIDI не обязательно исходят от пианиста (источник может быть другим музыкантом или программным обеспечением). Некоторые устройства могут генерировать постоянные значения скорости и давления, независимо от того, как была сыграна нота. Кроме того, спецификация MIDI часто оставляет за синтезатором право использовать данные так, как посчитает нужным разработчик. Например, данные о скорости не всегда должны соответствовать громкости и/или яркости.
- См. также:
Synthesizer.getChannels()
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
allNotesOff() Отключает все звучащие ноты на этом канале. |
void |
allSoundOff() Немедленно отключает все звучащие ноты на этом канале, игнорируя состояние педали Sustain и внутреннюю скорость затухания текущего |
void |
controlChange(int controller,
int value) Реагирует на изменение значения указанного контроллера. |
int |
getChannelPressure() Получает давление клавиш на канале. |
int |
getController(int controller) Получает текущее значение указанного контроллера. |
boolean |
getMono() Получает текущий режим моно/поли. |
boolean |
getMute() Получает текущий режим глушения для этого канала. |
boolean |
getOmni() Получает текущий режим omni. |
int |
getPitchBend() Получает смещение высоты тона вверх или вниз для этого канала. |
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) Включает или выключает режим omni. |
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 = До центральный) -
velocity- скорость нажатия клавиши - См. также:
noteOff(int, int)
noteOff
void noteOff(int noteNumber,
int velocity) Отключает указанную ноту. Скорость отпускания клавиши, если не игнорируется, может влиять на скорость затухания ноты. В любом случае, нота может не затухнуть мгновенно; скорость затухания определяется внутренними механизмами Instrument. Если педаль Sustain (управляющий элемент; см. controlChange) нажата, действие этого метода откладывается до отпускания педали.
- Параметры:
-
noteNumber- номер MIDI-ноты от 0 до 127 (60 = До центральный) -
velocity- скорость отпускания клавиши - См. также:
-
noteOff(int),noteOn(int, int),allNotesOff(),allSoundOff()
noteOff
void noteOff(int noteNumber)
Отключает указанную ноту.
- Параметры:
-
noteNumber- номер MIDI-ноты от 0 до 127 (60 = До центральный) - См. также:
noteOff(int, int)
setPolyPressure
void setPolyPressure(int noteNumber,
int pressure) Реагирует на изменение давления на указанную ноту. Полифоническое давление клавиши позволяет игроку на клавиатуре нажимать несколько клавиш одновременно, каждая с разным давлением. Давление, если не игнорируется, обычно используется для изменения таких параметров, как громкость, яркость или вибрато ноты. Возможно, что базовый синтезатор не поддерживает это MIDI-сообщение. Для проверки того, что setPolyPressure выполнилось успешно, используйте getPolyPressure.
- Параметры:
-
noteNumber- номер MIDI-ноты от 0 до 127 (60 = До центральный) -
pressure- значение для указанной клавиши, от 0 до 127 (127 = максимальное давление) - См. также:
getPolyPressure(int)
getPolyPressure
int getPolyPressure(int noteNumber)
Получает давление, с которым нажата указанная клавиша.
- Параметры:
-
noteNumber- номер MIDI-ноты от 0 до 127 (60 = До центральный). Если устройство не поддерживает настройку полифонического давления, этот метод всегда возвращает 0. Вызов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 бит (два байта MIDI), а дискретные контроллеры, такие как переключатели, обычно имеют 7 бит (один байт MIDI). Обратитесь к спецификации, чтобы узнать ожидаемое разрешение для каждого типа управления.
Контроллеры с номерами от 64 до 95 (0x40 - 0x5F) имеют 7-битную точность. Значение 7-битного контроллера полностью задается аргументом value . Дополнительный набор контроллеров обеспечивает 14-битную точность, используя два номера контроллеров, один для наиболее значимых 7 бит и другой для наименее значимых 7 бит. Номера контроллеров от 0 до 31 (0x00 - 0x1F) управляют наиболее значимыми 7 битами 14-битных контроллеров; номера контроллеров от 32 до 63 (0x20 - 0x3F) управляют наименее значимыми 7 битами этих контроллеров. Например, контроллер с номером 7 (0x07) управляет верхними 7 битами контроллера громкости канала, а контроллер с номером 39 (0x27) управляет нижними 7 битами. Значение 14-битного контроллера определяется взаимодействием двух частей. Когда наиболее значимые 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 (0x07, MSB громкости канала) на 128 и добавления значения контроллера 39 (0x27, LSB громкости канала). Если устройство не поддерживает настройку определенного контроллера, этот метод возвращает 0 для этого контроллера. Вызов controlChange в этом случае не повлияет.
- Параметры:
-
controller- номер контроллера, значение которого требуется. Допустимый диапазон — 0–127; см. спецификацию MIDI 1.0 для интерпретации. - Возвращает:
- текущее значение указанного контроллера (от 0 до 127)
- См. также:
controlChange(int, int)
programChange
void programChange(int program)
Изменяет программу (патч). Это выбирает конкретный инструмент из текущего банка инструментов.
Спецификация MIDI не предписывает, должны ли ноты, которые уже звучат, переключиться на новый инструмент (тембр), или продолжать звучать своим исходным тембром до прекращения звучания ноты.
Номер программы является нулевым (выражается от 0 до 127). Обратите внимание, что MIDI-оборудование и литература о MIDI обычно используют диапазон от 1 до 128. Возможно, что базовый синтезатор не поддерживает определенную программу. Для проверки того, что вызов programChange был успешным, используйте getProgram.
- Параметры:
-
program- номер программы для переключения (от 0 до 127) - См. также:
-
programChange(int, int),getProgram()
programChange
void programChange(int bank,
int program) Изменяет программу, используя номера банка и программы (патча). Возможно, что базовый синтезатор не поддерживает определенный банк или программу. Для проверки того, что вызов programChange был успешным, используйте getProgram и getController. Поскольку банки изменяются с помощью изменений управления, вы можете проверить текущий банк с помощью следующего оператора:
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 — центр (нет сгибания высоты тона). Фактическая величина изменения высоты тона не указана; её можно изменить с помощью настройки чувствительности сгибания высоты тона. Однако спецификация General MIDI гласит, что диапазон по умолчанию должен быть на две полутона вверх и вниз от центра. Возможно, что базовый синтезатор не поддерживает это сообщение MIDI. Чтобы проверить, что setPitchBend было выполнено успешно, используйте getPitchBend.
- Параметры:
-
bend— величина изменения высоты тона в качестве неотрицательного 14-битного значения (8192 = без сгибания) - См. также:
getPitchBend()
getPitchBend
int getPitchBend()
Получает смещение высоты тона вверх или вниз для этого канала. Если устройство не поддерживает настройку сгибания высоты тона, этот метод всегда возвращает 8192. Вызов setPitchBend не окажет никакого влияния.
- Возвращает:
- величину сгибания в качестве неотрицательного 14-битного значения (8192 = без сгибания)
- См. также:
setPitchBend(int)
resetAllControllers
void resetAllControllers()
Сбрасывает все реализованные контроллеры до их значений по умолчанию.
- См. также:
controlChange(int, int)
allNotesOff
void allNotesOff()
Отключает все ноты, которые в данный момент звучат на этом канале. Ноты могут не прекратить звучание мгновенно; скорость их затухания определяется внутренними параметрами Instrument. Если педаль Sustain (см. controlChange) нажата, действие этого метода откладывается до момента отпускания педали.
- См. также:
-
allSoundOff(),noteOff(int)
allSoundOff
void allSoundOff()
Немедленно выключает все звучащие ноты на этом канале, игнорируя состояние педали Sustain и внутреннюю скорость затухания текущего Instrument.
- См. также:
allNotesOff()
localControl
boolean localControl(boolean on)
Включает или выключает локальный контроль. По умолчанию локальный контроль включён. Значение «включено» означает, что если устройство способно как генерировать звук, так и передавать сообщения MIDI, оно будет генерировать звук в ответ на сообщения note-on и note-off, которые оно само передаёт. Оно также будет реагировать на сообщения, полученные от других устройств. Значение «выключено» означает, что синтезатор будет игнорировать свои собственные сообщения MIDI, но не те, которые получены от других устройств. Возможно, базовый синтезатор не поддерживает локальный контроль. Для проверки успешности вызова localControl проверьте возвращаемое значение.
- Параметры:
-
on—trueдля включения локального контроля,falseдля выключения локального контроля - Возвращает:
- новое значение локального контроля или false, если локальный контроль не поддерживается
setMono
void setMono(boolean on)
Включает или выключает монорежим. В монорежиме канал синтезирует только одну ноту за раз. В полирежиме (тождественно монорежиму выключено) канал может синтезировать несколько нот одновременно. По умолчанию монорежим выключен (полирежим включен).
«Моно» — сокращение от слова «монофонический», которое в данном контексте противопоставляется слову «полифонический» и относится к одному голосу синтезатора на каждый канал MIDI. Это не имеет отношения к количеству аудиоканалов (как в «монофонических» и «стереофонических» записях). Возможно, что базовый синтезатор не поддерживает монорежим. Для проверки успешности вызова setMono используйте getMono.
- Параметры:
-
on—trueдля включения монорежима,falseдля выключения (что означает включение полирежима). - См. также:
-
getMono(),VoiceStatus
getMono
boolean getMono()
Получает текущий моно/полирежим. Синтезаторы, которые не позволяют изменять моно/полирежим, всегда возвращают одно и то же значение независимо от вызовов setMono.
- Возвращает:
-
trueесли монорежим включен, в противном случаеfalse(что означает, что полирежим включен). - См. также:
setMono(boolean)
setOmni
void setOmni(boolean on)
Включает или выключает оминирежим. В оминирежиме канал реагирует на сообщения, отправленные на все каналы. Когда оминирежим выключен, канал реагирует только на сообщения, отправленные на его номер канала. По умолчанию оминирежим выключен. Возможно, что базовый синтезатор не поддерживает оминирежим. Для проверки успешности setOmni используйте getOmni.
- Параметры:
-
on—trueдля включения оминирежима,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)
Устанавливает состояние соло для этого канала. Если solo равно true, то только этот канал и другие выделенные как соло каналы будут звучать. Если solo равно false, то только другие выделенные как соло каналы будут звучать, если нет выделенных каналов в качестве соло, в таком случае все невыключенные каналы будут звучать.
Возможно, что базовый синтезатор не поддерживает каналы соло. Для проверки успешности вызова setSolo используйте getSolo.
- Параметры:
-
soloState— новое состояние соло для канала - См. также:
getSolo()
getSolo
boolean getSolo()
Получает текущее состояние соло для этого канала. Если базовый синтезатор не поддерживает выделение канала в соло, этот метод всегда возвращает false.
- Возвращает:
-
trueканал выделен в соло, илиfalseесли нет - См. также:
setSolo(boolean)
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.