alpha
Login
or
Join now
tsiry-sandratraina.com
/
zerod
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Headless Rust gRPC daemon to drive Bluetooth, HLS/DASH playback, and snapcast/shairport-sync/squeezelite on Raspberry Pi audio rigs.
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
zerod
/
crates
7 folders
at
1c4b62e887ee8bf3d4e9c4a6078ed45e7b7edd1e
Tsiry Sandratraina
Linux: use alsa-rs directly instead of cpal-alsa mmap path
6w ago
1c4b62e8
bluetooth
Linux: use alsa-rs directly instead of cpal-alsa mmap path cpal's ALSA backend uses Access::MMapInterleaved, which crashes inside libasound's pulse plugin on Raspberry Pi OS (build_output_stream → snd_pcm_mmap_begin SIGSEGV). aplay / speaker-test work because they use snd_pcm_writei. Match that path. - New crates/stream/src/alsa_sink.rs: alsa::pcm::PCM with Access::RWInterleaved, dedicated writer thread draining a bounded mpsc channel (cap 64 ≈ 3s buffer), EPIPE/xrun recovery via pcm.try_recover. Linux only. - player::build_sink: route AudioOutput::Cpal to AlsaSink on Linux, CpalSink elsewhere. Proto variant stays Cpal for cross-platform API parity. - crates/stream/Cargo.toml: cpal moves to non-Linux target deps, alsa = "0.9" added for Linux. Smaller dep tree on the Pi. - CLI: drop --cpal-device. The named-device path walked cpal's output_devices() enumeration, which triggers libasound plugin probes that segfault on the JACK plugin destructor. ALSA routing belongs in ~/.asoundrc, not a CLI knob. - cpal_sink.rs: trace logs around each cpal call kept for the non-Linux diagnostic path.
1 month ago
config
Initial Commit
1 month ago
proto
Add volume control: ALSA mixer service + per-stream gain Two cooperating layers, Linux-only for the system part: - crates/volume: alsa-lib wrapper for mixer ops (list / get / set / mute / unmute) gated on cfg(target_os = "linux"). Defaults to the `default` card and `Master` selem, falling back to `PCM` when `Master` isn't exposed. Cross-platform stubs return Err on macOS. - VolumeService in zerod.v1alpha1 wired into the tonic server, plus a `zerod volume` client subcommand tree. - Per-stream software gain applied in the player loop before the sink, so it works uniformly across cpal / stdout / pipe with one atomic. Exposed via SetStreamVolume / GetStreamVolume on StreamService and `zerod stream volume {get,set}`.
1 month ago
server
Default server bind to 0.0.0.0:50151 127.0.0.1 default left the daemon unreachable from the LAN, which is the common deployment shape (Pi audio appliance + remote CLI). Flip the default to all-interfaces and lean on the bearer token (random fallback) for the no-zerod.toml case. Document the security trade-off in the Security section and tell users to set bearer_token explicitly when exposing on a network they don't fully trust.
1 month ago
stream
Linux: use alsa-rs directly instead of cpal-alsa mmap path cpal's ALSA backend uses Access::MMapInterleaved, which crashes inside libasound's pulse plugin on Raspberry Pi OS (build_output_stream → snd_pcm_mmap_begin SIGSEGV). aplay / speaker-test work because they use snd_pcm_writei. Match that path. - New crates/stream/src/alsa_sink.rs: alsa::pcm::PCM with Access::RWInterleaved, dedicated writer thread draining a bounded mpsc channel (cap 64 ≈ 3s buffer), EPIPE/xrun recovery via pcm.try_recover. Linux only. - player::build_sink: route AudioOutput::Cpal to AlsaSink on Linux, CpalSink elsewhere. Proto variant stays Cpal for cross-platform API parity. - crates/stream/Cargo.toml: cpal moves to non-Linux target deps, alsa = "0.9" added for Linux. Smaller dep tree on the Pi. - CLI: drop --cpal-device. The named-device path walked cpal's output_devices() enumeration, which triggers libasound plugin probes that segfault on the JACK plugin destructor. ALSA routing belongs in ~/.asoundrc, not a CLI knob. - cpal_sink.rs: trace logs around each cpal call kept for the non-Linux diagnostic path.
1 month ago
systemd
Initial Commit
1 month ago
volume
Add volume control: ALSA mixer service + per-stream gain Two cooperating layers, Linux-only for the system part: - crates/volume: alsa-lib wrapper for mixer ops (list / get / set / mute / unmute) gated on cfg(target_os = "linux"). Defaults to the `default` card and `Master` selem, falling back to `PCM` when `Master` isn't exposed. Cross-platform stubs return Err on macOS. - VolumeService in zerod.v1alpha1 wired into the tonic server, plus a `zerod volume` client subcommand tree. - Per-stream software gain applied in the player loop before the sink, so it works uniformly across cpal / stdout / pipe with one atomic. Exposed via SetStreamVolume / GetStreamVolume on StreamService and `zerod stream volume {get,set}`.
1 month ago