2016-12-21 5 views
2

Ich möchte snd_pcm_delay() verwenden, um die Verzögerung abzufragen, bis die Probe, über die ich in den ALSA-Puffer schreiben soll, hörbar sind. Ich erwarte, dass dieser Wert zwischen einzelnen Anrufen variiert. Auf zwei Systemen ist dieser Wert jedoch konstant. Die Funktion gibt einen Wert zurück, der immer gleich der Periodengröße auf einer Plattform ist, und auf der anderen Plattform entspricht sie der Puffergröße (zweimal die Periodengröße in meinem Code).Was genau liefert ALSAs snd_pcm_delay()?

Ist mein Verständnis von snd_pcm_delay() falsch? Ist es ein Fahrerproblem?

Antwort

1

Die Verzögerung ist proportional zur Anzahl der Samples im Puffer (die Umkehrung von snd_pcm_avail()) plus einer Zeit, die beschreibt, wie viel Zeit benötigt wird, um Samples vom Puffer zu den Lautsprechern zu bewegen. Der letzte Teil ist vom Treiber abhängig und möglicherweise nicht implementiert.

Wenn das Gerät eine ganze Periode nacheinander entnimmt (einige DMA-Controller haben keine bessere Granularität für die Meldung der aktuellen Position), dann wird der Verzögerungswert für eine bestimmte Zeit konstant bleiben und dann um eine ganze Zeit springen Zeitraum. Und Sie sehen diesen Sprung nur, bevor Sie den Puffer wieder gefüllt haben.