ASCII स्कोर


27

अपने अस्थायी फ़ोल्डर की गहराई में चारों ओर खुदाई, आप पियानो के लिए कुछ रचनाएँ पाते हैं। दुर्भाग्य से, इन रचनाओं को केवल नोट नाम और अवधि के साथ लिखा गया था, और आपके पास केवल एक पाठ टर्मिनल तक पहुंच है। इसलिए, आपका कार्य ASCII कला के रूप में रचनाओं को प्रदर्शित करने के लिए एक कार्यक्रम लिखना है।

इनपुट

आपके प्रोग्राम को इनपुट के रूप में दो स्ट्रिंग्स को स्वीकार करना चाहिए। पहला स्ट्रिंग शीर्ष स्टाफ (तिगुना फांक के साथ) के नोटों का प्रतिनिधित्व करेगा, जबकि दूसरा स्ट्रिंग नीचे के कर्मचारियों के नोटों का प्रतिनिधित्व करेगा।

नोटों को वैज्ञानिक पिच संकेतन में पारित किया जाएगा । शीर्ष स्टाफ के नोट्स हमेशा बीच में C4और C6समावेशी होंगे। निचले कर्मचारियों के नोट हमेशा बीच में C2और C4समावेशी होंगे।

प्रत्येक नोट एक अवधि, जिनमें से एक हो जाएगा के साथ आ जाएगा: 1, 2, 4, 8। ये एक पूरे नोट (अर्धवृत्त), एक आधा नोट (न्यूनतम), एक चौथाई नोट (crotchet), और एक आठवें नोट (योग्यता) का प्रतिनिधित्व करते हैं।

किसी अन्य अवधि के नोट इनपुट में कभी नहीं दिखाई देंगे।

नोट और अवधि को कैसे अलग किया जाता है, और इनपुट में प्रत्येक नोट को अन्य नोटों से कैसे अलग किया जाता है, यह आपके विवेक पर निर्भर करता है। निम्नलिखित शीर्ष कर्मचारियों के लिए एक नमूना इनपुट है:

E4/4 A4/8 C#5/8 E5/2

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

आप मान सकते हैं कि प्रत्येक स्टाफ में कम से कम एक नोट है। इनपुट में कोई बाकी नहीं हैं।

उत्पादन

आपका कार्यक्रम निम्न विवरणों के अनुरूप स्कोर को ASCII कला के रूप में आउटपुट करना है।

आपके आउटपुट के बाईं ओर क्लीफ़ पहली चीज़ होनी चाहिए (दो सीढ़ियों के बीच की दूरी को नहीं बदला जाना चाहिए):

       ^    
      | |   
------|/----
      /     
-----/|-----
    / |     
---/--__----
   | /  \   
---\-\|-|---
    \ | /   
------|-----
      |     
    \_/     





----___-----
   /   \ |  
---\---|----
       | |  
-------/----
      /     
-----/------

------------

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

पूरे नोटों को छोड़कर सभी प्रकार के नोटों में तने होते हैं। आठवें नोट के झंडे को अलग-अलग रेखाओं पर दो फॉरवर्ड स्लैश द्वारा दर्शाया गया है (नीचे उदाहरण नोट देखें)।

नोट हेड (तिमाही और आठवें नोटों के लिए) में भरा हुआ है (@)। एक खाली नोट हेड (आधे और पूरे नोट के लिए) द्वारा दर्शाया गया है ( )

एक्सीडेंट (शार्प, फ्लैट्स, नैचुरल) को उदाहरण के नोट्स में दिखाया जाना चाहिए, जिसमें एक्सीडेंटल के दाईं ओर और नोट हेड के बाईं ओर के बीच के एक पात्र के साथ होता है।

जब आवश्यक हो, लेजर लाइनों का उपयोग किया जाना चाहिए और 7नोट हेड के चारों ओर केंद्रित लंबाई में वर्ण होना चाहिए ।

प्रत्येक नोट 12वर्ण विस्तृत होना चाहिए ।

उदाहरण नोट:

                                         |_                    
                                         |_| ( )                
                      |                    |------              
                      |                                         
------------ ---------|-- ------------ ------------ ------------
                      |                                         
------------ ---------|-- ---|-------- ------------ ------------
      (@)    _|_|_    |      |_                                 
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
     |        | |              |                             | \
-----|------ ------------ -----|------ ------------ ---------|--
     |                         |                             |  
