GNU/Linux >> Znalost Linux >  >> Linux

ALSA:Způsoby, jak zabránit podběhnutí reproduktoru

Předpokládám, že tento kód běží v těsné smyčce a je určen k blokování na snd_pcm_writen() . Vzorkovací frekvence není uvedena; Předpokládám 48 kHz, protože všechna čísla se pěkně dělí.

Myslím, že zde jde o následující:

  • snd_pcm_write() nezaručuje zápis všech poskytnutých rámců (vrácená hodnota je vždy kontrolována pouze na chybové stavy). Soudě podle protokolování snd_pcm_avail() ve skutečnosti spotřebovává avail_min nebo 144 rámečky na každém. Toto jsou 3 ms zvuku.
  • Za předpokladu, že zvuk v tomto okamžiku neběží, po dvou zápisech je počet snímků ve vyrovnávací paměti roven start_threshold - na 288 Vzorky; spustí se zvukový výstup
  • volá na printf() blok a zdá se, že si pamatuji snd_pcm_avail() musí se synchronizovat s hardwarem výstupu zvuku a může se také blokovat. Protože jste nyní před přehráváním o 6 ms, je zcela možné, že během třetího volání snd_pcm_writen() dojde k vyprázdnění vyrovnávací paměti.

Stručně řečeno, neměli byste volat printf() v tomto bodě a pravděpodobně budete muset kompenzovat skutečnost, že snd_pcm_writen() nespotřebovává všechny snímky v pSpeakerBuf


Linux
  1. Audacious – pokročilý audio přehrávač pro Linux

  2. Ardor – Audio editor pro nahrávání a míchání zvuků

  3. Tracktion 7 – plně vybavená digitální audio pracovní stanice pro hudební tvůrce

  1. SMPlayer – bezplatný přehrávač médií pro všechny formáty

  2. Sayonara Player – rychlý a lehký audio přehrávač pro Linux

  3. nastavení sysctl pro vysokou zátěž a zabránění DDoS

  1. 3 způsoby, jak konfiguruji SSH pro soukromí

  2. Co definuje špičkový hudební přehrávač s otevřeným zdrojovým kódem pro Linux?

  3. LosslessCut – Super rychlý nástroj pro ořezávání / řezání videa a zvuku