एक पिच बेंड (MIDI) मान को "सामान्य" पिच मान में परिवर्तित करना


11

मैं यहां दिए गए rt_lpc (वास्तविक समय LPC) कार्यान्वयन का उपयोग करके एक ऑफ़लाइन LPC विश्लेषण और संश्लेषण की कोशिश कर रहा हूं । कार्यक्रम के भीतर कुछ कार्य हैं जो एक ऑफ़लाइन एलपीसी विश्लेषण और संश्लेषण कार्यक्रम के लिए उपयोग किए जा सकते हैं। Rt_lpc कोड ज्यादातर कंपोजर्स आदि के लिए होता है, जिसका अर्थ है कि यह MIDI या ग्लोटल पल्स इनपुट का उपयोग करता है। कार्यक्रम में कुछ कोड है जो एक पिच मूल्य (ऑटो-सहसंबंध से प्राप्त) को मूल्य में परिवर्तित करता है bend। संबंध इस प्रकार है:

    pitch = (int)( Stk::sampleRate() / midi2pitch[ananya.data[1]] ) /
                            pow( 1.0653f, bend/64.0f*11.0f );
                    power *= ananya.data[2] / 64.0f;
bend = ge.data[1] / 128.0f + ge.data[2] - 64;

कुछ बिंदु:
ए। उस ananyaप्रकार की एक वस्तु है MidiMsgजो उड़ने पर आबाद होने लगती है।
ख। geएक प्रकार की वस्तु MidiMsgभी है जो उड़ने पर भी आबाद लगती है।
सी। जब प्रोग्राम वास्तविक समय में चलाया जाता है, तो ये दो ऑब्जेक्ट बनाए जाते हैं (मेरा एक ऑफ़लाइन संस्करण है जो मेरे खुद के एक main.cpp में इसके चुनिंदा भागों को चलाता है।

मेरा प्रश्न (प्रश्न):
1. पिच बेंड क्या है?
2. मैं पिच वैल्यू को बेंड वैल्यू में कैसे बदलूं? मानचित्रण संबंध क्या हैं?

मैंने समाधान के लिए गुगली की है, लेकिन कोई स्पष्ट जवाब नहीं मिला।

जवाबों:


12

मिडी के मूल में असतत नोट घटनाओं के रूप में संगीत का प्रतिनिधित्व है, जिनमें से प्रत्येक एक स्थिर पिच है। यह कीबोर्ड इंस्ट्रूमेंट्स पर खेले जाने वाले संगीत का प्रतिनिधित्व करने के लिए एकदम सही है। आप किसी भी आवृत्ति का उपयोग करके मिडी नोट संख्या में टेम्पर्ड स्केल पर नोट के अनुरूप परिवर्तित कर सकते हैं:

69+12×लॉग2आरक्षयूnसीy440

इस धारणा के तहत कि मिडी रिसीवर A4 = 440 हर्ट्ज के लिए कैलिब्रेटेड है।

यह प्रतिनिधित्व पियानो संगीत के लिए ठीक है, लेकिन समस्या यह है कि उन पिचों का प्रतिनिधित्व कैसे किया जाए, जो टेम्पर्ड स्केल (गैर-पश्चिमी संगीत, गैर-संगीत ध्वनियों) में मैप नहीं की जाती हैं, और एक नोट की अवधि में पिच विविधताओं का प्रतिनिधित्व कैसे करें (ग्लाइसेन्डो,) प्रकंपन)।

यह मिडी में "पिच बेंड संदेशों" का उपयोग करके किया जाता है जो सिंथेसाइज़र को छोटे अंतराल द्वारा वर्तमान में खेले गए नोट की पिच को शिफ्ट करने का निर्देश देता है। अधिकांश सिंथेसाइज़र पिच मोड़ संदेश रेंज (0 .. 16383) के दौरान डिफ़ॉल्ट रूप से +/- 2 सेमिट के लिए कैलिब्रेट किए जाते हैं। 8192 नो पिच झुकने से मेल खाती है - उत्सर्जित पिच नोट मूल्य के बिल्कुल समान है। पिच मोड़ मूल्य और आवृत्ति शिफ्टिंग अनुपात के बीच मानचित्रण निम्न द्वारा दिया जाता है:

मैंटीटी_nटीnटी_रोंरोंजी=2पीमैंटीसीn-81924096×12

आप निम्न फार्मूले से सिंथेसियर द्वारा खेले गए नोट की आवृत्ति प्राप्त कर सकते हैं:

440×2nटी-6912.0+पीमैंटीसीn-81924096×12

