Start · Sprachen · JavaScript · Referenz · MIDIPort.id

MIDIPort.id

Eigenschaft

Die schreibgeschützte Eigenschaft <code>id</code> gibt eine eindeutige Zeichenkette zurück, die den MIDI-Port identifiziert.

seit JavaScript Web MIDI API — Chromium-Browser (Chrome/Edge/Opera Kategorie: webapi

Signatur

MIDIPort.id

Beschreibung

Die Eigenschaft MIDIPort.id liefert eine eindeutige, vom Browser vergebene ID für einen MIDI-Ein- oder -Ausgang (MIDIInput bzw. MIDIOutput). Über diese ID lassen sich Ports in den Maps MIDIAccess.inputs und MIDIAccess.outputs gezielt abrufen, denn beide Maps verwenden sie als Schlüssel.

Laut Spezifikation soll der Browser die ID nach Möglichkeit stabil halten: Wird dasselbe Gerät später wieder angeschlossen oder die Seite neu geladen, sollte es dieselbe ID bekommen. Deshalb eignet sich id gut, um z. B. das zuletzt gewählte MIDI-Gerät in localStorage zu speichern und bei einem späteren Besuch automatisch wieder auszuwählen.

Der Wert ist ein undurchsichtiger Bezeichner. Sein Format (Zahl, Hash, Zeichenkette) hängt von Browser und Betriebssystem ab. Werte sollten also weder ausgewertet noch Nutzern angezeigt werden. Für die Anzeige gibt es name und manufacturer.

Rückgabewert

Typ
string
Beschreibung
Eine eindeutige Zeichenkette zur Identifikation des Ports. Sie wird auch als Schlüssel in MIDIAccess.inputs bzw. MIDIAccess.outputs verwendet.

Beispiele

IDs aller Ein- und Ausgänge auflisten

const listPorts = async () => {
  const access = await navigator.requestMIDIAccess();

  for (const input of access.inputs.values()) {
    console.log(`Eingang: ${input.name} (ID: ${input.id})`);
  }
  for (const output of access.outputs.values()) {
    console.log(`Ausgang: ${output.name} (ID: ${output.id})`);
  }
};

listPorts().catch((err) => console.error('MIDI nicht verfügbar:', err));
Eingang: Arturia KeyStep (ID: input-0) Ausgang: Arturia KeyStep (ID: output-1)

Gewähltes Gerät speichern und wiederherstellen

const STORAGE_KEY = 'bevorzugterMidiEingang';

const restoreInput = async () => {
  const access = await navigator.requestMIDIAccess();
  const savedId = localStorage.getItem(STORAGE_KEY);

  // Die Map-Schlüssel entsprechen MIDIPort.id
  const input = (savedId && access.inputs.get(savedId))
    ?? access.inputs.values().next().value;

  if (!input) {
    console.log('Kein MIDI-Eingang gefunden.');
    return;
  }

  localStorage.setItem(STORAGE_KEY, input.id);
  input.onmidimessage = (e) => console.log(input.id, e.data);
  console.log(`Aktiver Eingang: ${input.name}`);
};

restoreInput();
Aktiver Eingang: Arturia KeyStep

An- und Abstecken per ID verfolgen

const watchPorts = async () => {
  const access = await navigator.requestMIDIAccess();
  const connected = new Set();

  access.onstatechange = ({ port }) => {
    if (port.state === 'connected') {
      connected.add(port.id);
    } else {
      connected.delete(port.id);
    }
    console.log(`${port.name} [${port.id}] ist jetzt ${port.state}`);
    console.log('Verbundene Ports:', [...connected]);
  };
};

watchPorts();
Arturia KeyStep [input-0] ist jetzt disconnected Verbundene Ports: []

// Wichtig · Fallstricke

  • Stabilität ist nicht garantiert: Die Spezifikation empfiehlt stabile IDs, aber je nach Browser oder Betriebssystem können sie sich ändern, etwa nach einem Treiber-Update, bei einem anderen USB-Anschluss oder bei zwei baugleichen Geräten. Für gespeicherte IDs sollte es daher immer einen Ersatzweg geben, zum Beispiel einen Abgleich über name und manufacturer.
  • Ein- und Ausgang desselben physischen Geräts haben in der Regel unterschiedliche IDs. Über id lässt sich also nicht zuverlässig ein Ein-/Ausgangspaar zuordnen.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert bzw. wirft im strikten Modus einen TypeError.
  • Kompatibilität: Die Web MIDI API funktioniert nur in sicheren Kontexten (HTTPS). Sie läuft in Chromium-Browsern und in Firefox ab Version 108, dort teils mit Add-on-/Berechtigungsabfrage. Safari unterstützt sie nicht. Die Unterstützung vorher mit 'requestMIDIAccess' in navigator prüfen.
  • Datenschutz: Stabile Geräte-IDs können zum Fingerprinting beitragen. Browser fragen daher um Erlaubnis, bevor sie den Zugriff gewähren.