🎉 live server seems to be working now

This commit is contained in:
2026-05-14 14:29:57 +02:00
commit d72e439fd9
181 changed files with 47406 additions and 0 deletions

192
third_party/sendspin-go/CHANGELOG.md vendored Normal file
View File

@@ -0,0 +1,192 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.9.0] - 2025-10-25
### Added
**Library-First Architecture**
- Complete restructure from CLI-focused to library-first design
- Three-tier architecture: high-level convenience API, component APIs, and private implementation
- Comprehensive public API in `pkg/` for library consumers
- CLI tools reimplemented as thin wrappers using the public library
**Public API Packages**
- `pkg/sendspin` - High-level Player and Server APIs for most use cases
- `Player` - Connect to servers and play synchronized audio with volume control, callbacks
- `Server` - Serve audio to multiple clients with custom source support
- `AudioSource` - Interface for custom audio sources
- `FileSource()` - Read audio from FLAC, MP3, WAV files
- `TestToneSource()` - Generate test tones for debugging
- `pkg/audio` - Core audio types and utilities
- `Format` - Audio stream format descriptor (codec, sample rate, channels, bit depth)
- `Buffer` - Decoded PCM audio with timestamp information
- Sample conversion functions for 16-bit and 24-bit audio
- `pkg/audio/decode` - Audio decoders for multiple codecs
- `Decoder` - Common interface for all decoders
- PCM decoder - 16-bit and 24-bit support
- Opus decoder - with int16 to int32 conversion
- FLAC decoder - stub for future implementation
- MP3 decoder - with int16 to int32 conversion
- `pkg/audio/encode` - Audio encoders
- `Encoder` - Common interface for all encoders
- PCM encoder - 16-bit and 24-bit support
- Opus encoder - with int32 to int16 conversion
- `pkg/audio/resample` - Sample rate conversion
- Linear interpolation resampler
- Support for upsampling and downsampling
- Multi-channel support
- `pkg/audio/output` - Audio playback interfaces
- `Output` - Common interface for playback backends
- PortAudio implementation for cross-platform audio
- `pkg/protocol` - Sendspin wire protocol
- Message types for client/server communication
- WebSocket client implementation
- Protocol version negotiation
- `pkg/sync` - Clock synchronization
- NTP-style clock sync with Sendspin servers
- Round-trip time measurement
- Quality tracking for sync accuracy
- `pkg/discovery` - mDNS service discovery
- Discover Sendspin servers on local network
- Advertise server availability
- Service registration and browsing
**Examples**
- `examples/basic-player` - Simple audio player example
- `examples/basic-server` - Simple audio server example
- `examples/custom-source` - Custom audio source implementation
**Documentation**
- Comprehensive godoc comments for all public types and functions
- Package-level documentation for each public package
- Examples in README demonstrating library usage
- Complete refactoring design document
**Testing**
- 180+ tests covering all public APIs
- Integration tests for Player and Server
- Unit tests for audio processing components
- Codec-specific tests for encoders and decoders
### Changed
**Breaking Changes**
- CLI tools now use public library APIs instead of internal implementations
- Internal packages moved to `pkg/` for public consumption
- Audio processing now consistently uses int32 samples in 24-bit range
**Architecture**
- Player CLI (`sendspin-player`) - Thin wrapper around `pkg/sendspin.Player`
- Server CLI (`sendspin-server`) - Thin wrapper around `pkg/sendspin.Server`
- All audio processing moved to reusable public packages
- Clean separation between library code and CLI code
### Fixed
- Consistent sample format across all audio processing components
- Proper resource cleanup in decoders and encoders
- Thread-safe clock synchronization
- Robust error handling in all public APIs
### Technical Details
**Audio Pipeline**
- All decoders output int32 samples in 24-bit range for consistent hi-res audio
- All encoders accept int32 samples and convert as needed for codec
- Resampler uses linear interpolation for quality upsampling/downsampling
- PortAudio output converts int32 to int16 for playback
**Wire Protocol**
- WebSocket-based streaming with binary audio frames
- Clock sync messages for precise timing
- Metadata messages for track information
- Client state messages for monitoring
**Clock Synchronization**
- NTP-style round-trip time measurement
- Multiple sync samples for accuracy
- Quality tracking and bad sample rejection
- Thread-safe concurrent access
**Service Discovery**
- mDNS-based server discovery
- Automatic service registration
- Server name and capability advertising
### Migration Guide
For users of pre-1.0.0 versions, the library API is now the recommended way to use Sendspin:
**Old (Internal API):**
```go
// Not recommended - internal packages
import "github.com/Sendspin/sendspin-go/internal/player"
```
**New (Public API):**
```go
// Recommended - public library API
import "github.com/Sendspin/sendspin-go/pkg/sendspin"
player, err := sendspin.NewPlayer(sendspin.PlayerConfig{
ServerAddr: "localhost:8927",
PlayerName: "Living Room",
Volume: 80,
})
```
### Version Information
- Go 1.23+
- Supports hi-res audio up to 192kHz/24-bit
- Cross-platform: macOS, Linux, Windows
- Architecture: x86_64, ARM64
---
## [0.3.0] - 2025-10-24
### Added
- Hi-res audio support up to 192kHz/24-bit
- Multi-source audio support
- Server TUI with real-time client monitoring
- Comprehensive server and player documentation
### Fixed
- Audio timing and distortion issues
- Buffer management improvements
- Clock synchronization accuracy
---
## [0.2.0] - 2025-10-20
### Added
- Basic player and server functionality
- Clock synchronization
- mDNS discovery
- TUI for player
### Changed
- Initial implementation
---
## [0.1.0] - 2025-10-15
### Added
- Initial project structure
- Basic audio streaming
- WebSocket protocol