2010-10-09 19 views
5

Ich möchte snd_pcm_readi() aufrufen und AUDIO DATA alle 20 ms oder alle 40 ms abrufen. Ich möchte wissen, wie man meine Daten synchron bekommt ... das ist jedes X ms ...In ALSA alle 20 Millisekunden Audiodaten abrufen?

Danke für alle Antworten.

+0

Ich hätte hinzugefügt werden ... was ist die korrekte Möglichkeit, dies in ALSA zu tun ... oder brauche ich Schlaf oder einige pthread_cond_time_wait oder so ähnlich ... – Xofo

Antwort

2

Für Echtzeit-Audio-Lese- oder -Wiedergabe erstellen Sie in der Regel einen dedizierten Worker-Thread mit hoher Priorität, von dem aus Sie anrufen können, und verwenden Sie dann einige Ringpuffer. Dein Thread sollte das Sperren vermeiden.

alsa Beispiele:

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2latency_8c-example.html#a36

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html

wenn Sie einfach von der Festplatte lesen, Sie genügend Puffer wollen werde, dann nur aufwachen und sehen Sie, wenn Sie mehr lesen müssen, bevor beim nächsten Aufwachen (unter Berücksichtigung der Gesamtlatenz).

+0

Ist snd_pcm_wait() die Funktion, die ich anrufen muss ? Ich bin immer noch nicht so klar? – Xofo

+0

@Xofo Entschuldigung, die Frage ist waaay zu weit für mich, um in einer angemessenen Zeit (oder prägnant) zu beantworten - ich weiß nicht einmal, was Sie mit dem Audio machen (Füllen/Kopieren, Erzeugen, Verarbeiten, Lesen von der Festplatte, Lesen von einer Anzahl anderer Quellen). Es würde helfen, Ihrem Beitrag eine Menge Details hinzuzufügen. Die Dokumente beantworten möglicherweise einige Ihrer Fragen auf hoher Ebene (mit Hinweisen zu Benachrichtigungen und Informationen dazu, wie ALSA den Datenaustausch behandelt - snd_pcm_wait könnte das sein, was Sie wollen, wenn Sie nur eine Poll-Routine in einem einfachen Programm benötigen): http: //www.alsa -project.org/alsa-doc/alsa-lib/pcm.html – justin