2009-01-22 13 views
10

नियमित मानक नोटेशन में लिखे गए एक उपकरण के लिए आप एक साधारण संगीत स्कोर कैसे मॉडल करेंगे? निश्चित रूप से वहां बहुत सारे पुस्तकालय हैं जो वास्तव में ऐसा करते हैं। मैं डेटा संरचना में संगीत का प्रतिनिधित्व करने के विभिन्न तरीकों के बारे में अधिक उत्सुक हूं। क्या अच्छा काम करता है और क्या नहीं करता?आप डेटा संरचना में संगीत का प्रतिनिधित्व कैसे करते हैं?

गतिशीलता जैसे कुछ ट्रिकियर पहलुओं को अनदेखा करना, स्पष्ट तरीका ऑब्जेक्ट्स में सबकुछ का शाब्दिक अनुवाद होगा - उपायों का एक उपाय नोट्स से बना है। संश्लेषण, मुझे लगता है, प्रत्येक नोट के प्रारंभ/समाप्ति समय और साइन लहरों को मिलाकर इसका मतलब होगा।

क्या स्पष्ट तरीका एक अच्छा तरीका है? ऐसा करने के अन्य तरीके क्या हैं?

+0

यह एक बहुत ही रोचक कार्यक्रम हो सकता है। यदि आप अपना "स्कोर" ऑब्जेक्ट लेते हैं और फिर लागू संगीत सिद्धांत "नियम" (मेरे पास संगीत सिद्धांत में नाबालिग है) तो आप संभावित रूप से कुछ प्रकार के संगीत जनरेटर बना सकते हैं ... साफ होगा ... मुझे यकीन है कि यह हो गया है । – Nope

+1

@ कैसी: यह दस लाख बार किया गया है, लेकिन कभी भी अच्छा नहीं। – MusiGenesis

+0

@MusiGenesis ... यही मुझे लगा। ओह ठीक है, यह अभी भी कोशिश करने के लिए मजेदार होगा। – Nope

उत्तर

5

एमआईडीआई फाइलें ऐसा करने का सामान्य तरीका होगा।MIDI संगीत नोट्स के बारे में डेटा संग्रहीत करने के लिए एक मानक प्रारूप है, जिसमें प्रारंभ और समाप्ति समय, नोट वॉल्यूम, जिस उपकरण पर खेला गया है, और विभिन्न विशेष विशेषताएं शामिल हैं; आप, प्रत्येक नोट के लिए एक वस्तु होने से पढ़ने और फ़ाइलों लेखन और सरणियों या वस्तुओं के मामले में उन में डेटा का प्रतिनिधित्व करने के लिए prewritten पुस्तकालयों (कुछ खुला स्रोत सहित) के बहुत सारे पा सकते हैं, हालांकि वे आम तौर पर यह मत करो जो होगा बहुत मेमोरी ओवरहेड तक जोड़ें।

एमआईडीआई में परिभाषित यंत्र 1 से 128 तक की संख्या हैं जिनके पास प्रतीकात्मक नाम हैं, जैसे वायलिन या तुरही, लेकिन एमआईडीआई स्वयं कुछ भी नहीं कहता है कि उपकरणों को वास्तव में क्या करना चाहिए। यह एक सिंथेसाइज़र का काम है, जो उच्च स्तरीय MIDI डेटा को ध्वनि में परिवर्तित करता है। सिद्धांत रूप में, हां, आप साइन लहरों को सुपरपोज़ करके कोई आवाज बना सकते हैं, लेकिन यह अभ्यास में अच्छी तरह से काम नहीं करता है क्योंकि जब आप समानांतर में कुछ ट्रैक खेलते हैं तो यह कम्प्यूटेशनल रूप से गहन हो जाता है; एक साधारण फूरियर स्पेक्ट्रम (साइन लहरों की सापेक्ष तीव्रता) भी पर्याप्त नहीं है जब आप किसी साधन की वास्तविक ध्वनि को पुन: पेश करने की कोशिश कर रहे हैं और इसे मानव के व्यक्तित्व की अभिव्यक्ति की कोशिश कर रहे हैं। (मैं एक साधारण सिंथेसाइज़र लिखा है तो मैं मुश्किल यह एक सभ्य ध्वनि उत्पन्न हो सकता है सिर्फ इतना है कि ऐसा करने के लिए) डीएसपी (डिजिटल सिग्नल प्रोसेसिंग) वहाँ अनुसंधान के एक बहुत संश्लेषण के विज्ञान के क्षेत्र में किया जा रहा है, और अधिक आम तौर पर है, तो आप चाहिए यदि आप चाहें तो इसके बारे में पढ़ने के लिए निश्चित रूप से बहुत सारी किताबें और वेब पेज ढूंढ पाएंगे।

