Skip to content

Add Linux support: PulseAudio system audio, WebRTC AEC, Vulkan whisper.cpp - #213

Closed
Mathjk wants to merge 1 commit into
ppXD:mainfrom
Mathjk:linux-port
Closed

Mathjk wants to merge 1 commit into
ppXD:mainfrom
Mathjk:linux-port

Conversation

@Mathjk

@Mathjk Mathjk commented Sep 28, 2026

Copy link
Copy Markdown

Adds Linux (x86_64) support to Wisp �� the app builds and runs on Ubuntu 24.04, captures meeting/system audio, and transcribes locally with the existing engine stack.

What this adds

  • crates/wisp-pulseaudio �� new platform crate implementing AudioSource by recording the default sink's .monitor source via libpulse-binding. Works on PulseAudio proper and PipeWire's pipewire-pulse compat server. Follows the same lifecycle as wisp-loopback (WASAPI): dedicated capture thread owning the native objects, bounded frame channel, clean shutdown, 5s connect timeout.
  • App wiring �� open_system_capture() Linux branch; wisp-pulseaudio + wisp-aec + wisp-engine-whisper-cpp as Linux deps. Existing "mic-only fallback" notice is preserved.
  • AEC �� WebRTC AEC3 (wisp-aec) now enabled on Linux for mic+system-audio sessions.
  • GPU �� whisper-vulkan extended to Linux (ggml-vulkan, CPU fallback intact); family_runnable + model-capability tests updated with cfg gates.
  • Packaging �� tauri.linux.conf.json stages linux-runtime/*.so into the bundle; build.rs emits $ORIGIN-relative rpaths and stages all sherpa/onnxruntime .sos. deb + appimage bundle targets enabled.
  • CI �� release.yml gains an ubuntu-22.04 job with the required system packages (webkit2gtk, libpulse, meson/ninja, Vulkan/SPIR-V tools, libclang for bindgen).

Verified on Ubuntu 24.04 (PipeWire)

  • cargo fmt / clippy / cargo test clean; full release build with whisper-vulkan passes.
  • Real session: monitor source captured speaker output and SenseVoice transcribed it live, labeled as the remote speaker.
  • Wisp_0.1.0_amd64.deb + Wisp_0.1.0_amd64.AppImage build and install correctly; rpath resolves bundled sherpa libs.

Developed with Devin; a maintainer-tested build lives at Mathjk/Wisp-Linux (fork carrying the same patch set).

…r.cpp

- crates/wisp-pulseaudio: new Linux AudioSource capturing the default
  sink's .monitor via libpulse-binding (works on PulseAudio proper and
  PipeWire's pipewire-pulse). Dedicated capture thread, bounded frame
  channel, clean shutdown ¡ª same lifecycle as the WASAPI loopback crate.
- app: open_system_capture() for Linux, wisp-pulseaudio + wisp-aec +
  wisp-engine-whisper-cpp cfg deps; mic-only fallback unchanged.
- wisp-engine-whisper-cpp: extend the whisper-vulkan feature to Linux
  (ggml-vulkan + CPU fallback); family_runnable/test cfg gates updated.
- Packaging: tauri.linux.conf.json stages linux-runtime/*.so into the
  bundle, build.rs emits $ORIGIN rpaths and stages all sherpa/onnxruntime
  shared libs; deb + appimage bundle targets enabled.
- release.yml: ubuntu-22.04 job with the system deps the port needs
  (webkit2gtk, libpulse, meson/ninja for webrtc-sys, Vulkan/SPIR-V tools,
  libclang for bindgen).
@Mathjk

Mathjk commented Sep 28, 2026

Copy link
Copy Markdown
Author

Closing for now �� doing another review pass on packaging details and re-submitting shortly.

@Mathjk Mathjk closed this Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant