c++ - How to use ALSA's snd_pcm_writei()? -
क्या कोई यह समझा सकता है कि
snd_pcm_sframes_t snd_pcm_writei (snd_pcm_t * pcm, const void * बफर, Snd_pcm_uframes_t आकार)
काम करता है?
मैंने इसे ऐसा प्रयोग किया है:
के लिए (int i = 0; i & lt; 1; i ++) {एफ = snd_pcm_writei (हैंडल, बफर, फ्रेम); ...}
पर पूर्ण स्रोत कोड
इसका क्या मतलब है, मुझे snd_pcm_writei ()
सभी की संख्या नहीं देना चाहिए बफ़र
में फ़्रेम, लेकिन केवल
sample_rate * latency = फ़्रेम
?
इसलिए यदि मैं उदाहरण के लिए है: sample_rate = 44100 विलंबता = 0.5 [एस] all_frames = 100000
मुझे snd_pcm_writei ()
को देना चाहिए फ्रेम की संख्या
sample_rate होगा * विलंबता = फ्रेम 44100 * 0.5 = 22050
और पुनरावृत्तियों की संख्या के लिए-लूप होना चाहिए ?:
(int) 100000/22050 = 4; फ़्रेम के साथ = 22050
और एक अतिरिक्त, लेकिन केवल
100000 mod 22050 = 11800
फ्रेम के साथ?
यह कैसे है काम करता है?
लुईस
फ़्रेम फ़्रेम (नमूने) की संख्या होनी चाहिए जिसे आप बफर से लिखना चाहते हैं आपके सिस्टम के साउंड ड्रायवर उन नमूनों को तुरंत साउंड कार्ड में स्थानांतरित करना शुरू कर देंगे, और वे एक स्थिर दर पर खेला जाएगा।
विलंबता कई स्थानों में शुरू की गई है। कार्ड को स्थानांतरित होने की प्रतीक्षा करते समय चालक द्वारा बफर किए गए डेटा से विलंबता है कम से कम एक बफर डेटा से भरा हुआ है जिसे किसी भी समय कार्ड पर स्थानांतरित किया जा रहा है, और आवेदन पक्ष पर बफरिंग हो रहा है, जो कि आप के बारे में चिंतित हैं।
आवेदन पर विलंबता को कम करने के लिए जिस तरफ आपको सबसे छोटा बफर लिखना होगा जो आपके लिए काम करेगा। यदि आपका आवेदन डीएसपी कार्य करता है, तो आमतौर पर एक खिड़की के लायक डेटा होता है।
लूप में छोटे बफ़र्स लिखने में कोई फायदा नहीं है - बस आगे बढ़ो और एक बार में सब कुछ लिखो- लेकिन एक महत्वपूर्ण बिंदु समझे: विलंबता को कम करने के लिए, आपका एप्लिकेशन ड्रायवर को लिखना चाहिए ताकि चालक ध्वनि कार्ड पर डेटा लिख सके, या आप अधिक डेटा जमा कर सकते हैं और अधिक से अधिक विलंबता जमा कर सकते हैं।
एक डिजाइन के लिए जो ध्वनि चालक के साथ अपेक्षाकृत आसान लॉकस्टेप में डेटा का उत्पादन करता है, जैक को देखो () जो ध्वनि प्लेबैक इंजन के साथ एक कॉलबैक फ़ंक्शन दर्ज करने पर आधारित है। वास्तव में, आप वास्तव में जैक का उपयोग कर खुद को बेहतर करने की कोशिश कर रहे हैं यदि आप वास्तव में विलंब के बारे में चिंतित हैं।
Comments
Post a Comment