इसके अलावा, इस केवल ऊपरी तौर पर क्या प्रश्न से संबंधित हो सकता है, लेकिन आप ChucK कहा जाता है एक ऑडियो प्रोग्रामिंग भाषा में रुचि हो सकती है। यह प्रोग्रामिंग और संगीत के चौराहे पर लोगों द्वारा डिजाइन किया गया था, और आप शायद इसके साथ खेलकर ध्वनि संश्लेषण की वर्तमान स्थिति का एक अच्छा विचार प्राप्त कर सकते हैं।

+1

एमआईडीआई के पास इसके चारों ओर निर्मित कई पुस्तकालय हैं, लेकिन यह वास्तव में पुरातन प्रारूप है जो 70 के दशक के युग उपकरणों की तकनीकी सीमाओं के आसपास बनाया गया था। इसकी भयानकता के एक उदाहरण के रूप में, किसी विशेष नोट के लिए चालू और बंद नोट के दो गुणों की बजाय दो अलग-अलग घटनाओं के रूप में संग्रहीत किया जाता है ... – MusiGenesis

+0

... इसलिए यदि आप नोट की लंबाई बदलना चाहते हैं, तो आपको खोजना होगा नोट-ऑफ इवेंट और इसे ले जाएं। इसके अलावा, मिडी माइक्रो-ट्यूनिंग को बहुत अच्छी तरह से संभाल नहीं सकता है, इसलिए गैर-पश्चिमी पैमाने संरचनाएं वास्तव में संभव नहीं हैं। – MusiGenesis

+1

... लेकिन MusiGenesis, निश्चित रूप से ऑफ इवेंट अलग है, क्योंकि आपके MIDI कीबोर्ड को नोट जारी करने से पहले ईवेंट को भेजना पड़ता है, जो शायद कुछ समय के लिए नहीं हो सकता है।लेकिन मैं मानता हूं कि मिडी मानक शायद ही नहीं है जिसे हम अब शुरू करने का मौका देते हैं। –

2

हम्म, मजेदार समस्या।

दरअसल, मैं इसे कंपोजिट के साथ कमांड पैटर्न में बदलने का लुत्फ उठाऊंगा। यह सामान्य ओओ दृष्टिकोण को अपने सिर पर बदल रहा है, क्योंकि आप एक अर्थ में हैं जो संज्ञाओं के बजाय मॉडलिंग ऑब्जेक्ट क्रियाएं बनाते हैं। यह इस तरह होगा:

एक नोट एक विधि है, play(), and a ctor taking लंबाई and स्वर 'के साथ एक वर्ग है।

आपको एक उपकरण की आवश्यकता है जो synth के व्यवहार को परिभाषित करता है: timbre, हमले, और इसी तरह।

फिर आप एक स्कोर है, जो एक TimeSignature है है, और एक समग्र उपाय युक्त पैटर्न है; उपाय में नोट्स होते हैं।

वास्तव में खेल रहे हैं यह कुछ अन्य बातों के, पुनर्प्रसारण और Codas की तरह है, जो अन्य कंटेनरों हैं व्याख्या का मतलब है। इसे खेलने के लिए, आप समग्र की पदानुक्रमिक संरचना की व्याख्या करते हैं, एक कतार में एक नोट डालना; चूंकि नोट्स tempi के आधार पर कतार के माध्यम से स्थानांतरित होते हैं, प्रत्येक नोट में play() विधि कहा जाता है।

हमम, उसमें उलटा हो सकता है; प्रत्येक नोट को उपकरण के इनपुट के रूप में दिया जाता है, जो आवश्यक रूप से तरंग रूप को संश्लेषित करके इसका अर्थ देता है। यह आपकी मूल योजना की तरह कुछ वापस आता है।