-----|------ ------------ -----|------ ------------ ---------|--
     |                         | /                           | 
                               |/                       --(@)--

quarter note half note    eighth note  whole note   eighth note
              sharped      flatted      natural

12 वर्णों की टिप्पणी के बाद, छोड़ 2 * 12 - 12 = 12पात्रों खाली (या तो या -लाइन पर निर्भर करता है) करता है, तो ध्यान दें एक चौथाई नोट है। यदि नोट आधा नोट है, तो 4 * 12 - 12 = 36वर्ण खाली छोड़ दें । यदि नोट एक संपूर्ण नोट है, तो 8 * 12 - 12 = 84वर्णों को खाली छोड़ दें । आठवें नोट के लिए अतिरिक्त वर्ण न जोड़ें।

प्रत्येक माप के अंत में (96 अक्षर या तो क्लेफ या बार लाइन के बाद), एक बार लाइन आउटपुट। यह ऊपरवाला और नीचे-सबसे लाइनों (समावेशी) के बीच हर चरित्र को नीचे जाकर, और साथ |और -साथ प्रतिस्थापित करके किया जाता है +। (प्रश्न के नीचे उदाहरण आउटपुट देखें)।

टुकड़े के अंत में, एक पंक्ति में 3 बार लाइनों को आउटपुट करके संगीत का अंत होता है, लेकिन पहले और दूसरे के बीच की जगह के साथ। अर्थात्:

+-++
| ||
+-++
| ||
. .. 
. .. 

ध्यान दें कि माप के अंत तक शार्प, फ़्लैट और नैचल्स टिके रहते हैं। प्राकृतिक चिन्ह का उपयोग केवल उसी माप में पहले उपयोग किए गए तेज या फ्लैट को रद्द करने के लिए किया जाना चाहिए।

इस कार्य के उद्देश्य से, शार्प, फ़्लैट और नैचल्स केवल एक सप्तक में एक नोट को प्रभावित करते हैं, और एक फांक में (A5 पर एक शार्प को A4 को तेज नहीं किया जाता है, और शीर्ष स्टाफ में C4 पर एक फ्लैट पैदा नहीं होता है) सी 4 नीचे के कर्मचारियों में चपटा होना)।

केवल बोनस के लिए जानकारी

बोनस में आठवें नोट को ठीक से जोड़ना शामिल है।

जब दो लगातार आठवें नोट होते हैं, तो क्वार्टर नोट बीट (दूसरे शब्दों में, पहले आठवें नोट से पहले वर्णों की संख्या 24 के एक से अधिक होती है) के साथ संरेखित किया जाता है, दो आठवें नोटों को जोड़ा जाना है।

नोट A कर्मचारियों के बीच से दूर का नोट है। यदि दोनों नोट बीच से समान दूरी पर हैं, तो दोनों नोट हो सकते हैं । दूसरे नोट को B नोट होने दें ।

की दिशा दोनों उपजी टिप्पणी के स्टेम की दिशा में होना चाहिए एक

नोटों में से एक का तना 6लंबा होना चाहिए (जैसा कि सामान्य तौर पर तने के मामले में होता है), और दूसरे नोट के तने को दूसरे नोट के तने के अंत तक बढ़ाया जाना चाहिए।

उपजी के साथ जुड़ा होना चाहिए _

उदाहरण से जुड़े आठवें नोट:

                                   ___________                            
                                  |           |                           
                                  |           |                           
                                  |           |                           
                                  |           |       --(@)--             
                            |     |           |        |                  
------------------------ ---|_----|-----------|-- -----|------------------
                            |/ (@)            |        |        |_        
------------------------ ---------------------|-- -----|--------|_|-(@)---
      (@)   _|_|_                             |        |          ||      
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
     |       | | |                            |        |           |      
-----|-----------|------ ---------------------|-- -----|-----------|------
     |           |                            |        |           |      
-----|-----------|------ ------------------(@)--- -----|___________|------
     |           |                                                        
     |___________|                                                        

उदाहरण इनपुट और आउटपुट

इनपुट :

A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2