कहाँ टिप्पणी पिछले प्राप्त की 7-बिट मिडी टिप्पणी संख्या है पर ध्यान दें संदेश; और पिचबेंड अंतिम प्राप्त पिच मोड़ संदेश का 14-बिट मूल्य है । एक सिंथेसाइज़र अपने पिच बेंड रजिस्टर 8192 पर सेट के साथ शुरू होता है, और यह मान "सभी नियंत्रकों को रीसेट" संदेश के स्वागत के दौरान भी रीसेट किया जाता है।

आइए हम निम्नलिखित उदाहरण लें। आप निम्न आवृत्ति प्रक्षेपवक्र के साथ एक बांसुरी ट्रिल व्यक्त करना चाहते हैं: 500 हर्ट्ज, 510 हर्ट्ज, 500 हर्ट्ज, MIDI संदेशों के रूप में।

आधार नोट संख्या है:

आरयूn(69+12×लॉग2(500/440))=71

तो आप नोट # के साथ "नोट पर" संदेश # 71 के बराबर # भेजें। यह एक पिच के बराबर है:

440×2(71-69)/12=493.88

जो समशीतोष्ण पैमाने पर निकटतम पिच है। आपको एक कारक द्वारा पिच को बढ़ाने के लिए एक पिच मोड़ संदेश भेजने की आवश्यकता है:

500493.88=1.0124

और अपने 500 हर्ट्ज प्राप्त करें। संबंधित पिच मोड़ मूल्य है:

आरयूn(8192+4096×12×एलजी21.0124)=9065

आपका 510 हर्ट्ज प्राप्त करने के लिए, पिच मोड़ मूल्य होगा:

आरयूn(8192+4096×12×एलजी2510493.88)=10469

तो 500, 510, 500 हर्ट्ज के लिए MIDI संदेशों का आपका क्रम होगा:

  • नोट 71
  • PITCH BEND 9065
  • ...
  • पिट BEND 10469
  • ...
  • PITCH BEND 9065

आप मिडी नोट संख्या को पिच का "अभिन्न" भाग मान सकते हैं; और पिच एक बेमानी "आंशिक" पिच के रूप में झुकता है।


इसके अलावा, कोड की मेरी समझ से, जियो पिच मोड़ संदेश है; ge.data [2] इसका MSB और ge.data [1] इसका LSB है। अनन्या संदेश पर नोट है, अनन्या .डेटा [1] नोट संख्या है और अनन्यादता [2] वेग है। कायरता चर नामकरण के अलावा, जो कोड के लेखकों के बीच एक छिपे हुए रोमांस का आभास कराता है, मुझे यहां एक संभावित WTF दिखाई देता है: 1.0653f और 11.0f स्थिरांक में कुछ गड़बड़ है। एक पठनीय विकल्प होगा: 1.05946f और 12.0f। या 1.06504f और 11.0f। लेखकों को लगता है कि पिच का मोड़ रेंज +/- 1 ऑक्टेव है, जो कि एक अन्य संभावित डब्ल्यूटीएफ है।
pichenettes

"छिपा हुआ रोमांस" भाग पर ROTFL! मुझे नहीं लगता कि मैं इसे ठीक से समझ पाया हूं इसलिए मेरे साथ है। पिच मान फ़ंक्शन से प्राप्त होता है autocorrelate, जो मुझे ऐसा लगता है जैसे यह मिडी नोट है जो आउटपुट है। midi2pitchसूत्र में सरणी पर ध्यान दें ? यदि मैं सही हूं, तो इसका मतलब है कि मेरे पास अभी भी bendमोड़ के मूल्य का अनुमान लगाने के लिए पिच का मूल्य या वास्तविक मूल्य नहीं है, और उन्हें प्राप्त करने का कोई तरीका नहीं है जब तक कि मेरे पास मिडी फ़ाइल नहीं है। बहुत अधिक चर और बहुत कम समीकरणों का एक साधारण मामला। मैं velocityइस मामले में मोड़, वास्तविक पिच मूल्य और अनुमान कैसे लगा सकता हूं ?
श्रीराम

तुम क्या करने की कोशिश कर रहे हो? एक पिच / पावर जोड़ी को MIDI संदेशों में बदलें? या मिडी डेटा को वास्तविक पिच में परिवर्तित करें? ऊपर दिया गया कोड आने वाले मिडी नोट + पिच बेंड संदेशों (अनन्या संदेश, जीई संदेश) की एक जोड़ी को एक अवधि (पिच चर) और एक शक्ति (पावर चर) में परिवर्तित करता है। मुझे लगता है कि इसका उपयोग LPC उत्तेजना को मिडी कीबोर्ड द्वारा नियंत्रित सिंथेटिक - क्रूड वोडर या ऑटोट्यून प्रभाव के एक प्रकार द्वारा प्रतिस्थापित करने के लिए किया जाता है।
पेचिनेट्स