अपघटन करने के लिए एक और दृष्टिकोण Parnas 'कानून लागू करने के लिए है: आप गुप्त स्थानों पर जहां आवश्यकताओं को बदल सकता है रखने के लिए विघटित। लेकिन मुझे लगता है कि एक समान अपघटन के साथ समाप्त होता है; आप समय हस्ताक्षर और ट्यूनिंग बदल सकते हैं, आप उपकरण बदल सकते हैं --- यदि आप इसे वायलिन, पियानो या मारिम्बा पर खेलते हैं तो नोट परवाह नहीं है।

दिलचस्प समस्या।

2

मेरा संगीत रचना सॉफ्टवेयर (लिंक के लिए मेरी प्रोफाइल देखें) (स्थिति, लंबाई, मात्रा, संतुलन, रिहाई अवधि आदि शुरू करने की तरह गुणों के साथ) प्राथमिक इकाई के रूप में नोट्स का उपयोग करता है। नोट्स पैटर्न में समूहित होते हैं (जिनके पास अपनी शुरुआती स्थिति और पुनरावृत्ति गुण होते हैं) जिन्हें ट्रैक में समूहीकृत किया जाता है (जिनके पास अपना स्वयं का उपकरण या यंत्र होता है)।

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

7

कई नए आम पश्चिमी संगीत अंकन प्रोजेक्ट कर लोगों को एक प्रारंभिक बिंदु के रूप MusicXML का उपयोग करें। यह संगीत नोटेशन का एक पूर्ण प्रतिनिधित्व प्रदान करता है जिसे आप अपनी आवश्यकताओं को पूरा करने के लिए सबसेट कर सकते हैं। अब एक एक्सएसडी स्कीमा परिभाषा है जो प्रोजेक्स संगीत का उपयोग करती है जैसे MusicXML ऑब्जेक्ट मॉडल बनाने के लिए। प्रॉक्सीम्यूजिक जावा में इन्हें बनाता है, लेकिन आप अन्य भाषाओं में अन्य एक्सएमएल डेटा बाइंडिंग टूल्स के समान कुछ करने में सक्षम होना चाहिए।

के रूप में एक MusicXML ग्राहक डाल दिया:

"MusicXML पर अपनी कड़ी मेहनत के सभी का एक बहुत ही महत्वपूर्ण लाभ जहाँ तक मैं चिंतित हूँ कि मैं एक स्पष्ट, संरचित और बहुत 'वास्तविक दुनिया के रूप में उपयोग है व्यावहारिक 'मेरे संगीत के आंतरिक डेटा संरचनाओं को डिजाइन और कार्यान्वित करने के लिए' संगीत का विनिर्देश 'है।

नहीं है और अधिक जानकारी उपलब्ध - XSDs और DTDs, नमूना फ़ाइलें, एक ट्यूटोरियल, समर्थित आवेदनों की एक सूची, प्रकाशन की एक सूची है, और अधिक -

http://www.makemusic.com/musicxml

पर मिडी एक बहुत अच्छा नहीं है मानक नोटेशन में एक साधारण संगीत स्कोर के लिए मॉडल। एमआईडीआई में संगीत नोटेशन की कई बुनियादी अवधारणाओं की कमी है। इसे एक प्रदर्शन प्रारूप के रूप में डिजाइन किया गया था, नोटेशन प्रारूप नहीं।

ऐसा नहीं है कि संगीत अंकन श्रेणीबद्ध नहीं है सच है। चूंकि एक्सएमएल पदानुक्रमित है, इसलिए MusicXML गैर-पदानुक्रमित जानकारी का प्रतिनिधित्व करने के लिए जोड़े गए स्टार्ट-स्टॉप तत्वों का उपयोग करता है। एक मूल डेटा संरचना चीजों को अधिक सीधे प्रस्तुत कर सकती है, जो एक कारण है कि MusicXML डेटा संरचना के लिए एक प्रारंभिक बिंदु है।

संगीत नोटेशन का प्रतिनिधित्व करने का एक और सीधा तरीका है जो इसके साथ-साथ क्षैतिज और ऊर्ध्वाधर संरचना को कैप्चर करता है, Humdrum प्रारूप को देखें, जो स्प्रेडशीट/जाली मॉडल का अधिक उपयोग करता है। Humdrum विशेष रूप से संगीत विज्ञान और संगीत विश्लेषण अनुप्रयोगों में प्रयोग किया जाता है जहां इसकी डेटा संरचना विशेष रूप से अच्छी तरह से काम करता है। डेटा संरचना में

+0

MusicXML का उपयोग करने के बारे में अच्छी बात यह है कि आप संगीत को कई मौजूदा टूल में आयात कर सकते हैं जो MusicXML का उपयोग कैसे करें। –

3

संगीत, मानक संकेत, ...

लगता है जैसे आपको LilyPond में रुचि होगी।

संगीत नोटेशन के बारे में अधिकतर चीजें लगभग पूरी तरह से यांत्रिक हैं (संकेतों के जटिल, गैर-तुच्छ भागों के लिए भी नियम और दिशानिर्देश हैं), और लिलीपॉन्ड उन सभी यांत्रिक पहलुओं का ख्याल रखने का एक सुंदर काम करता है। जो बचा है वह इनपुट फाइल है जो किसी भी टेक्स्ट एडिटर में लिखना आसान है। पीडीएफ के अलावा, लिलीपॉन्ड मिडी फाइल भी बना सकता है।

यदि आपको ऐसा लगता है कि आप एक प्रोग्राम के साथ टेक्स्ट फाइलें उत्पन्न कर सकते हैं और लिलीपॉन्ड को इसे नोटेशन में परिवर्तित करने और आपके लिए मिडी फ़ाइल को कॉल करने के लिए कॉल कर सकते हैं।

मुझे संदेह है कि आप लिलीपॉन्ड के लिए इनपुट फ़ाइल की तुलना में संगीत व्यक्त करने के लिए एक और पूर्ण और संक्षिप्त तरीका ढूंढ सकते हैं।

कृपया समझते हैं कि संगीत और संगीत के अंकन श्रेणीबद्ध नहीं है और (अच्छी तरह से) मॉडल नहीं बनाया जा सकता है श्रेणीबद्ध सोच का कड़ाई से पालन द्वारा। उस विषय पर mor जानकारी के लिए Read this

मज़े करो!

1

किसी मॉडल की उपयोगिता का मूल्यांकन किसी दिए गए संदर्भ में ही किया जा सकता है। आप इस मॉडल के साथ क्या करने की कोशिश कर रहे हैं?

कई उत्तरदाताओं ने कहा है कि संगीत गैर-श्रेणीबद्ध है। मैं इसके साथ सहमत हूं, लेकिन इसके बजाय सुझाव देता है कि संगीत को कई अलग-अलग दृष्टिकोणों से पदानुक्रमित रूप से देखा जा सकता है, प्रत्येक एक अलग पदानुक्रम को जन्म देता है। हम इसे आवाजों की एक सूची के रूप में देखना चाह सकते हैं, जिनमें से प्रत्येक में ऑन/ऑफ/वेग/आदि गुणों के साथ नोट्स हैं। या हम इसे हार्मोनिक विश्लेषण के उद्देश्य के लिए लंबवत sonorities के रूप में देखना चाहते हैं। या हम इसे contrapuntal विश्लेषण के लिए उपयुक्त तरीके से देखना चाहते हैं। या कई अन्य संभावनाएं। इससे भी बदतर, हम इसे एक ही उद्देश्य के लिए इन अलग-अलग दृष्टिकोणों से देखना चाहते हैं।

, प्रजातियों सुर पैदा सद्भाव और टोनल केन्द्रों, और कई अन्य चीजों का विश्लेषण करने के प्रयोजनों के लिए संगीत मॉडल करने के लिए कई प्रयास किए, मैं लगातार संगीत की अनिच्छा से निराश कर दिया है मेरे मॉडलिंग कौशल को उपज के लिए। मुझे लगता है कि सबसे अच्छा मॉडल संबंधपरक हो सकता है, बस बड़ी हद तक, डेटा के संबंधपरक मॉडल के आधार पर मॉडल उपयोग के संदर्भ के बारे में एक दृष्टिकोण नहीं लेते हैं। हालांकि, यह कहीं और समस्या को कहीं और दबा सकता है।

+0

हालांकि यह आपके विचारों के बारे में एक अच्छा पाठ है, मुझे नहीं लगता, यह ओपीएस सवाल पूछता है – user1781290

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