JavaTM 2 Platform
Standard Ed. 6

javax.sound.midi
介面 MidiChannel


public interface MidiChannel

表示一個單獨 MIDI 通道的 MidiChannel 物件。通常,每個 MidiChannel 方法處理由 MIDI 規範定義的名稱類似 MIDI “通道聲音”或“通道網要”的訊息。除此之外,MidiChannel 還添加了某些 "get" 方法,可檢索由某個標準 MIDI 通道訊息最近設置的值。類似地,也添加了用於檢索每個通道的單聲和靜音值的方法。

Synthesizer 物件有一個 MidiChannel 集合,通常一個 MidiChannels 對應於 MIDI 1.0 規範規定的 16 個通道中的一個。Synthesizer 在其 MidiChannel 接收到 noteOn 訊息時產生聲音。

有關已規定的 MIDI 通道訊息行為的更多資訊,請參見 MIDI 1.0 規範,在此不加贅述。此規範名稱為 MIDI Reference:The Complete MIDI 1.0 Detailed Specification,它由 MIDI 製造商協會 (http://www.midi.org) 發佈。

MIDI 最初是一個用於報告鍵盤樂師動作的協議。在 MidiChannel API 中可以看出該起源的痕跡, 它保留了類似鍵號、鍵速度和鍵力度等 MIDI 概念。我們應該理解,MIDI 資料並不一定都起源於鍵盤演奏者(該源可以是另一類別樂師或軟體)。有些設備可以產生速度和力度的常數值,而不管如何演奏音符。同時,MIDI 規範通常讓合成器根據實作程序的需要來決定資料的使用方式。例如,不一定需要始終將速度資料映射到音量和/或聲音的亮度。

另請參見:
Synthesizer.getChannels()

方法摘要
 void allNotesOff()
          關閉此通道上當前發聲的所有音符。
 void allSoundOff()
          立即關閉通道上所有發聲的音符,同時忽略當前 Instrument 的 Hold Pedal 狀態和內部衰減率。
 void controlChange(int controller, int value)
          對指定控制元件的值的更改作出反應。
 int getChannelPressure()
          獲得通道的鍵盤力度。
 int getController(int controller)
          獲得指定控制元件的當前值。
 boolean getMono()
          獲得當前的 mono/poly 網要。
 boolean getMute()
          獲得此通道的當前靜音狀態。
 boolean getOmni()
          獲得當前的 omni 網要。
 int getPitchBend()
          獲得此通道的向上或向下的音高偏移量。
 int getPolyPressure(int noteNumber)
          獲得指定鍵被按下的力度。
 int getProgram()
          獲得此通道的當前程序號。
 boolean getSolo()
          獲得此通道的當前 solo 狀態。
 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)
          打開或關閉 mono 網要。
 void setMute(boolean mute)
          設置此通道的靜音狀態。
 void setOmni(boolean on)
          打開或關閉 omni 網要。
 void setPitchBend(int bend)
          更改此通道上所有音符的音高偏移量。
 void setPolyPressure(int noteNumber, int pressure)
          對指定音符鍵力度的更改作出反應。
 void setSolo(boolean soloState)
          設置此通道的 solo 狀態。
 

方法詳細資訊

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 的內部情況。如果按下 Hold Pedal(一種控制元件;請參見 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)。 如果設備不支持設置 PolyPressure,則此方法始終返回 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()
獲得通道的鍵盤力度。如果設備不支持設置 ChannelPressure,則此方法始終返回 0。這種情況下,調用 setChannelPressure 沒有任何作用。

返回:
該音符的力度值,從 0 到 127(127 = 最大力度)
另請參見:
setChannelPressure(int)

controlChange

void controlChange(int controller,
                   int value)
對指定控制元件的值的更改作出反應。控制元件是指不同於鍵盤鍵的其他控制手段,例如開關、滑桿、踏板、滾輪或呼吸力度傳感器。MIDI 1.0 Specification 提供了 MIDI 設備上的典型控制元件的標準號,並對某些控制元件的效果進行了描述。Instrument 對控制元件更改的反應方式特定於 Instrument

MIDI 1.0 Specification 同時定義了 7 位控制元件和 14 位控制元件。連續的控制元件,例如滾輪和滑桿通常為 14 位(兩個 MIDI 位元組),而離散的控制元件,例如開關,通常為 7 位(一個 MIDI 位元組)。請參考規範,瞭解每種控制型別的具體精度。

控制元件 64 到 95 (0x40 - 0x5F) 允許 7 位精度。7 位控制元件的值完全通過 value 參數進行設置。其他的控制元件集通過使用兩個控制元件號(一個用於最高有效 7 位,另一個用於最低有效 7 位)提供 14 位精度。控制元件號 0 到 31 (0x00 - 0x1F) 控制著 14 位控制元件的最高有效 7 位;控制元件號 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 Specification 中的解釋)
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 Specification 中的解釋。
返回:
指定控制元件的當前值(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 進行了成功的調用,可使用 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)
更改此通道上所有音符的音高偏移量。這影響到所有當前發聲的音符和後續的發聲音符。(要停止使用彎音 (pitch bend),需要將此值重置為中心位置)。

MIDI 規範規定彎音為一個 14 位值,其中,零為最大的向下彎音,16383 為最大的向上彎音,8192 位於中心位置(無彎音)。實際的音高更改量未指定;可由彎音微調設置對其進行更改。但是 General MIDI 規範指明,預設的範圍應為距中心向上或向下的兩個半音程。 基礎合成器可能不支持此 MIDI 訊息。為了驗證 setPitchBend 設置是否成功,可使用 getPitchBend

