Skip to content

Allow passive peers to opt out of being a launch-quantize target #179

@charlesvestal

Description

@charlesvestal

Problem

requestBeatAtTime waits for the next quantum boundary whenever numPeers() > 0. That's correct when peers are musical participants, but wrong when the only other peer is a passive Link Audio receiver (e.g. a mixer that just subscribes to channels). The performing app now has a launch delay for a peer that has no transport, no sequencer, and no need for phase alignment.

Workarounds don't fit:

  • Disabling launch-quantize on the performing app breaks legitimate sync with real peers.
  • Inferring "passive" from sink/source topology is unreliable — a sampler-with-sequencer is source-only but still needs alignment.

The opt-out belongs on the peer that knows its own intent.

Proposal

Add a per-peer flag on BasicLink:

void setSyncContributor(bool contributes);// default: true
bool isSyncContributor() const;

requestBeatAtTime (and equivalent launch-quantize code paths) treats the session as if alone when every other peer has isSyncContributor() == false. If any other peer still contributes, current behavior is preserved.

This requires carrying the flag in the peer announcement. Default-true keeps existing apps unchanged.

Use case

A receive-only Link Audio mixer joins a session to consume another peer's published channels. With this flag set to false on the mixer, pressing Play on the performing peer fires immediately. Add a third, contributing peer and quantized launch resumes automatically.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions