mirror of https://github.com/jetkvm/kvm.git
Replace ALSA plugin layer resampling with libspeexdsp for improved audio quality and reliability. This implementation uses direct hardware access (hw:) instead of ALSA plugins (plughw:) and handles sample rate conversion with SpeexDSP's high-quality sinc-based resampler. Key changes: - Add libspeexdsp 1.2.1 with ARM NEON optimizations to build dependencies - Switch from plughw: to hw: device access for lower latency - Implement conditional resampling (only when hardware rate ≠ 48kHz) - Use SPEEX_RESAMPLER_QUALITY_DESKTOP for high-quality interpolation - Add automatic audio dependency building in dev_deploy.sh Quality improvements: - Fix race condition in resampler cleanup with mutex protection - Fix memory leak on resampler re-initialization - Add buffer overflow validation (3840 frame limit for 192kHz) - Improve error logging for resampling, encoding, and ALSA configuration - Simplify code structure while maintaining all functionality Technical details: - Hardware negotiates actual sample rate (e.g., HDMI may vary) - SpeexDSP converts hardware rate → 48kHz for Opus encoding - USB Audio Gadget hardcoded to 48kHz (no resampling overhead) - Static buffer allocation for zero allocation in hot path - WebRTC requires 48kHz RTP clock rate per RFC 7587 |
||
|---|---|---|
| .. | ||
| localization | ||
| public | ||
| src | ||
| tools | ||
| .env.cloud-development | ||
| .env.cloud-production | ||
| .env.cloud-staging | ||
| .gitignore | ||
| .prettierrc | ||
| dev_device.sh | ||
| eslint.config.cjs | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| tailwind.config.js | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite-env.d.ts | ||
| vite.config.ts | ||