2011-03-13 22 views
6

मैंने इस विषय का कुछ समय से शोध किया है और अभी भी इसे समझ नहीं लिया है। मैं मिडी को फ्लैश करने के लिए मिडस 3 लाइब्रेरी (मिडी-एक्शनस्क्रिप्ट 3) का उपयोग करता हूं। मुझे प्रत्येक नोट-आइटम टाइमलाइन पर मिलता है। मुझे डिवीजन वैल्यू (1 9 2) मिलते हैं और सभी "जीईटी-टेम्पो" तत्व 81 के बराबर होते हैं।मिडी टाइमलाइन को वास्तविक समयरेखा में परिवर्तित करने के लिए कैसे करें

मैंने मिडी के वास्तविक समय को पाने के लिए कई संयोजनों की कोशिश की लेकिन अभी भी कोई अच्छा नहीं है (टाइमलाइन * 1 9 2/उदाहरण के लिए 60)।

कारण मैं जानता हूँ कि यह वास्तविक समय के साथ सिंक्रनाइज़ नहीं कर रहा है कि जब मैं नोटों फ्लैश में के रूप में सरल आयतों कल्पना है - क्या एमपी 3 फ़ाइल नाटकों (मैं यह करने के लिए मिडी फ़ाइल परिवर्तित कर दिया है मैं अगर वे दिखाई देते हैं जाँच वास्तव में करने के लिए एमपी 3 सरल रूपांतरण कार्यक्रम का उपयोग कर)

मैंने इस बारे में बहुत कुछ पढ़ा है कि सभी की गणना कैसे की जाती है, लेकिन अभी भी यह सही नहीं है कि मुझे इसे सही करने के लिए उपयोग करने की आवश्यकता है (टाइमलाइन * मायस्टरियस कॉन्स्टेंट = रीटाइम, मिस्टरियस कॉन्स्टेंट का मूल्य क्या है ? यह वास्तव में स्थिर है? और अगर नहीं मैं कैसे की गणना यह कैसे बदल रहा है?)

धन्यवाद एलन

उत्तर

8

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप मूल रूप से प्रत्येक MIDI नोट के लिए मिलीसेकंड मान में टिक को कन्वर्ट करना चाहते हैं ताकि आप समयरेखा के साथ दृश्यों को प्रदर्शित कर सकें।

तो सबसे पहले, आपको व्यक्तिगत टिक के मूल्य को निर्धारित करने के लिए विभाजन और टेम्पो का उपयोग करने की आवश्यकता है। यही कारण है कि रूपांतरण मूल रूप से लगता है कि:

[ 1 min 60 sec 1 beat  Z clocks ] 
| ------- * ------ * -------- * -------- | = seconds 
[ X beats 1 min Y clocks  1 ] 

तो, ऊपर रूपांतरण में, X गति है, Y विभाजन है, और Z भेजे घटना से घड़ियों की संख्या है। आप देख सकते हैं कि सभी इकाइयां कैसे रद्द होती हैं, जिससे आपको सेकंड में मूल्य मिल जाता है। जो रूपांतरण के संक्षिप्त संस्करण इसलिए है:

(60 * clocks)/(tempo * division) = seconds 

ध्यान रखें कि seconds में यहाँ दी मूल्य पिछले मिडी घटना के बाद से सेकंड की संख्या, अनुक्रम शुरू से ही नहीं है। एक सुसंगत अनुक्रम बनाने के लिए आपको इस मान का कुल रन रखना होगा।

+0

यह भी ध्यान रखें कि हालांकि विभाजन स्थिर है, इसलिए गति एमआईडीआई मेटा घटनाओं के माध्यम से बदल सकती है। भले ही आपने MIDI फ़ाइलों को स्वयं बनाया है, यह शायद कोई मुद्दा नहीं है। लेकिन आपको इसे ध्यान में रखना चाहिए और भविष्य में अपने सॉफ़्टवेयर को इसका समर्थन करने की आवश्यकता होने पर ही 'टेम्पो * डिवीजन' कैशिंग से बचें। –