आउटपुट :

       ^                                                                                                                                                                                                                                                                                                                                                                                                                      
      | |            |                                                                                                |                                                                                                                                                                                                 |                                                                                          
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
      /              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           | \         | \         | \         | \|         |                       |                       |                                      | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
    / |              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           |           |           |           |  |         |                       |                       |                                      | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
   | /  \   _|_|_ (@)               _|_|_    |                       |                                      |_|_|_ (@)               _|_|_    |                       |                                      |         |           |           |           |  _|_|_    |           |           |           |  |_|_|_ (@)               _|_|_    |                       |                                      | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
    \ | /                            | |                    _|_|_ ( )                                       |                         | |                    _|_|_ ( )                                       |_|_|_ (@)         (@)         (@)         (@)    | |                                            |                         | |                    _|_|_ ( )                                       | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
      |                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
    \_/                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
            _|_|_                                                                                           |_|_|_                                                                                           |                                                                                                |                                                                                                | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
   /   \ |   | | |                  _|_|_ (@)               _|_|_                                           | | | |                  _|_|_ (@)               _|_|_                                           |_|_|_                                           _|_|_ ( )                                       |_|_|_                                                                                           | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
       | |       |                       |                   | | |                                          |     |                       |                   | | |                                          | | | |                                               |                                          | | | |                  _|_|_ (@)                    |                                          | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
      /          |                       |                       |                                          |     |                       |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                         |                       |                                          |                             |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                                                                                                                                                                                                                                                                                                                            |                                                                      

प्रदर्शन के लिए, तीसरे उपाय में, F#आठवें नोट जुड़े हुए हैं, जबकि G#आठवें नोट नहीं हैं। आपके कार्यक्रम को या तो जब भी लागू हो (बोनस के लिए) आठवें नोटों को जोड़ना चाहिए, या उन सभी को छोड़ देना चाहिए।

अन्य सूचना

  • व्हॉट्सएप / लाइनों की किसी भी राशि को स्वीकार्य है।
  • फांक से पहले कोई अतिरिक्त व्हाट्सएप नहीं होना चाहिए, न ही नोटों के बीच व्हाट्सएप। आउटपुट से पहले / बाद में किसी भी खाली लाइनों को उत्सर्जित किया जा सकता है।
  • आठवें नोट को जोड़ने के लिए बोनस स्रोत कोड के 0.75 * बाइट्स की संख्या है
  • यह , इसलिए सबसे छोटा कोड जीतता है।

आपने अपने किसी एक उदाहरण में मिडिल C (तिहरा क्लीफ़ मानकर) पर क्वालिफायर नहीं भरा है।
मुजेर

@Muzer धन्यवाद, निश्चित।
es1024

इसके अलावा, मुझे कहना होगा, क्या एक अद्भुत चुनौती है। मेरे पास इस समय एक प्रविष्टि लिखने का समय नहीं है, लेकिन मुझे यह देखने में बहुत दिलचस्पी है कि लोग क्या करते हैं। (पुनश्च: क्या यह बुरा है कि मैंने तुरंत धुन को पहचान लिया?))
मुजेर

@steveverrill आप सही हैं, ठीक किए गए हैं।
es1024

7
यह कमाल का है! कठिन, लेकिन भयानक।
kirbyfan64sos

जवाबों:


15

अजगर - 8.85 ... केबी ( 9369 9066 बी)

Haha! में सबसे तेज बंदूक ... पश्चिम?

यह ठीक से गोल्फ होने से एफएआर है, लेकिन यह कम से कम कार्य करता है। इसे पोस्ट करने के समय, यह सबसे छोटी प्रविष्टि है, इसलिए ... याय?

मुझे यह कहने से शुरू करें कि मैंने कभी भी इस चीज़ को बड़ा नहीं किया है, और मुझे यह भी पता नहीं है कि कहां से शुरू करें।

इस प्रविष्टि है नहीं अभी तक बोनस अंक होते हैं, लेकिन मैं अभी भी तरह जोड़ने के लिए चाहते हैं कि गोल्फ से पहले।

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

जब ट्रेबल और बास क्लिफ़ के लिए निम्नलिखित दो इनपुट दिए गए हैं:

A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2

