Start · Sprachen · JavaScript · Referenz · MIDIPort.version

MIDIPort.version

Eigenschaft

Die schreibgeschützte Eigenschaft <code>version</code> eines <code>MIDIPort</code> liefert die vom System gemeldete Versionsangabe des Ports (meist Treiber- oder Firmware-Version) als String.

seit JavaScript Web MIDI API — Chrome 43+, Edge 79+, Opera 30+, Fi Kategorie: webapi

Signatur

MIDIPort.version

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

Typ
string | null
Beschreibung
Die Versionsangabe des Ports als String, wie sie das System meldet. Das Format ist nicht festgelegt. Gibt es keine Angabe, ist der Wert leer ("") 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();
input: USB MIDI Interface – Version: 10.0 output: USB MIDI Interface – Version: 10.0

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));
Tabelle mit id, name, manufacturer, version und state je Eingang

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();
Verbunden: Keystation 49 (Version 1.0)

// 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.requestMIDIAccess existiert.
  • Sicherer Kontext und Berechtigung: requestMIDIAccess() geht nur über HTTPS und braucht eventuell die Zustimmung der Nutzerin oder des Nutzers. Außerdem muss die Permissions-Policy midi den Zugriff erlauben.
  • Fingerprinting: Zusammen mit name und manufacturer eignet 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.