參數:
bend - 音高的更改量,它是一個非負的 14 位值(8192 = 無 bend)
另請參見:
getPitchBend()

getPitchBend

int getPitchBend()
獲得此通道的向上或向下的音高偏移量。如果設備不支持設置彎音,則此方法始終返回 8192。這種情況下,調用 setPitchBend 沒有任何作用。

返回:
彎音量,它是一個非負的 14 位值(8192 = 無 bend)
另請參見:
setPitchBend(int)

resetAllControllers

void resetAllControllers()
將所有實作的控制元件重置為其預設值。

另請參見:
controlChange(int, int)

allNotesOff

void allNotesOff()
關閉此通道上當前發聲的所有音符。音符不太可能立即消失;它們的衰減率取決於 Instrument 的內部情況。如果按下 Hold Pedal 控制元件(請參見 controlChange),則此方法的效果要推遲到踏板釋放時才能體現。

另請參見:
allSoundOff(), noteOff(int)

allSoundOff

void allSoundOff()
立即關閉通道上所有發聲的音符,同時忽略當前 Instrument 的 Hold Pedal 狀態和內部衰減率。

另請參見:
allNotesOff()

localControl

boolean localControl(boolean on)
打開或關閉本地控制。本地控制在預設情況下是開啟的。 "on" 設置表示如果設備能夠合成聲音並傳輸 MIDI 訊息,則它將合成聲音作為對它本身所傳輸的音符打開和音符關閉訊息的回應。它還將回應從其他傳輸設備接收到的訊息。"off" 設置表示合成器將忽略其自身傳輸的 MIDI 訊息,但不忽略從其他設備接收到的訊息。 基礎合成器可能不支持本地控制。為了驗證是否對 localControl 行了成功的調用,請檢查返回值。

參數:
on - true 可打開本地控制,false 則關閉本地控制
返回:
新的本地控制值,如果不支持本地控制,則返回 false

setMono

void setMono(boolean on)
打開或關閉 mono 網要。在 mono 網要下,通道一次只合成一個音符。在 poly 網要(等效於 mono 網要關閉)下,通道可同步合成多個音符。預設情況下 mono 為關閉(poly 網要為打開)。

"Mono" 是 "monophonic"(單聲道)的簡寫,在此上下文中與 "polyphonic"(復調)相反,指的是每個 MIDI 通道有單個合成器聲音。它與音頻通道數沒有任何關係(即“單聲道”和“立體聲”錄音的情況)。 基礎合成器可能不支持 mono 網要。為了驗證是否對 setMono 進行了成功的調用,可使用 getMono

參數:
on - true 為打開 mono 網要,false 為關閉 mono 網要(表示打開 poly 網要)。
另請參見:
getMono(), VoiceStatus

getMono

boolean getMono()
獲得當前的 mono/poly 網要。無論如何調用 setMono,不允許更改 mono/poly 網要的合成器將始終返回相同的值。

返回:
如果 mono 網要為打開,則返回 true,否則返回 false(表示 poly 網要為打開)。
另請參見:
setMono(boolean)

setOmni

void setOmni(boolean on)
打開或關閉 omni 網要。在 omni 網要下,通道會回應發送到所有通道上的訊息。omni 為關閉時,通道只回應發送到其通道號上的訊息。預設情況下 omni 為關閉。 基礎合成器可能不支持 omni 網要。為了驗證 setOmni 設置是否成功,可使用 getOmni

參數:
on - true 表示開啟 omni 網要,false 表示關閉 omni 網要。
另請參見:
getOmni(), VoiceStatus

getOmni

boolean getOmni()
獲得當前的 omni 網要。無論如何調用 setOmni,不允許更改 omni 網要的合成器將始終返回相同的值。

返回:
如果 omni 網要為打開,則返回 true,否則返回 false(表示 omni 網要為關閉)。
另請參見:
setOmni(boolean)

setMute

void setMute(boolean mute)
設置此通道的靜音狀態。值為 true 表示該通道將設置為靜音,值為 false 表示該通道可發聲(如果其他通道為非 solo)。

allSoundOff() 不同,此方法只適用於特定的通道,而不是所有的通道。更進一步地說,它不只將當前發聲的音符設置為靜音,而且將後續接收的音符都設置為靜音。 基礎合成器可能不支持靜音通道。為了驗證是否對 setMute 進行了成功的調用,可使用 getMute

參數:
mute - 新的靜音狀態
另請參見:
getMute(), setSolo(boolean)

getMute

boolean getMute()
獲得此通道的當前靜音狀態。如果基礎合成器不支持對此通道的靜音設置,則此方法始終返回 false

返回:
通道為靜音設置,則返回 true,否則返回 false
另請參見:
setMute(boolean)

setSolo

void setSolo(boolean soloState)
設置此通道的 solo 狀態。如果 solotrue,則只有此通道及其他 solo 通道可發聲。如果 solofalse,則只有其他 solo 通道可發聲;除非在沒有 solo 通道的情況下,所有非靜音通道都發聲。 基礎合成器可能不支持 solo 通道。為了驗證是否對 setSolo 進行了成功的調用,可使用 getSolo

參數:
soloState - 該通道的新 solo 狀態
另請參見:
getSolo()

getSolo

boolean getSolo()
獲得此通道的當前 solo 狀態。如果基礎合成器不支持此通道上的 solo,則此方法始終返回 false

返回:
如果通道為 solo,則返回 true,否則返回 false
另請參見:
setSolo(boolean)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only