GNU/Linux >> Linux Esercitazione >  >> Linux

ALSA:Modi per prevenire l'underrun per l'altoparlante

Presumo che questo codice venga eseguito in un ciclo stretto ed è destinato a bloccare su snd_pcm_writen() . La frequenza di campionamento non è data; Presumo 48kHz poiché i numeri si dividono tutti bene.

Quello che penso stia succedendo qui è il seguente:

  • snd_pcm_write() non garantisce la scrittura di tutti i frame forniti (il valore restituito viene controllato solo per condizioni di errore). A giudicare dalla registrazione di snd_pcm_avail() sta infatti consumando avail_min o 144 cornici su ciascuno. Sono 3 ms di audio.
  • Supponendo che l'audio non sia in esecuzione a questo punto, dopo due scritture, il numero di frame nel buffer è pari a start_threshold - al 288 campioni; viene avviata l'uscita audio
  • chiamate a printf() block, e mi sembra di ricordare che snd_pcm_avail() deve sincronizzarsi con l'hardware di uscita audio e potrebbe anche bloccarsi. Dato che ora sei 6 ms avanti rispetto alla riproduzione, è del tutto possibile che il buffer si stia esaurendo durante il tempo della terza chiamata di snd_pcm_writen()

In sintesi, non dovresti chiamare printf() a questo punto, e probabilmente dovrai compensare il fatto che snd_pcm_writen() non consuma tutti i frame in pSpeakerBuf


Linux
  1. 3 modi per configurare SSH per la privacy

  2. Cosa definisce un lettore musicale open source di alto livello per Linux?

  3. LosslessCut – Strumento super veloce per tagliare/tagliare video e audio

  4. SMPlayer – Un lettore multimediale gratuito per tutti i formati

  5. Sayonara Player – Lettore audio veloce e leggero per Linux

I comandi FFmpeg più utili per la conversione di audio e video

Taglierina audio facile per Ubuntu?

15 modi per utilizzare il comando Linux Watch per le attività quotidiane

20 migliori workstation audio digitali (DAW) e software per DJ per Linux

I 15 migliori sintetizzatori Linux per la produzione di audio digitale

Come impedire a SSH di disconnettersi se è rimasto inattivo per un po'