2010-09-07 14 views
6

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

सी/सी ++ में ऐसा करना अच्छा होगा, लेकिन कोई भी भाषा ठीक होगी।

उत्तर

1

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

जूस बहुत बड़ा है, लेकिन एपीआई अच्छा और अच्छी तरह से प्रलेखित है। उदाहरण के लिए, class for parsing MIDI files, काफी सरल और उपयोग करने में आसान है।

5

निक रेसमैन - क्षमा करें, लेकिन मैं आपसे सहमत नहीं हूं ... सी # में मिडी पार्सिंग, सी ++ कोड की 400 पंक्तियों में से कुछ है..यह कुछ भी मुश्किल नहीं है और यह कुछ भी मुश्किल नहीं है।

मैं आप इस लिंक के साथ शुरू की सलाह देंगे: http://www.sonicspot.com/guide/midifiles.html सब कुछ आप मिडी और कैसे इसे पढ़ने के लिए के बारे में पता करने की जरूरत ..

संक्षिप्त विवरण में कैसे पार्सर काम करेंगे नहीं है:
1) ओपन बाइट मोड में मिडी
2) हेडर खंड पढ़ें जहां आकार, ट्रैक की संख्या और महत्वपूर्ण फ़ाइल प्रारूप के बारे में जानकारी है !!
- 3 प्रकार के प्रारूप हैं: 0,1,2 (टाइप 2 वास्तव में "मूल्यवान" है, इस प्रकार के साथ केवल कुछ मिडी फाइलें हैं, इसलिए यदि टाइप 2 है तो आपको मिडी को पढ़ने की आवश्यकता नहीं है)
- अगर वहाँ नहीं लिखा है: (क बुरा मिडी फ़ाइल यह है) "MThd" (0x4D546864), त्रुटि के साथ अंत
3) पढ़ें ट्रैक हिस्सा
- अगर वहाँ नहीं लिखा है: त्रुटि के साथ "MTrk" (0x4D54726B) अंत (यह एक बुरा मिडी फ़ाइल है)
4) मिडी घटनाओं को पढ़ें .. - बहुत सारी घटनाएं हैं, आप उन्हें सभी को पढ़ सकते हैं, अन्य आदेशों के साथ, या आप केवल उन घटनाओं को पढ़ सकते हैं जिन्हें आप जानना चाहते हैं, उदाहरण के लिए नोट करें, बंद करें - कभी-कभी कुछ मिडी फाइलों में नोट नहीं है .. यह घटना बदल गई है नोट ऑन और वेग 0

वेबसाइटों पर सब कुछ वास्तव में अच्छी तरह से समझाया गया है। यदि आप बाइट मोड में मिडी फ़ाइल खोलते हैं तो आपके पास केवल कुछ विधियां होंगी और सबकुछ केवल तभी होगा - अन्यथा कमांड और वहां आप जो भी संग्रहीत करेंगे उसे पकड़ लेंगे।
वैरिबल लेंस को समझना महत्वपूर्ण है, लेकिन वेबसाइटों पर यह भी समझाया गया है। यह मुश्किल नहीं है। आप कई छवियों और उदाहरणों के साथ कई साइटों को Google पर भी खोज सकते हैं जहां VARIABLE LENGTH भी समझाया गया है। तो मुझे नहीं लगता कि यहां इसे समझाना मुश्किल है।

यदि आप थोड़ा और सलाह चाहते हैं, तो मुझे लिखें, मैं इसे आजमाउंगा। लेकिन मिडी पार्सिंग उतनी मुश्किल नहीं है जितनी दिखती है। अगर आपको कुछ समस्याएं हैं, तो मुझे लिखें ..

+1

एनआईएच सिंड्रोम शायद? मेरा मतलब है कि एक std :: वेक्टर क्लास सतह पर लिखना मुश्किल नहीं है, इसकी एक चर लंबाई लंबाई है ... std :: log2() को लिखना मुश्किल नहीं है ... और इसी तरह। सबकुछ खुद क्यों नहीं लिखते? हाथ से फ़ाइल पार्सिंग जैसी सामग्री उन सभी की सबसे कमजोर चीज है, जो "मानक" स्वरूपों से निपटने के दौरान और भी अधिक होती हैं, जिनके पास निश्चित रूप से कहीं ठोस ठोस कार्यान्वयन होना चाहिए। – thesaint

+2

क्षमा करें, मैं उसे 21 9 83120 9 3 ढांचे और तृतीय पक्ष समाधान भेज सकता हूं और उसे केवल अपनी समस्याओं के साथ ही बड़ी समस्याएं मिल सकती हैं। कम से कम अगर मैं 3 वें पार्टी पुस्तकालयों का उपयोग करता हूं तो मुझे बड़ी समस्याएं मिल रही हैं, अगर मैंने इसे स्वयं से लिखा है। और वैसे भी किसी को कोड लिखने की जरूरत है। अगर मैं ताइवान से एक या कुछ जोसेफ नोवाक लिखता हूं तो यह महत्वपूर्ण नहीं है। हर बार आप कुछ त्रुटियां प्राप्त कर सकते हैं। और यदि आप वास्तव में समझना चाहते हैं कि कुछ लाइब्रेरी क्या कर रही है, तो आपको वैसे भी कोड को देखना होगा। तो कई मामलों में इसे स्वयं लिखना आसान है। – piggy

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