# DeviceMidiBinding

`import { DeviceMidiBinding } from "destack:device/binding";`

Midi binding family.

```ds title="DeviceMidiBinding"
export interface DeviceMidiBinding {
    listMidiBackends(): Result<MidiBackend[], HostError>;
    openMidiWatch(options: &'a readonly MidiWatchOptions): Result<MidiWatchHandle, HostError>;
    closeMidiWatch(watch: MidiWatchHandle): Result<void, HostError>;
    readMidiWatch(watch: MidiWatchHandle, timeoutNs?: uint64 | undefined): Result<MidiEvent, HostError>;
    listMidiInputs(options: &'a readonly MidiListOptions): Result<MidiPort[], HostError>;
    openMidiInput(id: &'a readonly string, options: &'b readonly MidiOpenOptions): Result<MidiInputPortHandle, HostError>;
    closeMidiInput(input: MidiInputPortHandle): Result<void, HostError>;
    describeMidiInput(input: MidiInputPortHandle): Result<MidiPort, HostError>;
    readMidiInput(input: MidiInputPortHandle, records: &'a [MidiInputRecord], timeoutNs?: uint64 | undefined): Result<uint32, HostError>;
    openVirtualMidiInput(options: &'a readonly MidiVirtualOptions): Result<MidiInputPortHandle, HostError>;
    listMidiOutputs(options: &'a readonly MidiListOptions): Result<MidiPort[], HostError>;
    openMidiOutput(id: &'a readonly string, options: &'b readonly MidiOpenOptions): Result<MidiOutputPortHandle, HostError>;
    closeMidiOutput(output: MidiOutputPortHandle): Result<void, HostError>;
    describeMidiOutput(output: MidiOutputPortHandle): Result<MidiPort, HostError>;
    writeMidiOutput(output: MidiOutputPortHandle, records: &'a readonly [MidiOutputRecord]): Result<uint32, HostError>;
    openVirtualMidiOutput(options: &'a readonly MidiVirtualOptions): Result<MidiOutputPortHandle, HostError>;
}
```

[language/library/src/device/binding/midi.ds:314:475](https://github.com/destack-sh/destack/blob/main/language/library/src/device/binding/midi.ds#L314-L475)

## Members

### `listMidiBackends(): Result<MidiBackend[], HostError>`

List MIDI backends.

### `openMidiWatch(options: &'a readonly MidiWatchOptions): Result<MidiWatchHandle, HostError>`

Open a MIDI topology watch.

### `closeMidiWatch(watch: MidiWatchHandle): Result<void, HostError>`

Close a MIDI topology watch.

### `readMidiWatch(watch: MidiWatchHandle, timeoutNs?: uint64 | undefined): Result<MidiEvent, HostError>`

Read one MIDI topology event.

### `listMidiInputs(options: &'a readonly MidiListOptions): Result<MidiPort[], HostError>`

List MIDI input ports.

### `openMidiInput(id: &'a readonly string, options: &'b readonly MidiOpenOptions): Result<MidiInputPortHandle, HostError>`

Open a MIDI input port.

### `closeMidiInput(input: MidiInputPortHandle): Result<void, HostError>`

Close a MIDI input port.

### `describeMidiInput(input: MidiInputPortHandle): Result<MidiPort, HostError>`

Describe a MIDI input port.

### `readMidiInput(input: MidiInputPortHandle, records: &'a [MidiInputRecord], timeoutNs?: uint64 | undefined): Result<uint32, HostError>`

Read MIDI input records.

### `openVirtualMidiInput(options: &'a readonly MidiVirtualOptions): Result<MidiInputPortHandle, HostError>`

Create a virtual MIDI input port.

### `listMidiOutputs(options: &'a readonly MidiListOptions): Result<MidiPort[], HostError>`

List MIDI output ports.

### `openMidiOutput(id: &'a readonly string, options: &'b readonly MidiOpenOptions): Result<MidiOutputPortHandle, HostError>`

Open a MIDI output port.

### `closeMidiOutput(output: MidiOutputPortHandle): Result<void, HostError>`

Close a MIDI output port.

### `describeMidiOutput(output: MidiOutputPortHandle): Result<MidiPort, HostError>`

Describe a MIDI output port.

### `writeMidiOutput(output: MidiOutputPortHandle, records: &'a readonly [MidiOutputRecord]): Result<uint32, HostError>`

Write MIDI output records.

### `openVirtualMidiOutput(options: &'a readonly MidiVirtualOptions): Result<MidiOutputPortHandle, HostError>`

Create a virtual MIDI output port.