निम्नलिखित आउटपुट परिणाम:

       ^                                                                                                                                                                                                                                                                                                                                                                                                           
      | |            |                                                                                                |                                                                                                                                                                                                 |                                                                                          
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+---------------------------------------------------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
      /              |                       |                       |                                      |         |                       |                       |                                      |         |\          |\          |\          |\          | \         | \         | \         | \|         |                       |                       |                                      | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-\---------|-\---------|-\---------|-\---------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
    / |              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           |           |           |           |  |         |                       |                       |                                      | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
   | /  \   _|_|_ (@)               _|_|_    |                       |                                      |_|_|_ (@)               _|_|_    |                       |                                      |         |           |           |           |  _|_|_    |           |           |           |  |_|_|_ (@)               _|_|_    |                       |                                      | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
    \ | /                            | |                    _|_|_ ( )                                       |                         | |                    _|_|_ ( )                                       |_|_|_ (@)         (@)         (@)         (@)    | |                                            |                         | |                    _|_|_ ( )                                       | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
      |                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
    \_/                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
            _|_|_                                                                                           |_|_|_                                                                                           |                                                                                                |                                                                                                | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
   /   \ |   | | |                  _|_|_ (@)               _|_|_                                           | | | |                  _|_|_ (@)               _|_|_                                           |_|_|_                                           _|_|_ ( )                                       |_|_|_                                                                                           | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------( )---------------------------------------+-++
       | |       |                       |                   | | |                                          |     |                       |                   | | |                                          | | | |                                               |                                          | | | |                  _|_|_ (@)                    |                                          | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
      /          |                       |                       |                                          |     |                       |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                         |                       |                                          |                             |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++

यहाँ कुछ अशुद्ध इनपुट कोड के साथ कोड का एक कार्यशील संस्करण है क्योंकि इस विशेष अजगर वेब आईडीई ने नकली इनपुट या अलग-अलग फ़ाइलों की अनुमति नहीं दी थी।

grandstaff.py

दोनों तिहरा और बास फांक कर्मचारियों को शामिल करता है, और दोनों के बीच बारलाइनों को खींचने का काम करता है।

class GrandStaff:
  def __init__(self, trebbleStr, bassStr):
    self.trebbleStr = trebbleStr
    self.bassStr = bassStr
    self.trebbleStaff = Staff("trebble", self.trebbleStr)
    self.bassStaff = Staff("bass", self.bassStr)
    self.bassOffset = 16

    self.lines = {}
    maxmin = self.trebbleStaff.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y] = self.trebbleStaff.lines[y]
    maxmin = self.bassStaff.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y + self.bassOffset] = self.bassStaff.lines[y]

    for y in range(5, 12):
      self.lines.setdefault(y, [" " for x in range(len(self.trebbleStaff.getLineStr(0)))])
      xpos = 0
      for block in self.trebbleStaff.getBlocks():
        if block.type == "barline":
          self.lines[y][xpos] = '|'
        elif block.type == "finalDoubleBarline":
          for x in [0, 2, 3]:
            self.lines[y][xpos + x] = '|'
        xpos += block.width

  def __str__(self):
    outstr = ""
    maxmin = sorted(self.lines.keys())
    for y in range(maxmin[0], maxmin[-1]):
      self.lines.setdefault(y, [" " for x in range(len(self.trebbleStaff.getLineStr(0)))])
      outstr += ''.join(self.lines[y]) + '\n'

        return outstr

staff.py

एक एकल स्टाफ। इसमें "ब्लॉक" ऑब्जेक्ट्स की एक सरणी होती है जो नोट्स, बारलाइन, क्लीफ़्स आदि का प्रतिनिधित्व करती है। यह क्लास उपयुक्त स्थानों पर नोट्स की स्पेसिंग और बारलाइन की प्रविष्टि को संभालती है।

