Skip to content

update Sendspin-CPP-CLI to support input(s) #72

Closed

Description

@chrisuthe

CPP v.9 has input/source role - we should allow mapping soundcard inputs to a source role, similarly an easy loopback to just output all audio to the source role.

Activity

  1. self-assigned this
    on Oct 7, 2026
  2. chrisuthe commented on Oct 14, 2026

    @chrisuthe
    MemberAuthor

    Soundcard input is in: sendspin-cli --input <backend>:<device> streams a mic or line-in through the source role. Dedicated loopback is not built yet (see below).

    Plan

    From the approved sendspin-cpp v0.9 update plan:

    • Capturing must be easy. --input takes -o's <backend>:<device> syntax, -l lists capture devices separately from playback, and a bad or busy device fails with an error naming it.
    • Seam + ALSA. An AudioSource seam with one capture thread calling write_audio(); --input and an input config key, with the source role added only when given; capture devices in -l; ALSA plus null/tone sources; status shows whether input is streaming.
    • Other backends. PipeWire, PulseAudio and CoreAudio capture, one PR per backend.
    • Not planned: line-sense (set_signal), since we have no signal-detect hardware.
    sendspin-cli -n den --input default
    sendspin-cli -n den --input hw:1,0
    sendspin-cli -n den --input coreaudio
    sendspin-cli -n den --input pipewire
    sendspin-cli -n den --input pulse:alsa_input.usb-mic.analog-stereo

    PRs (merged 2026-10-07)

    Loopback — not built

    There is no dedicated loopback option. Workaround on Linux with PulseAudio or pipewire-pulse: capture a sink's monitor source, which -l lists under "PulseAudio sources":

    sendspin-cli -n den --input pulse:<sink>.monitor

    --input pipewire:<node> only lists and targets source nodes, so it has no monitor path of its own; use the pulse: form. macOS has no loopback path.

    Still open / unverified

    • Streaming to a real rc1 server: no PR had a server start the source (Update sendspin-js to the Sendspin 1.0.0 RC1 spec #75 did stream to Music Assistant on a Mac; Linux backends were only driven locally).
    • PortAudio capture: still refused with "not supported yet".
    • Device unplugged mid-stream: untested on ALSA and CoreAudio; PipeWire/Pulse loss was tested only with a virtual source.
    • A real PulseAudio daemon (only pipewire-pulse tested) and a launchd daemon on macOS.
    • Line-sense: not planned.
  3. moved this from In Progress to Done in Sendspin Project Boardon Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions