Web MIDI API
Web MIDI API 連線到並與 Musical Instrument Digital Interface (MIDI) 裝置進行互動。
這些介面處理傳送和接收 MIDI 訊息的實際方面。因此,該 API 可用於音樂和非音樂用途,以及連線到您計算機的任何 MIDI 裝置。
介面
MIDIInputMap-
表示所有可用的 MIDI 輸入埠。
MIDIOutputMap-
表示所有可用的 MIDI 輸出埠。
MIDIAccess-
提供列出輸入和輸出裝置以及訪問單個裝置的方法。
MIDIPort-
表示單個 MIDI 埠。
MIDIInput-
提供處理來自輸入埠的 MIDI 訊息的方法。
MIDIOutput-
將訊息排隊到連結的 MIDI 埠。訊息可以立即傳送,也可以在指定的延遲後傳送。
MIDIMessageEvent-
傳遞給
MIDIInputmidimessage事件的事件。 MIDIConnectionEvent-
當埠可用或不可用時,傳遞給
MIDIAccessstatechange和MIDIPortstatechange事件的事件。
安全要求
使用 navigator.requestMIDIAccess() 方法請求訪問 API。
- 必須在 安全上下文 中呼叫該方法。
- 訪問可能受
midiHTTP 許可權策略的限制。 - 使用者必須透過使用者代理特定的機制明確授予使用該 API 的許可權,或者之前已授予許可權。請注意,如果訪問被許可權策略拒絕,則無法透過使用者許可權授予。
可以使用 Permissions API 方法 navigator.permissions.query() 查詢許可權狀態,並傳遞一個帶有 midi 許可權和(可選)sysex 屬性的許可權描述符。
js
navigator.permissions.query({ name: "midi", sysex: true }).then((result) => {
if (result.state === "granted") {
// Access granted.
} else if (result.state === "prompt") {
// Using API will prompt for permission
}
// Permission was denied by user prompt or permission policy
});
示例
獲取 MIDI 埠的訪問許可權
navigator.requestMIDIAccess() 方法返回一個解析為 MIDIAccess 物件的 Promise,然後可以使用該物件訪問 MIDI 裝置。該方法必須在安全上下文中呼叫。
js
let midi = null; // global MIDIAccess object
function onMIDISuccess(midiAccess) {
console.log("MIDI ready!");
midi = midiAccess; // store in the global (in real usage, would probably keep in an object instance)
}
function onMIDIFailure(msg) {
console.error(`Failed to get MIDI access - ${msg}`);
}
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
列出輸入和輸出
在此示例中,輸入和輸出埠的列表被檢索並列印到控制檯。
js
function listInputsAndOutputs(midiAccess) {
for (const entry of midiAccess.inputs) {
const input = entry[1];
console.log(
`Input port [type:'${input.type}']` +
` id:'${input.id}'` +
` manufacturer:'${input.manufacturer}'` +
` name:'${input.name}'` +
` version:'${input.version}'`,
);
}
for (const entry of midiAccess.outputs) {
const output = entry[1];
console.log(
`Output port [type:'${output.type}'] id:'${output.id}' manufacturer:'${output.manufacturer}' name:'${output.name}' version:'${output.version}'`,
);
}
}
處理 MIDI 輸入
此示例將所有 MIDI 輸入訊息列印到控制檯。
js
function onMIDIMessage(event) {
let str = `MIDI message received at timestamp ${event.timeStamp}[${event.data.length} bytes]: `;
for (const character of event.data) {
str += `0x${character.toString(16)} `;
}
console.log(str);
}
function startLoggingMIDIInput(midiAccess) {
midiAccess.inputs.forEach((entry) => {
entry.onmidimessage = onMIDIMessage;
});
}
規範
| 規範 |
|---|
| Web MIDI API |
瀏覽器相容性
api.Navigator.requestMIDIAccess
載入中…
http.headers.Permissions-Policy.midi
載入中…
api.Permissions.permission_midi
載入中…