Skip to content

scripts/ff400.sh hardcodes one FF400 port order; snd_fireface puts the ADAT block first or last #444

Description

@mkovero

Problem

The Fireface 400's JACK/ALSA channel order under snd_fireface is not stable. The ADAT (and S/PDIF) block sometimes comes before the analog AN1–AN8 block and sometimes after it. The operator reports this as expected behaviour at this point.

scripts/ff400.sh hardcodes one of the two orders, ADAT first (comment from line 42 onward, "confirmed empirically"; CHNAME at lines 46 and 125). It then writes that onto the ports with jack_alias (lines 130–131). On a boot where the order is the other one, every analog port is labelled ADAT and vice versa. Because the aliases look like driver output, jack_lsp -A is then read as evidence of physical routing.

That happened 2026-09-14 on pupu (192.168.9.27: snd_fireface, kernel 7.2.4-rt3, JACK via ALSA). The order that boot was analog first, measured two ways:

  • A silent 18-channel jack_rec: capture_1..8 carry an analog floor (−107…−112 dBFS, plus room noise on the mic input), and capture_9..18 read exact digital zero.
  • A −60 dBFS 1 kHz tone on playback_1 and on playback_2: the FF400's meter:stream-input and meter:analog-output rise on the same index, and the tone arrives on the analog input wired to that output.

The script's aliases were wrong for that boot, and the first probe drove an ADAT port. Any fixed table, in either direction, is wrong on some boots.

A second, separate problem with its rig copy (ff400-card1.sh): the init path forces mic phantom power off (numid=90 off,off), and pupu's measurement mic on IN1 needs it on.

Places to check

  • What moves the order: boot, driver load, FireWire bus reset, JACK restart. Knowing when it can change decides when it must be re-checked.
  • Silent detection that worked on pupu: with nothing connected to ADAT/S/PDIF, those captures read exact digital zero, and the analog inputs never do (a −107 dBFS floor is ~37 LSB at 24-bit). This breaks as soon as something is connected to an ADAT or S/PDIF input.
  • The playback order has so far matched the capture order when both were checked; that is an observation, not a guarantee.

What must be true

What makes the check fail

On a boot with each order, run the script, then drive playback_1 at a low level. The check must go red if the alias shown for system:playback_1 names anything other than the port that carried the tone. Testing only on a boot with the script's hardcoded order cannot go red.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:architectArchitect agent acted on itagent:triageTriage agent acted on itbugSomething isn't workingready-to-implementSpec complete, developer can pick upscope-nonedaemon, CLI, wire, build, docs — nothing a standard governs

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions