Signatur
Beschreibung
Die Eigenschaft MIDIPort.version gehört zur Web MIDI API und gibt eine Zeichenkette mit der Version des MIDI-Ports zurück. Welche Version genau gemeint ist, hängt vom Betriebssystem und vom MIDI-Treiber ab. Häufig ist es die Treiberversion (unter Windows z. B. "10.0"), manchmal eine Firmware-Version des Geräts. Viele Plattformen liefern aber gar nichts oder nur einen leeren String.
Da MIDIPort die gemeinsame Basisschnittstelle von MIDIInput und MIDIOutput ist, gibt es version auf beiden Port-Arten. An die Ports kommt man über navigator.requestMIDIAccess() und die Maps inputs und outputs des MIDIAccess-Objekts.
Brauchbar ist die Eigenschaft vor allem für Diagnose und Protokollierung, etwa für eine Geräteliste in den Einstellungen oder für Fehlerberichte. Zusammen mit manufacturer und name kann sie auch helfen, bekannte Probleme mit bestimmten Gerätegenerationen zu erkennen. Die Programmlogik sollte aber nie davon abhängen, dass ein Wert vorhanden ist.
Rückgabewert
"") oder null.Beispiele
Versionen aller Ein- und Ausgänge auflisten
const listPorts = async () => {
if (!navigator.requestMIDIAccess) {
console.warn('Web MIDI API wird nicht unterstützt.');
return;
}
const access = await navigator.requestMIDIAccess();
for (const port of [...access.inputs.values(), ...access.outputs.values()]) {
console.log(`${port.type}: ${port.name} – Version: ${port.version || 'unbekannt'}`);
}
};
listPorts();
Geräteinfos für einen Fehlerbericht sammeln
const collectDeviceInfo = async () => {
const access = await navigator.requestMIDIAccess();
return [...access.inputs.values()].map(({ id, name, manufacturer, version, state }) => ({
id,
name,
manufacturer: manufacturer || '–',
version: version ?? '–',
state
}));
};
collectDeviceInfo().then((info) => console.table(info));
Version eines neu angeschlossenen Geräts protokollieren
const watchDevices = async () => {
const access = await navigator.requestMIDIAccess();
access.addEventListener('statechange', ({ port }) => {
if (port.state === 'connected') {
console.log(`Verbunden: ${port.name} (Version ${port.version || 'n. v.'})`);
}
});
};
watchDevices();
// Wichtig · Fallstricke
- Format nicht festgelegt: Die Spezifikation schreibt kein Format vor. Werte wie
"10.0","1.2.3"oder ein leerer String sind alle möglich. Deshalb Versionen nicht per Zahlenvergleich auswerten, ohne das Format vorher zu prüfen. - Oft leer: Unter macOS, Linux (ALSA) und bei virtuellen Ports fehlt die Angabe häufig. Für die Anzeige also immer einen Ersatzwert vorsehen, z. B. mit
port.version || 'unbekannt'. - Kompatibilität: Die Web MIDI API gibt es in Chromium-Browsern und seit Version 108 in Firefox. Safari unterstützt sie nicht. Vorher prüfen, ob
navigator.requestMIDIAccessexistiert. - Sicherer Kontext und Berechtigung:
requestMIDIAccess()geht nur über HTTPS und braucht eventuell die Zustimmung der Nutzerin oder des Nutzers. Außerdem muss die Permissions-Policymididen Zugriff erlauben. - Fingerprinting: Zusammen mit
nameundmanufacturereignet sich die Version zum Wiedererkennen von Geräten. Solche Angaben daher nicht unnötig an Server schicken. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird stillschweigend ignoriert, im Strict Mode gibt es einen
TypeError.