|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface Synthesizer
Synthesizer
產生聲音。這通常發生在某個 Synthesizer
的 MidiChannel
物件直接或通過 Synthesizer
物件接收到 noteOn
訊息時。很多 Synthesizer
都支持 Receiver
,通過後者可將 MIDI 事件發送至 Synthesizer
。這種情況下,Synthesizer
通常的回應是發送一個相應的訊息至合適的 MidiChannel
,如果事件不是 MIDI 通道訊息之一,則自己處理該事件。
Synthesizer
介面包括可從音資源庫載入和卸載樂器 (instrument) 的方法。一個樂器就是用於合成某種聲音型別的規範,無論這種聲音模仿的是傳統樂器還是某種音效或其他想像出來的聲音。音資源庫是通過資源庫和程序號組織的一組樂器(通過樂器的 Patch
物件)。不同的 Synthesizer
類別可實作不同的聲音合成技巧,這意味著某些樂器可以與給定的合成器相容,而另一些則不行。同樣,合成器可以為樂器保留有限的記憶體量,這意味著不是每種合成器都可使用每種音資源庫和樂器,即使合成技術相容時也是如此。要查看取自某種音資源庫的樂器是否可由給定的合成器演奏,可調用 Synthesizer
的 isSoundbankSupported
方法。
“載入”樂器意味著該樂器可用於合成音符。樂器載入至由其 Patch
物件指定的資源庫和程序位置。載入並不一定意味著後續演奏的音符將立即具有此新載入樂器的聲音。要使樂器演奏音符,某個合成器的 MidiChannel
物件必須接收(或已經接收)可使該特定樂器的資源庫和程序號被選中的程序更改訊息。
MidiSystem.getSynthesizer()
,
Soundbank
,
Instrument
,
MidiChannel.programChange(int, int)
,
Receiver
,
Transmitter
,
MidiDevice
巢狀類別摘要 |
---|
從介面 javax.sound.midi.MidiDevice 繼承的巢狀類別/介面 |
---|
MidiDevice.Info |
方法摘要 | |
---|---|
Instrument[] |
getAvailableInstruments()
獲得該合成器隨附的樂器列表。 |
MidiChannel[] |
getChannels()
獲得此合成器控制的一組 MIDI 通道。 |
Soundbank |
getDefaultSoundbank()
獲得合成器的預設音資源庫(如果合成器存在)。 |
long |
getLatency()
獲得此合成器導致的處理延遲,用微秒表示。 |
Instrument[] |
getLoadedInstruments()
獲得當前載入到此 Synthesizer 中的樂器列表。 |
int |
getMaxPolyphony()
獲得此合成器可同時發聲的最大音符數。 |
VoiceStatus[] |
getVoiceStatus()
獲得由此合成器產生的聲音的當前狀態。 |
boolean |
isSoundbankSupported(Soundbank soundbank)
通知調用者此合成器是否能夠從指定的音資源庫載入樂器。 |
boolean |
loadAllInstruments(Soundbank soundbank)
將指定 Soundbank 中包含的所有樂器載入到 Synthesizer 中。 |
boolean |
loadInstrument(Instrument instrument)
讓特定的樂器可用於合成。 |
boolean |
loadInstruments(Soundbank soundbank,
Patch[] patchList)
從指定 Soundbank 載入指定修補程序所參考的樂器。 |
boolean |
remapInstrument(Instrument from,
Instrument to)
重新映射一個樂器。 |
void |
unloadAllInstruments(Soundbank soundbank)
卸載指定 Soundbank 中包含的所有樂器。 |
void |
unloadInstrument(Instrument instrument)
卸載特定的樂器。 |
void |
unloadInstruments(Soundbank soundbank,
Patch[] patchList)
從指定的 MIDI 音資源庫中卸載指定修補程序所參考的樂器。 |
從介面 javax.sound.midi.MidiDevice 繼承的方法 |
---|
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getMicrosecondPosition, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open |
方法詳細資訊 |
---|
int getMaxPolyphony()
getVoiceStatus()
long getLatency()
儘管延遲用微秒表示,但合成器實際延遲測量值的變化範圍可能遠大於此精度所建議的時間(微秒)。例如,合成器最壞的情況下可能延遲幾個毫秒或更多。
MidiChannel[] getChannels()
MidiChannel
,可接收該通道號上發送的 MIDI 訊息。
MIDI 1.0 規範提供 16 個通道,所以此方法返回一個至少有 16 個元素的陣列。但是,如果此合成器不使用所有的 16 個通道,則陣列中的某些元素可能為 null
,所以應在使用前檢查每個元素。
Synthesizer
管理的 MidiChannel
物件陣列。有些陣列元素可能為 null
。VoiceStatus[] getVoiceStatus()
Synthesizer
類別未提供聲音資訊,則返回的陣列長度將始終為 0。否則其長度始終等於聲音總數,與 getMaxPolyphony()
的返回結果一樣。(有關合成器聲音的說明,請參閱 VoiceStatus
類別描述。)
VoiceStatus
物件陣列,該物件提供關於相應合成器聲音的資訊getMaxPolyphony()
,
VoiceStatus
boolean isSoundbankSupported(Soundbank soundbank)
IllegalArgumentException
。
soundbank
- 查詢其是否受支持的音資源庫
true
,否則返回 false
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,
loadAllInstruments(javax.sound.midi.Soundbank)
,
unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,
unloadAllInstruments(javax.sound.midi.Soundbank)
,
getDefaultSoundbank()
boolean loadInstrument(Instrument instrument)
Patch
物件指定的修補程序位置,所以如果接收到(或已經收到)導致該修補程序被選中的程序更改訊息,則使用 instrument
的聲音演奏隨後的音符。如果已載入指定的樂器,則此方法不執行任何操作並返回 true
。
該樂器必須是此 Synthesizer
支持的音資源庫的一部分。(可以使用 Instrument
的 getSoundbank
方法和 Synthesizer
的 isSoundbankSupported
方法驗證。)
instrument
- 要載入的樂器
true
,如果樂器無法載入(例如,合成器記憶體不足無法載入),則返回 false
IllegalArgumentException
- 如果此 Synthesizer
不支持指定樂器的音資源庫unloadInstrument(javax.sound.midi.Instrument)
,
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,
loadAllInstruments(javax.sound.midi.Soundbank)
,
remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)
,
SoundbankResource.getSoundbank()
,
MidiChannel.programChange(int, int)
void unloadInstrument(Instrument instrument)
instrument
- 要卸載的樂器
IllegalArgumentException
- 如果此 Synthesizer
不支持指定樂器的音資源庫loadInstrument(javax.sound.midi.Instrument)
,
unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,
unloadAllInstruments(javax.sound.midi.Soundbank)
,
getLoadedInstruments()
,
remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)
boolean remapInstrument(Instrument from, Instrument to)
to
將替換樂器 from
。from
位於資源庫號 2,即程序號 11 的位置,則重新映射導致該資源庫和程序位置被 to
所佔用。from
被卸載。
通過調用 loadInstrument(javax.sound.midi.Instrument)
、loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
或 loadAllInstruments(javax.sound.midi.Soundbank)
之一,可以取消對重載樂器 from
的重新映射。
from
- 要替換的 Instrument
物件to
- 用來替換舊樂器的 Instrument
物件,應該將它載入到合成器中
true
,如果合成器沒有實作此功能,則返回 false
IllegalArgumentException
- 如果樂器 from
或樂器 to
不受合成器的支持,或者沒有載入樂器 to
NullPointerException
- 如果 from
或 to
參數使用 null 值loadInstrument(javax.sound.midi.Instrument)
,
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,
loadAllInstruments(javax.sound.midi.Soundbank)
Soundbank getDefaultSoundbank()
null
。isSoundbankSupported(javax.sound.midi.Soundbank)
Instrument[] getAvailableInstruments()
注意,不能使用此方法尋找當前載入到合成器中的樂器;如果要尋找,可使用 getLoadedInstruments()
。此方法也不指示可載入到合成器中的所有樂器;它僅指示合成器隨附的樂器子集。要瞭解是否可載入另一個樂器,可以調用 isSoundbankSupported()
,如果支持該樂器的 Soundbank
,則可嘗試載入該樂器。
getLoadedInstruments()
,
isSoundbankSupported(Soundbank)
,
loadInstrument(javax.sound.midi.Instrument)
Instrument[] getLoadedInstruments()
Synthesizer
中的樂器列表。
loadInstrument(javax.sound.midi.Instrument)
,
getAvailableInstruments()
,
Soundbank.getInstruments()
boolean loadAllInstruments(Soundbank soundbank)
Soundbank
中包含的所有樂器載入到 Synthesizer
中。
soundbank
- 將被載入樂器的 Soundbank
true
;如果有樂器無法載入(例如,Synthesizer
沒有足夠的記憶體),則返回 false
IllegalArgumentException
- 如果所請求的音資源庫與此合成器不相容。isSoundbankSupported(javax.sound.midi.Soundbank)
,
loadInstrument(javax.sound.midi.Instrument)
,
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
void unloadAllInstruments(Soundbank soundbank)
Soundbank
中包含的所有樂器。
soundbank
- 套件含要卸載的樂器的音資源庫
IllegalArgumentException
- 如果不支持該音資源庫。isSoundbankSupported(javax.sound.midi.Soundbank)
,
unloadInstrument(javax.sound.midi.Instrument)
,
unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
boolean loadInstruments(Soundbank soundbank, Patch[] patchList)
Soundbank
載入指定修補程序所參考的樂器。每個 Patch
物件都指示一個資源庫和程序號;具有比對的 Patch
的 Instrument
將被載入至該資源庫和程序位置。
soundbank
- 套件含要載入的樂器的 Soundbank
patchList
- 應為其載入樂器的修補程序列表
true
,如果有樂器無法載入(例如,Synthesizer
沒有足夠的記憶體),則返回 false
IllegalArgumentException
- 如果不支持該音資源庫。isSoundbankSupported(javax.sound.midi.Soundbank)
,
Instrument.getPatch()
,
loadAllInstruments(javax.sound.midi.Soundbank)
,
loadInstrument(javax.sound.midi.Instrument)
,
Soundbank.getInstrument(Patch)
,
Sequence.getPatchList()
void unloadInstruments(Soundbank soundbank, Patch[] patchList)
soundbank
- 套件含要卸載的樂器的音資源庫patchList
- 應為其卸載樂器的修補程序列表
IllegalArgumentException
- 如果不支持該音資源庫。unloadInstrument(javax.sound.midi.Instrument)
,
unloadAllInstruments(javax.sound.midi.Soundbank)
,
isSoundbankSupported(javax.sound.midi.Soundbank)
,
Instrument.getPatch()
,
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。