Fushi

Toate proiectele

DualSpeakers

Un program pentru Windows care redă același sunet pe două boxe, aliniate atât de precis încât se aud ca o singură sursă.

Tip:
Proiect personal
Stare:
În lucru
An:
2026

Problema

Două dispozitive de ieșire se desincronizează în timp (1 ppm diferență de ceas adaugă 3,6 ms pe oră) și au latențe interne diferite. Rezultatul este un efect de filtru pieptene care sună ca o voce dublată. Programul măsoară decalajul și îl elimină.

Ce am construit

  • Un motor audio în C++ care captează sunetul sistemului și îl redă pe o ieșire analogică și pe o soundbar USB prin WASAPI.
  • Măsurarea decalajului cu corelație GCC-PHAT și corectarea derivei ceasului prin reeșantionare.
  • Fără alocări, blocări sau jurnalizare pe firul audio. Un test înlocuiește alocatorul global și verifică zero alocări.

Tehnologii

  • C++
  • CMake
  • WASAPI
  • libsamplerate
  • Python
  • PowerShell

Rezultate

  • Decalajul median dintre boxe în poziția de ascultare: -0,021 ms, cu o dispersie de 0,203 ms pe cinci rulări (țintă 0,3 ms). Măsurat cu un microfon.
  • Soundbar-ul USB redă cu 9,600 ms după ieșirea analogică, cu o dispersie de 0,095 ms pe trei rulări.
  • Deriva cristalului de +0,002 ppm pe 2.562 de măsurători. Am verificat metoda injectând +50 ppm și citind înapoi +51,03.
  • Modul exclusiv la 144 de cadre (3 ms) reduce bufferul dispozitivului de la 1056 de cadre (22 ms).
  • Un test de 30 de minute a trecut cu zero depășiri și zero cadre refuzate.
  • Aceste cifre provin din README-ul proiectului, iar eu le-am măsurat pe hardware-ul meu. Proiectul funcționează, dar nu este terminat. Nu are încă fișier de setări, fereastra de control nu poate selecta dispozitivele și nu are program de instalare.