Skip to content

feat: show each output device's real capabilities #593

Description

@InstaZDLL

The output picker lists device names. Someone choosing between three outputs on an audiophile player is choosing on facts the list does not show: what rates the device takes, in what formats, how many channels.

Shape, at two depths

In the picker itself — one line per device carrying its best format, its top rate, and a Hi-Res marker. Enough to choose without opening anything.

A detail sheet behind it — identity (system name, driver, channel count), the formats it accepts as a set, and the rates grouped into named tiers rather than listed flat: CD quality, Hi-Res, Studio, Ultra Hi-Res. A column of numbers from 44.1 to 384 tells an expert something and a normal user nothing; the tiers tell both. Buffer size belongs here too.

And a caveat, stated on the sheet. What a driver declares and what it will accept in exclusive mode are different questions — a shared-mode path can advertise rates it reaches by resampling. Anything we display is the driver's claim, and saying so is the difference between an informative sheet and a misleading one.

Our side

We already probe harder than most: is_supported_exclusive_with_quirks walks layout × format and works around the channel-mask and structure-shape quirks that hide behind a generic unsupported-format error. That knowledge is spent on negotiation and then thrown away. The same probe is what a capability sheet wants.

Traps

  • Probe on demand, not during enumeration. Our Linux device list goes through the ALSA hint database precisely to avoid the one-to-two second freeze that opening every PCM costs. Filling a capability table at enumeration time would reintroduce exactly that stall, and it is the reason this is worth writing down before starting.
  • Exclusive-mode truth is per platform. WASAPI can be asked properly; ALSA's hw: params can be queried; CoreAudio reports what the device runs at. The sheet should be honest about which of those it is showing rather than pretending to one model.
  • New strings go to all 17 locales.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestplannedPlanned for a future releasescope: audioAudio engine, playback, decoding, and output devicesscope: frontendReact/Vite frontend (src/)type: featNew feature

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions