2012-06-01 14 views
5

मैं सी में गणितीय तरंग कार्यों का उपयोग करके ध्वनि बनाने के साथ खेल रहा हूं। मेरी परियोजना में अगला कदम तरंगों को अलग करने के लिए मिडी कीबोर्ड नियंत्रक से उपयोगकर्ता इनपुट प्राप्त कर रहा है पिचों।सी लिनक्स डिवाइस प्रोग्रामिंग - सीधे से पढ़ना/देव

मेरी पहली धारणा यह थी कि यह अपेक्षाकृत सरल होगा और लिनक्स होने पर लिनक्स, मुझे अपने डिवाइस से कच्चे डेटा स्ट्रीम को पढ़ने की अनुमति देगा जैसे कि मैं कोई अन्य फाइल करूंगा।

हालांकि, शोध भारी सलाह देता है कि मैं MIDI नियंत्रक के लिए डिवाइस ड्राइवर लिखता हूं। सामान्य विचार यह है कि भले ही डिवाइस फ़ाइल मौजूद हो, भले ही कर्नेल को पता नहीं चलेगा कि कौन सा सिस्टम निष्पादित करता है जब मेरा एप्लिकेशन कॉल() और लिखने() लिखता है।

इन चेतावनियों के बावजूद, मैंने एक प्रयोग किया। मैंने MIDI नियंत्रक में प्लग किया और "/ dev/midi1" डिवाइस फ़ाइल को बिल्ली दिया। शून्य वर्णों की एक स्थिर धारा दिखाई दी, और जब मैंने MIDI नियंत्रक पर एक कुंजी दबाई तो कई बाइट अपेक्षित संदेश खंडों के अनुरूप दिखाई दिए जो MIDI डिवाइस को आउटपुट करना चाहिए। MIDI Protocol Info

तो मेरी प्रश्न हैं:

क्यों cat'ed धारा इस तरह से व्यवहार करते हैं करता है?

क्या इसका मतलब यह है कि मेरे सिस्टम पर एक प्लग और प्ले डिवाइस ड्राइवर पहले से स्थापित है?

क्या मुझे अभी भी आगे बढ़ना चाहिए और डिवाइस ड्राइवर लिखना चाहिए, या क्या मैं इसे फ़ाइल की तरह पढ़ने से दूर हो सकता हूं?

इन क्षेत्रों में अपना ज्ञान साझा करने के लिए उन्नत में धन्यवाद।

+0

इसे कैट करने के बजाए, मैं अनुशंसा करता हूं कि आप 'सी' प्रोग्राम से डिवाइस को पढ़ लें। आप कहते हैं कि आप 'वैध' डेटा देख रहे हैं, निश्चित रूप से क्यों नहीं पता? बीटीडब्ल्यू, वहां पहले से ही एक डिवाइस ड्राइवर होना चाहिए, अन्यथा आपके पास डिवाइस फ़ाइल नहीं होगी, न ही इसे एक्सेस करने का कोई तरीका होगा। – KevinDTimm

उत्तर

5

बिल्ली की धारा इस तरह से क्यों व्यवहार करती है?

क्योंकि यह संभवतः कच्चे MIDI डेटा को नियंत्रक द्वारा प्राप्त किया जा रहा है। नल बाइट्स शायद सिंक टिक के कुछ प्रकार हैं।

क्या इसका मतलब यह है कि मेरे सिस्टम पर एक प्लग और प्ले डिवाइस ड्राइवर पहले से स्थापित है?

हां।

हालांकि, शोध भारी सलाह देता है कि मैं MIDI नियंत्रक के लिए डिवाइस ड्राइवर लिखता हूं। सामान्य विचार यह है कि भले ही डिवाइस फ़ाइल मौजूद हो, भले ही कर्नेल को पता नहीं चलेगा कि कौन सा सिस्टम निष्पादित करता है जब मेरा एप्लिकेशन कॉल() और लिखने() लिखता है।

< ...>

मैं अभी भी आगे जाना है और एक डिवाइस ड्राइवर लिखने चाहिए, या मैं एक फ़ाइल की तरह इसे पढ़ने के साथ भाग मिल सकता है?

मुझे यकीन नहीं है कि आप क्या पढ़ रहे हैं या आप इस निष्कर्ष पर कैसे आ रहे हैं, लेकिन यह गलत है। :) आप पहले से ही अपने MIDI नियंत्रक के लिए एक बिल्कुल अच्छा ड्राइवर स्थापित कर चुके हैं - आगे बढ़ें और इसका उपयोग करें!

2

क्या आप वाकई एनयूएल बाइट पढ़ रहे हैं? और 0xf8 बाइट्स नहीं? चूंकि 0xf8 MIDI टाइम टिक स्थिति है और आमतौर पर उपकरणों को सिंक में रखने के लिए समय-समय पर भेजा जाता है।od का उपयोग करके उपकरण पढ़ने का प्रयास करें:

od -vtx1 /dev/midi1 

आप 0xf8 के एक झुंड देख रहे हैं तो कोई बात नहीं। यदि आपको अपने MIDI नियंत्रक द्वारा भेजी गई टेम्पो जानकारी की आवश्यकता नहीं है, तो इसे अपने नियंत्रक पर अक्षम करें या उन 0xf8 स्थिति बाइट्स को अनदेखा करें।

इसके अलावा, MIDI के लिए, ध्यान रखें कि वर्तमान MIDI स्थिति आमतौर पर (बाइट्स पर सहेजने के लिए) भेजी जाती है और फिर पेलोड बाइट आवश्यकतानुसार पालन करती है। उदाहरण के लिए, पिच मोड़ की स्थिति बाइट 0xeK है (जहां के चैनल संख्या है, यानी 0 से 15) और इसका पेलोड कम से कम महत्वपूर्ण बाइट के 7 बिट्स के बाद सबसे महत्वपूर्ण बाइट्स के 7 बिट्स हैं। इस प्रकार, हो सकता है कि आपको एक अजीब नियंत्रक मिल जाए और आप कुछ स्थिति के केवल दोहराए गए पेलोड देख रहे हों, लेकिन कोई भी नियंत्रक जो बेवकूफ नहीं है, उसे दोहराने की आवश्यकता नहीं होगी।

अब चालक के लिए: जब आप अपना MIDI नियंत्रक प्लग करते हैं तो dmesg पर एक नज़र डालें। अब अगर आपका ओएसएस /dev/midi1 दिखाई देता है जब आप अपने डिवाइस में प्लग करते हैं (udev यह काम कर रहा है), और dmesg कोई त्रुटि नहीं शूट करता है, तो आपको किसी और चीज की आवश्यकता नहीं है। एमआईडीआई प्रोटोकॉल अभी तक एक और सीरियल-प्रोटोकॉल है जिसमें एक निश्चित बॉड्रेट और ट्रांसमिट/बाइट प्राप्त होता है। इसके बारे में कुछ भी जटिल नहीं है ... बस डिवाइस से पढ़ें या लिखें और आप कर चुके हैं।

एकमात्र मुद्दा यह है कि किसी स्थान पर कतार में खराब ऑडियो विलंबता हो सकती है (यदि आप लाइव ऑडियो को नियंत्रित करने के लिए MIDI आदेशों का उपयोग कर रहे हैं, जो मुझे विश्वास है कि आप क्या कर रहे हैं)। ऐसा लगता है कि उन उपकरणों को ज्यादातर सिस्टम विशेष संदेशों के लिए बनाया गया है, उदाहरण के लिए, ऑनलाइन सिंथेसाइज़र के लिए कुछ पैच/प्रीसेट डाउनलोड करना और MIDI का उपयोग करके डिवाइस पर अपलोड करना। लेटेंसी वास्तव में इस स्थिति में कोई फर्क नहीं पड़ता।

लिनक्स पर MIDI के साथ खेलने के ALSA way पर भी एक नज़र डालें।

1

यदि आप एक नया MIDI नियंत्रक हार्डवेयर विकसित नहीं कर रहे हैं, तो आपको इसके लिए ड्राइवर लिखने की चिंता नहीं करनी चाहिए। यह उपयोगकर्ता की हार्डवेयर को स्थापित करने की चिंता है, और ड्राइवरों को आपूर्ति करने के लिए विक्रेता की ज़िम्मेदारी है।

लिनक्स के तहत, आप बस फ़ाइल पढ़ते हैं। अब डेटा के साथ उपयोगी चीजों को समझने और बनाने के लिए।

संबंधित मुद्दे