GNU/Linux >> LINUX-Kenntnisse >  >> Linux

ALSA:Möglichkeiten, einen Unterlauf für Lautsprecher zu verhindern

Ich nehme an, dieser Code läuft in einer engen Schleife und soll auf snd_pcm_writen() blockieren . Die Abtastrate wird nicht angegeben; Ich gehe von 48 kHz aus, da sich die Zahlen alle gut teilen lassen.

Was meiner Meinung nach hier vor sich geht, ist Folgendes:

  • snd_pcm_write() garantiert nicht, dass alle bereitgestellten Frames geschrieben werden (der Rückgabewert wird immer nur auf Fehlerbedingungen überprüft). Gemessen an der Protokollierung von snd_pcm_avail() es verbraucht tatsächlich avail_min oder 144 Rahmen auf jedem. Dies sind 3 ms Audio.
  • Unter der Annahme, dass Audio zu diesem Zeitpunkt nicht läuft, ist die Anzahl der Frames im Puffer nach zwei Schreibvorgängen gleich start_threshold - unter 288 Proben; Audioausgabe startet
  • ruft printf() auf Block, und ich meine mich an diesen snd_pcm_avail() zu erinnern muss sich mit der Audioausgabehardware synchronisieren und kann auch blockieren. Da Sie der Wiedergabe jetzt 6ms voraus sind, ist es durchaus möglich, dass der Puffer während der Zeit des dritten Aufrufs von snd_pcm_writen() leer läuft

Zusammenfassend sollten Sie printf() nicht anrufen an dieser Stelle, und Sie müssen wahrscheinlich die Tatsache kompensieren, dass snd_pcm_writen() verbraucht nicht alle Frames in pSpeakerBuf


Linux
  1. 3 Möglichkeiten, wie ich SSH für den Datenschutz konfiguriere

  2. Audacious – Ein fortschrittlicher Audioplayer für Linux

  3. Tracktion 7 – Eine voll ausgestattete digitale Audio-Workstation für Musikschaffende

  4. Die 10 besten Audacity-Alternativen für die Audioaufnahme und -bearbeitung

  5. Sayonara Player – Schneller, leichter Audioplayer für Linux

Die nützlichsten FFmpeg-Befehle für die Audio- und Videokonvertierung

Einfacher Audio-Cutter für Ubuntu?

15 Möglichkeiten, den Linux Watch-Befehl für alltägliche Aktivitäten zu verwenden

20 beste Digital Audio Workstation (DAW) und DJ-Software für Linux

15 beste Linux-Synthesizer für die digitale Audioproduktion

So verhindern Sie, dass SSH die Verbindung trennt, wenn es eine Weile inaktiv war