class Staff:
  def __init__(self, clef, inputStr):
    self.clef = clef
    self.inStr = inputStr
    self.lines = {}
    self.__blocks = []
    if clef == "trebble":
      self.__blocks.append(Block("trebbleClef"))
    elif clef == "bass":
      self.__blocks.append(Block("bassClef"))

    notes = inputStr.split(" ");
    measureLength = 0
    for note in notes:
      if measureLength >= 1:
        self.__blocks.append(Block("barline"))
        measureLength -= 1
      parts = note.split("/")
      noteLength = 0
      if len(parts) == 2:
          noteLength += 1 / float(parts[1])
          measureLength += noteLength
      self.__blocks.append(Block("note", note, self.clef))
      for n in range(int(noteLength * 8) - 1):
          self.__blocks.append(Block("staff"))
    self.__blocks.append(Block("finalDoubleBarline"))

    sharps = []
    flats = []
    naturals = []
    for block in self.__blocks:
      if block.type == "note":
        val = block.value

        if block.isSharp:
          if val not in sharps:
            sharps.append(val)
          else:
            block.clearAccidental()
        elif block.isFlat:
          if val not in flats:
            flats.append(val)
          else:
            block.clearAccidental()
        else:
          if val in sharps:
            sharps.remove(val)
            block.setNatural()
          if val in flats:
            flats.remove(val)
            block.setNatural()

      elif block.type == "barline" or block.type == "finalDoubleBarline":
        sharps = []
        flats = []

    maxmin = self.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y] = list(self.getLineStr(y))

  def getLineStr(self, lineNum):
    outstr = ""
    for block in self.__blocks:
      outstr += block.getLineStr(lineNum)
    return outstr

  def getYExtremes(self):
    maxmin = [0, 0]
    for block in self.__blocks:
      mm = block.getYExtremes()
      maxmin[0] = mm[0] if mm[0] < maxmin[0] else maxmin[0]
      maxmin[1] = mm[1] if mm[1] > maxmin[1] else maxmin[1]
    return maxmin

  def getBlocks(self):
    return self.__blocks

  def __str__(self):
    maxmin = self.getYExtremes()
    outstr = ""
    for line in range(maxmin[0], maxmin[1] + 1):
      outstr += self.getLineStr(line) + "\n"
    return outstr

block.py

यह वर्ग ASCII पाठ के "प्रतिपादन" (या शायद रचना) को संभालता है। अंदर कठोर-कोडित प्रतीक हैं जैसे कि ट्रेबल और बास क्लीफ़्स, एक रिक्त कर्मचारी, बारलाइन, दुर्घटनाएं और विभिन्न अवधि के नोट्स बनाने के लिए आवश्यक टुकड़े। अंतिम ASCII ब्लॉक का निर्माण करने के लिए अनुक्रमिक क्रम में वर्ण "पिक्सेल" के 2 डी ग्रिड पर ये "तैयार" हैं।

