å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
Web MIDI API ã¯ãMusical Instrument Digital Interface (MIDI) ããã¤ã¹ã«æ¥ç¶ãã¦æä½ãã¾ãã
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãMIDI ã¡ãã»ã¼ã¸ã®éåä¿¡ã®å®ç¨çãªå´é¢ãæ±ãã¾ãã ãã®ããããã® API ã¯é³æ¥½ç¨éã§ã鳿¥½ä»¥å¤ã®ç¨éã§ããã³ã³ãã¥ã¼ã¿ã¼ã«æ¥ç¶ãããä»»æã® MIDI ããã¤ã¹ãæ±ããã¨ãã§ãã¾ãã
ã¤ã³ã¿ã¼ãã§ã¤ã¹MIDIInputMap
ãã¹ã¦ã®å©ç¨å¯è½ãª MIDI å ¥åãã¼ãã表ãã¾ãã
MIDIOutputMap
ãã¹ã¦ã®å©ç¨å¯è½ãª MIDI åºåãã¼ãã表ãã¾ãã
MIDIAccess
å ¥åããã¤ã¹ãåºåããã¤ã¹ãåæããããåã ã®ããã¤ã¹ã«ã¢ã¯ã»ã¹ãããããã¡ã½ãããæä¾ãã¾ãã
MIDIPort
åã ã® MIDI ãã¼ãã表ãã¾ãã
MIDIInput
å ¥åãã¼ãããåä¿¡ãã MIDI ã¡ãã»ã¼ã¸ãæ±ãã¡ã½ãããæä¾ãã¾ãã
MIDIOutput
æ¥ç¶ããã MIDI ãã¼ãã«éä¿¡ããã¡ãã»ã¼ã¸ããã¥ã¼ã«è¿½å ãã¾ããã¡ãã»ã¼ã¸ã¯ããã«éä¿¡ãããã¨ããæå®ã®é å»¶ã®å¾ã§éä¿¡ãããã¨ãã§ãã¾ãã
MIDIMessageEvent
MIDIInput.midimessage_event
ã«æ¸¡ãããã¤ãã³ãã§ãã
MIDIConnectionEvent
ãã¼ããå©ç¨å¯è½ã«ãªã£ããå©ç¨ä¸å¯è½ã«ãªã£ããããæãMIDIAccess.statechange_event
ããã³ MIDIPort.statechange_event
ã¤ãã³ãã«æ¸¡ãããã¤ãã³ãã§ãã
ãã® API ã¸ã®ã¢ã¯ã»ã¹ã¯ãnavigator.requestMIDIAccess()
ã¡ã½ãããç¨ãã¦è¦æ±ãã¾ãã
midi
HTTP Permission Policy ã«ããå¶éãããå¯è½æ§ãããã¾ãã許å¯ã®ç¶æ
ã¯ãPermissions API ã®ã¡ã½ãã navigator.permissions.query()
ã«æ¨©é midi
㨠(çç¥å¯è½ãª) sysex
ããããã£ãè¨å®ããæ¨©éãã£ã¹ã¯ãªãã¿ã¼ã渡ããã¨ã§åå¾ã§ãã¾ãã
navigator.permissions.query({ name: "midi", sysex: true }).then((result) => {
if (result.state === "granted") {
// ã¢ã¯ã»ã¹ã許å¯ããã¾ãã
} else if (result.state === "prompt") {
// API ã使ç¨ããã¨ã許å¯ãæ±ããããã³ããã表示ããã¾ã
}
// ã¦ã¼ã¶ã¼ããã³ããã¾ã㯠Permission Policy ã«ããæ¨©éãæå¦ããã¾ãã
});
ä¾ MIDI ãã¼ãã«ã¢ã¯ã»ã¹ã§ããããã«ãã
navigator.requestMIDIAccess()
ã¡ã½ãã㯠MIDIAccess
ãªãã¸ã§ã¯ãã§è§£æ±ºãã Promise
ãè¿ãã¾ãããã®ãªãã¸ã§ã¯ããå©ç¨ã㦠MIDI ããã¤ã¹ã«ã¢ã¯ã»ã¹ã§ãã¾ãã ãã®ã¡ã½ããã¯ãä¿è·ãããã³ã³ããã¹ãã§å¼ã°ããå¿
è¦ãããã¾ãã
let midi = null; // ã°ãã¼ãã«ã® MIDIAccess ãªãã¸ã§ã¯ã
function onMIDISuccess(midiAccess) {
console.log("MIDI ã®æºåãã§ãã¾ããï¼");
midi = midiAccess; // ã°ãã¼ãã«å¤æ°ã«ä¿åãã (å®éã®ä½¿ç¨æ³ã§ã¯ããªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã«æ ¼ç´ããã®ãããã§ããã)
}
function onMIDIFailure(msg) {
console.error(`MIDI ã¢ã¯ã»ã¹ã®åå¾ã«å¤±æãã¾ãã - ${msg}`);
}
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
å
¥åã¨åºåãåæãã
ãã®ä¾ã§ã¯ãå ¥åãã¼ãã¨åºåãã¼ãã®ãªã¹ããåå¾ããã³ã³ã½ã¼ã«ã«åºåãã¾ãã
function listInputsAndOutputs(midiAccess) {
for (const entry of midiAccess.inputs) {
const input = entry[1];
console.log(
`å
¥åãã¼ã [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(
`åºåãã¼ã [type:'${output.type}'] id:'${output.id}' manufacturer:'${output.manufacturer}' name:'${output.name}' version:'${output.version}'`,
);
}
}
MIDI å
¥åãæ±ã
ãã®ä¾ã§ã¯ã1 åã®ãã¼ãã§åä¿¡ãã MIDI ã¡ãã»ã¼ã¸ãã³ã³ã½ã¼ã«ã«åºåãã¾ãã
function onMIDIMessage(event) {
let str = `ã¿ã¤ã ã¹ã¿ã³ã ${event.timeStamp} ã«åä¿¡ãã MIDI ã¡ãã»ã¼ã¸ [${event.data.length} ãã¤ã]: `;
for (const character of event.data) {
str += `0x${character.toString(16)} `;
}
console.log(str);
}
function startLoggingMIDIInput(midiAccess, indexOfPort) {
midiAccess.inputs.forEach((entry) => {
entry.onmidimessage = onMIDIMessage;
});
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ api.Navigator.requestMIDIAccess api.Permissions.permission_midi é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4