2010-10-09 11 views
5

snd_pcm_readi() işlevini çağırmak ve her 20 ms'de bir veya her 40 ms'de bir AUDIO DATA almak istiyorum. Verileri eşzamanlı olarak nasıl alacağımı bilmek istiyorum ... her X ms ...ALSA'da her 20 milisaniyede ses verisi alınıyor mu?

Yanıtlarınız için teşekkür ederiz.

+0

Eklemeliyim ... ALSA'da bunu yapmak için DOĞRU bir yol ... ya da uyku veya bazı pthread_cond_timed_wait veya bunun gibi bir şey kullanmam gerekir ... – Xofo

cevap

2

gerçek zamanlı ses okumak veya oynatma, normalde gelen çağrı ve sonra bir kaç halka tamponlarını kullanmak için özel bir yüksek öncelikli iş parçacığı oluşturacaksınız. iş parçacığı kilitlemekten kaçınmalıdır.

alsa örnekler: basitçe diskten okuyorsanız

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

, sen bol tampon isteyeceksiniz, o zaman sadece uyanmak ve daha önce fazla okumak gerekir olmadığını görmek Bir sonraki uyanışınızda (toplam gecikme göz önüne alındığında).

+0

snd_pcm_wait() işlevini çağırmam gerekiyor ? Hala çok net değil miyim? – Xofo

+0

@Xofo özür dilerim, soru makul bir süre içinde (ya da kısaca) cevap vermemiz için geniş kapsamlı bir soru. Sesle ne yaptığınızı bile bilmiyorum (doldurma/kopyalama, oluşturma, işleme, diskten okuma, başka kaynaklardan okuma). Gönderinize çok fazla ayrıntı eklemenize yardımcı olur. Dokümanlar yüksek seviyeli sorularınızın bazılarına cevap verebilir (bildirimlerle ilgili notlar ve alsa'nın veri alış verişini nasıl gerçekleştirdiği - basit bir programda yalnızca bir anket rutinine ihtiyaç duyarsanız, ne istediğinizi snd_pcm_wait olabilir): http: //www.alsa -project.org/alsa-doc/alsa-lib/pcm.html – justin

İlgili konular