class Block:

  __staff = [[range(-4, 5, 2),"w",'-']]
  __trebble = [[-6, 7, '^'], [range(-5, 6), 6, '|'], [-5, 8, '|'], [-4, 7, '/'], [-3, 6, '/'], [-2, 5, '/'], [-1, 4, '/'], [0, 3, '/'], [0, range(6,8), '_'], [1, 3, '|'], [1, 5, '/'], [1, 6, ' '], [1, 8, '\\'], [2, 3, '\\'], [2, 5, '\\'], [2, 8, '|'], [3, 4, '\\'], [3, 8, '/'], [6, 4, '\\'], [6, 5, '_'], [6, 6, '/']]
  __bass = [[-4, range(4, 7), '_'], [-3, 3, '/'], [-3, 7, '\\'], [range(-3, 0, 2), 9, '|'], [-2, 3, '\\'], [range(-2, 0), 7, '|'], [0, 7, '/'], [1, 6, '/'], [2, 5, '/']]
  __sharp = [[range(-1, 1), range(0, 5), '_'], [range(-1, 2), range(1, 4, 2), '|']]
  __flat = [[range(-2, 1), 3, '|'], [-1, 4, '_'], [0, 4, '/']]
  __natural = [[range(-1, 1), 2, '|'], [range(-1, 1), 3, '_'], [range(0, 2), 4, '|']]
  __noteOpen = [[0, 6, '('], [0, 7, ' '], [0, 8, ')']]
  __noteClosed = [[0, 6, '('], [0, 7, '@'], [0, 8, ')']]
  __stemUp = [[range(-6, 0), 9, '|']]
  __stemDown = [[range(1, 7), 5, '|']]
  __eighthTailUp = [[-6, 10, '\\'], [-5, 11, '\\']]
  __eighthTailDown = [[6, 6, '/'], [5, 7, '/']]
  __barline = [[range(-4, 5), 0, '+'], [range(-3, 4, 2), 0, '|']]
  __finalBarline = [[range(-4, 5, 2), [0, 2, 3], '+'], [range(-3, 4, 2), [0, 2, 3], '|'], [range(-4, 5, 2), 1, '-']]
  __staffExtender = [[0, range(4, 11), '-']]

  def __init__(self, type, notestr = "", clef = "trebble"):
    if type == "note":
      self.clef = clef
      self.notestr = notestr.upper().split('/')[0]
      self.duration = int(notestr.upper().split('/')[1])
      self.isSharp = True if notestr[1] == '#' else False
      self.isFlat = True if notestr[1] == 'b' else False
      self.isNatural = False;
      self.__clefCallibration = {"trebble":{"A":1,"B":0,"C":6,"D":5,"E":4,"F":3,"G":2,"octave":4}, "bass":{"A":-4,"B":-5,"C":1,"D":0,"E":-1,"F":-2,"G":-3,"octave":3}}
      self.value = self.__clefCallibration[self.clef][self.notestr[0]] + ((self.__clefCallibration[self.clef]["octave"] - int(self.notestr[-1])) * 7)

    self.lines = {}
    self.type = type

    self.__drawBlock()

  def __drawBlock(self):
    self.lines = {}
    if self.type == "note":
      self.width = 12
      self.__draw(self.__staff)

      for y in range(6, self.value + 1, 2):
        self.__draw(self.__staffExtender, y)
      for y in range(-6, self.value - 1, -2):
        self.__draw(self.__staffExtender, y)

      if self.duration in [1, 2]:
        self.__draw(self.__noteOpen, self.value)
      else:
        self.__draw(self.__noteClosed, self.value)

      if self.duration != 1:
        if self.value < 0:
          self.__draw(self.__stemDown, self.value)
          if self.duration == 8:
            self.__draw(self.__eighthTailDown, self.value)
        else:
          self.__draw(self.__stemUp, self.value)
          if self.duration == 8:
            self.__draw(self.__eighthTailUp, self.value)

      if self.isSharp:
        self.__draw(self.__sharp, self.value)
      elif self.isFlat:
        self.__draw(self.__flat, self.value)
      elif self.isNatural:
        self.__draw(self.__natural, self.value)

      # self.__draw(__staffExtender, self.value)
    elif self.type == "staff":
      self.width = 12
      self.__draw(self.__staff)
    elif self.type == "barline":
      self.width = 1
      self.__draw(self.__barline)
    elif self.type == "finalDoubleBarline":
      self.width = 4
      self.__draw(self.__finalBarline)
    elif self.type == "trebbleClef":
      self.width = 12
      self.__draw(self.__staff)
      self.__draw(self.__trebble)
    elif self.type == "bassClef":
      self.width = 12
      self.__draw(self.__staff)
      self.__draw(self.__bass)

  def __draw(self, data, yOffset = 0):
    for char in data:
        self.__drawChunk(char, yOffset)

  def __drawChunk(self, char, yOffset = 0):
      xrng = []
      yrng = []
      drawChr = char[2]

      if type(char[0]) == int:
        yrng = [char[0]]
      elif type(char[0]) == list:
        yrng = char[0]
      else:
        print("ERROR: invalid y range input")

      if type(char[1]) == str:
        if char[1] == 'w':
          xrng = range(self.width)
      elif type(char[1]) == int:
        xrng = [char[1]]
      elif type(char[1]) == list:
        xrng = char[1]
      else:
        print("ERROR: invalid x range input")

      yrng = [y + yOffset for y in yrng]

      for y in yrng:
        self.lines.setdefault(y,[" " for i in range(self.width)])
        for x in xrng:
          self.lines[y][x] = drawChr

  def getLineStr(self, lineNum):
    return "".join(self.lines.setdefault(lineNum, [" " for i in range(self.width)]))

  def getYExtremes(self):
    k = sorted(self.lines.keys())
    return [k[0], k[-1]]

  def setSharp(self):
    self.isSharp = True
    self.isFlat = False
    self.isNatural = False
    self.__drawBlock()

  def setFlat(self):
    self.isSharp = False
    self.isFlat = True
    self.isNatural = False
    self.__drawBlock()

  def setNatural(self):
    self.isSharp = False
    self.isFlat = False
    self.isNatural = True
    self.__drawBlock()

  def clearAccidental(self):
    self.isSharp = False
    self.isFlat = False
    self.isNatural = False
    self.__drawBlock()

  def __str__(self):
    strOut = ""
    first = sorted(self.lines.keys())[0]
    last = sorted(self.lines.keys())[-1]
    for line in range(first, last + 1):
        strOut += self.getLineStr(line) + "\n"
    return strOut

main.py

यह वर्ग बस ग्रैंडसॉफ्ट की एक आवृत्ति बनाकर कार्यक्रम को "रन" करता है, इसे दिए गए स्ट्रिंग इनपुटों को पारित करता है, और इसे स्ट्रिंग मान छापता है।

import sys
from block import *
from grandstaff import *
from staff import *

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