मैंने पॉलीफोनिक संगीत पर पिच का पता लगाने में कई साल बिताए - जैसे कि एक एमपी 3 रिकॉर्डिंग के भीतर एक गिटार एकल के नोट्स का पता लगाना। मैंने विकिपीडिया पर एक खंड भी लिखा है जो प्रक्रिया का संक्षिप्त विवरण देता है (नीचे दिए गए लिंक में "पिच का पता लगाने" उपधारा देखें)।
जब एक एकल कुंजी को एक पियानो पर दबाया जाता है, तो जो हम सुनते हैं वह ध्वनि कंपन की केवल एक आवृत्ति नहीं है, बल्कि विभिन्न गणितीय रूप से संबंधित आवृत्तियों पर होने वाले कई ध्वनि कंपन का एक संयोजन है। विभिन्न आवृत्तियों पर कंपन के इस सम्मिश्रण के तत्वों को हार्मोनिक्स या धारावाहिक के रूप में जाना जाता है। उदाहरण के लिए, यदि हम पियानो पर मिडिल सी की दबाते हैं, तो कम्पोजिट के हारमोन्स की व्यक्तिगत आवृत्तियों को 261.6 हर्ट्ज पर मौलिक आवृत्ति के रूप में शुरू किया जाएगा, 523 हर्ट्ज दूसरा हार्मोनिक होगा, 785 हर्ट्ज 3 जी हार्मोनिक होगा, 1046 हर्ट्ज होगा 4 डी हार्मोनिक होना, आदि बाद के हार्मोनिक्स मौलिक आवृत्ति के पूर्णांक गुणक हैं, 261.6 हर्ट्ज (उदा: 2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046)।
मैं पीक स्तरों के साथ आवृत्तियों की तलाश करके (पहले आरेख देखें) संभव हार्मोनिक्स का पता लगाने के लिए एक संशोधित डीएफटी लॉगरिदमिक ट्रांसफॉर्म का उपयोग करता हूं। इस तरह से कि मैं अपने संशोधित लॉग डीएफटी के लिए डेटा इकट्ठा करता हूं, मुझे सिग्नल के लिए विंडिंग फ़ंक्शन लागू करने की आवश्यकता नहीं है, न ही जोड़ और ओवरलैप करें । और मैंने डीएफटी बनाया है, इसलिए इसके आवृत्ति चैनल लॉगरिदमिक रूप से सीधे उन आवृत्तियों के साथ संरेखित करने के लिए स्थित हैं जहां एक गिटार, सैक्सोफोन, आदि पर नोट्स द्वारा हार्मोनिक्स बनाए जाते हैं।
अब समाप्त किया जा रहा है, मैं कहा जाता है एक नि: शुल्क प्रदर्शन अनुप्रयोग के भीतर मेरी पिच का पता लगाने इंजन के लिए स्रोत कोड जारी करने के लिए फैसला किया है PitchScope प्लेयर । PitchScope Player वेब पर उपलब्ध है, और आप Windows के निष्पादन योग्य डाउनलोड को मेरे एल्गोरिथ्म को अपने चुनने के एमपी 3 फ़ाइल पर काम पर देख सकते हैं। GitHub.com का नीचे दिया गया लिंक आपको मेरे पूर्ण स्रोत कोड तक ले जाएगा जहां आप देख सकते हैं कि मैं कस्टम लॉगरिदमिक डीएफटी ट्रांसफॉर्म के साथ हारमोंस का पता कैसे लगा सकता हूं, और फिर ऐसे भाग (हार्मोनिक्स) खोजता हूं, जिनकी आवृत्तियों से सही एंगर संबंध संतुष्ट हो जाता है, जो 'परिभाषित करता है' पिच '।
मेरा पिच डिटेक्शन एलगोरिदम वास्तव में एक दो चरण की प्रक्रिया है: ए) पहले स्केलपेक का पता लगाया जाता है ('स्केलपाइच' में 12 संभावित पिच मान हैं: {ई, एफ, एफ #, जी, जी #, ए, ए #, बी, सी, सी #, डी। , D #}) b) और ScalePitch निर्धारित होने के बाद, फिर ऑक्टेव की गणना 4 संभावित ऑक्टेव-कैंडिडेट नोटों के सभी हार्मोनिक्स की जांच करके की जाती है। एल्गोरिथ्म को एक पॉलीफोनिक एमपी 3 फ़ाइल के भीतर किसी भी समय सबसे प्रमुख पिच (एक संगीत नोट) का पता लगाने के लिए डिज़ाइन किया गया है। यह आमतौर पर एक वाद्य एकल के नोटों से मेल खाती है। मेरे 2 स्टेज पिच डिटेक्शन एल्गोरिथ्म के लिए C ++ स्रोत कोड में रुचि रखने वाले लोग GitHub.com पर SPitchCalc.cpp फ़ाइल के भीतर Estimate_ScalePitch () फ़ंक्शन को शुरू करना चाहते हैं।
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
नीचे एक पॉलीफोनिक एमपी 3 रिकॉर्डिंग पर गिटार सोलो के 3 सेकंड के लिए एक लॉगरिदमिक डीएफटी (मेरे सी ++ सॉफ़्टवेयर द्वारा बनाई गई) की छवि है। यह दर्शाता है कि एकल खेलते समय गिटार पर व्यक्तिगत नोटों के लिए हारमोंस कैसे दिखाई देते हैं। इस लॉगरिदमिक डीएफटी पर प्रत्येक नोट के लिए हम इसके कई हार्मोनिक्स को लंबवत रूप से देख सकते हैं, क्योंकि प्रत्येक हार्मोनिक की एक ही समय-चौड़ाई होगी। नोट का ऑक्टेव निर्धारित होने के बाद, हम फंडामेंटल की आवृत्ति जानते हैं।
नीचे दिए गए आरेख में ऑक्टेव डिटेक्शन एल्गोरिदम दिखाया गया है, जिसे मैंने सही ऑक्टेव-कैंडिडेट नोट (यानी, सही फंडामेंटल) लेने के लिए विकसित किया है, एक बार उस नोट के लिए स्केल स्केल निर्धारित किया गया है। C ++ में उस विधि को देखने के इच्छुक लोगों को FundCandidCalcer.cpp नामक फाइल के अंदर Calc_Best_Octave_Candidate () फ़ंक्शन पर जाना चाहिए, जो GitHub में मेरे स्रोत कोड में निहित है।