2013-04-05 6 views
7

Ich benutze ALSA API snd_pcm_drop(), um die Puffer zu löschen. Aber wenn ich später Audio mit snd_pcm_prepare() fortsetze, kann ich einen Teil des vorherigen Audios hören, der gelöscht werden sollte. Das passiert, wenn ich einen hohen Wert von snd_pcm_sw_params_set_stop_threshold() habe. Wenn ich einen niedrigeren Wert verwende, wird das teilweise Audio von der vorherigen Audiositzung nicht abgespielt.ALSA snd_pcm_drop() löscht nicht den kompletten Puffer

Was passiert hier? Wie lösche ich den Puffer vollständig?

(Ich bin neu in ALSA)

Dank

+0

Ist es eine Option, snd_pcm_drain() anstelle von snd_pcm_drop() zu verwenden? –

+0

Klingt wie ein Treiberfehler, aber das ist ohne weitere Informationen schwer zu sagen. –

+0

@Multimedia Mike, Laut Dokumentation wird snd_pcm_drain() den Puffer nicht sofort löschen. So ist es für mich nicht nützlich. Wie auch immer ich versuchte snd_pcm_drain(), aber die Beobachtung ist gleich. –

Antwort

0

„Teil der vorherigen Ton hören kann, die gelöscht werden sollte zu.“ weil es noch einige Audiodaten im ALSA-Puffer gibt und die Daten nicht groß genug sind, um abgespielt zu werden. Vergrößern Sie das Audiopaket, wenn Sie in den ALSA-Puffer setzen, um das Problem zu lösen.