sendspin 0.1.1

Hyper-efficient Rust implementation of the Sendspin Protocol for synchronized multi-room audio streaming
Documentation

sendspin-rs

=======

[!WARNING]
THIS IS A WIP. Please help!

Hyper-efficient Rust implementation of the Sendspin Protocol for synchronized multi-room audio streaming.

Features

  • Zero-copy audio pipeline - Minimal allocations, maximum performance
  • Lock-free concurrency - No contention on audio thread
  • Async I/O - Efficient WebSocket handling with Tokio
  • Type-safe protocol - Leverage Rust's type system for correctness

Performance Targets

  • Audio latency: <10ms end-to-end jitter
  • CPU usage: <2% on modern hardware (4-core)
  • Memory: <20MB stable
  • Thread synchronization: Lock-free audio pipeline

Current Status

Phase 1: Foundation ✅ (Complete)

  • Core audio types (Sample, AudioFormat, AudioBuffer)
  • Protocol message types with serde serialization
  • WebSocket client with handshake
  • PCM decoder (16-bit and 24-bit)
  • Clock synchronization (NTP-style)

Phase 2: Audio Pipeline 🚧 (Next)

  • Audio output (cpal integration)
  • Lock-free scheduler
  • End-to-end player

Installing build dependencies

Debian/Ubuntu/Mint

sudo apt install libasound2-dev

Fedora/Centos

dnf install alsa-lib-devel

Quick Start

Add to your Cargo.toml:

[dependencies]
sendspin = "0.1"

Basic Client Example

use sendspin::protocol::messages::{ClientHello, DeviceInfo};
use sendspin::protocol::client::ProtocolClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let hello = ClientHello {
        client_id: uuid::Uuid::new_v4().to_string(),
        name: "My Player".to_string(),
        version: 1,
        // ... configure device info and capabilities
    };

    let client = ProtocolClient::connect("ws://localhost:8080/sendspin", hello).await?;

    // Client is now connected and ready to receive audio

    Ok(())
}

See examples/ directory for more examples.

Architecture

See docs/rust-thoughts.md for detailed architecture and implementation notes.

Development

# Build
cargo build

# Run tests
cargo test

# Run examples
cargo run --example basic_client

# Build with optimizations
cargo build --release

Verification (cargo-make)

# Install cargo-make (one time)
cargo install cargo-make

# Run the full verification suite
cargo make verify

cargo make verify runs: tests, Clippy, doc build, doctests, and formatting checks.

Testing

# Run all tests
cargo test

# Run specific test
cargo test test_sample_from_i16

# Run with logging
RUST_LOG=debug cargo test

License

MIT OR Apache-2.0

Contributing

Contributions welcome! Please open an issue or PR.