rt_lpc.cpp पर एक त्वरित नज़र इस बात की पुष्टि करती है कि टाइप 0xe0 (PITCH BEND) के आने वाले MIDI संदेश पिच मोड़ मान को अपडेट कर रहे हैं; और आने वाले MIDI प्रकार 0x90 (नोट चालू) के संदेश "अनन्या" संदेश में कॉपी किए जाते हैं। वहां से, इन मूल्यों का उपयोग करके एक संशोधित पिच का उपयोग करके पुनरुत्थान किया जाता है। निश्चित नहीं है कि आप वहां से क्या करना चाहते हैं।
pichenettes

1
हां, रचनात्मक संकेत परिवर्तन के लिए मिडी इनपुट यहां पूरी तरह से अलग चीज है। यह सामान्य LPC विश्लेषण / संश्लेषण श्रृंखला का हिस्सा नहीं है; लेकिन इसके बजाय विश्लेषण मॉड्यूल द्वारा उत्पादित के बजाय कुछ मापदंडों (पिच और शक्ति) को कीबोर्ड से पढ़ने की अनुमति देता है। हो सकता है कि आप ऑडियो फाइलों के कुछ उदाहरणों के साथ एक नया प्रश्न पोस्ट कर सकें, और हर्ट्ज में पिच प्रक्षेपवक्र निकाला जा सके, ताकि हम आपको अधिक मजबूत पिच अनुमान तकनीकों के लिए उन्मुख कर सकें। ऑबियो लाइब्रेरी में पिच ट्रैकर के कुछ संस्करण हैं।
pichenettes

6

MIDI एक ऐसा प्रोटोकॉल है जो (मुख्य रूप से) सिंथेसाइज़र को अन्य सिंथेसाइज़र या कंप्यूटर द्वारा नियंत्रित या नियंत्रित करने की अनुमति देता है।

यह एक सीरियल प्रोटोकॉल है जो "कुंजी C1 अप" "कुंजी D4 डाउन" "कुंजी वेग," ध्वनि परिवर्तन "जैसे संदेशों का आदान-प्रदान करने की अनुमति देता है। कई नियंत्रकों में एक" पिच व्हील "है जो जॉयस्टिक या एम्यूलेशन व्हील है। ये खिलाड़ी को इंटरेक्टिव रूप से बदलने के लिए खेले जा रहे वर्तमान नोट की पिच को मैन्युअल रूप से वाइब्रेटो बनाने के लिए या एक से दूसरे में लगातार "स्लाइड" बनाने के लिए। जैसा कि अक्सर गिटार खिलाड़ियों द्वारा अपने बाएं हाथ के साथ झल्लाहट स्ट्रिंग को झुकाकर किया जाता है, इसे अक्सर कहा जाता है। पिच झुकने और इसलिए नाम।

मिडी पिच बेंड संदेश यह बताने का एक तरीका है कि किसी भी समय बिंदु पर कितना पिच शिफ्टिंग होना चाहिए। एक सिंथेसाइज़र (सॉफ़्टवेयर या हार्डवेयर) एक पिच मोड़ संदेश प्राप्त करने वाला है जो दी गई राशि द्वारा खेले जा रहे सभी वर्तमान नोटों की पिच को बदलने के लिए है।

नियंत्रक संदेश में एक तर्क है जो -8192 से 8191 तक जाता है और मानक मिडी फ़ाइलों में यह -200 प्रतिशत से 200 प्रतिशत तक की सीमा को कवर करने वाला है, जहां 1 प्रतिशत सेमीटोन का 1/100 है, अर्थात 2 ^ का अनुपात ( 1/1200) = 1.000577789506555 उदाहरण: नाममात्र आवृत्ति का 93% प्राप्त करने के लिए नीचे की ओर पिच शिफ्ट बनाने के लिए, नियंत्रक मूल्य होगा

c = round(log2(.93)*12*8192/2);

या -5146 इस मामले में। 0.93 वह अनुपात है जो आप चाहते हैं, 12 प्रति सेमीवेट की संख्या, 2 अधिकतम पिच बेंड रेंज (इस मामले में 200 सेंट या 2 सेमीटोन), और लॉग 2 () आधार 2 के साथ लघुगणक।

हालांकि, अधिकांश सिंथेसाइज़र में श्रेणी कॉन्फ़िगर करने योग्य है और यह मानने के लिए शायद यह एक अच्छा विचार नहीं है कि सभी सिंथेसाइज़र समान व्यवहार करते हैं।

यहां एक रूपांतरण चार्ट है जो मदद कर सकता है। http://www.elvenminstrel.com/music/tuning/reference/pitchbends.shtml

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.