पचेलबेल के कैनन में से कुछ खेलते हैं


29

निम्नलिखित पचेलबेल के कैनन से डी के रूप में निम्नलिखित अंश को ऑडियो के रूप में प्रस्तुत करें:

पचेलबेल के कैनन इन डी

नियम

  • किसी भी प्रारूप / एन्कोडिंग का उपयोग किया जा सकता है, जब तक कि इस चुनौती के निर्माण से पहले एक कोडेक मौजूद था
  • किसी भी उपकरण (एक वास्तविक उपकरण, मिडी संश्लेषण आदि) का उपयोग किया जा सकता है
  • टेम्पो 65 बीपीएम होना चाहिए (जैसा कि शीट संगीत में नोट किया गया है) - यदि आप ठीक से 65 बीपीएम नहीं प्राप्त कर सकते हैं, तो आप (समावेशी) सीमा 64.75 - 65.25 के भीतर किसी भी टेम्पो का उपयोग कर सकते हैं
  • शीट संगीत संगीत कार्यक्रम की पिच में है
  • समान स्वभाव वाली ट्यूनिंग का उपयोग किया जाना चाहिए (विशेष रूप से A4- 440 Hz के साथ 12-ET)

संदर्भ के लिए, यहाँ एक स्टैक स्निपेट है जो अंश को बजाएगा:


क्या वह स्निपेट प्रतिस्पर्धी होगा, क्योंकि वह इसे कहीं और से डाउनलोड करता है
ब्लू

4
@ मड्डीफिश नं, क्योंकि बाहरी स्रोत से आउटपुट प्राप्त करना एक मानक खामिया है।
Mego

ऑडियो के बजाय मिडी फ़ाइल का उत्पादन स्वीकार्य होगा?
DJMcMayhem

@DJMcMayhem हां, मिडी फाइलें स्वीकार्य हैं।
मेघो

मुझे लगता है कि अंतिम (केवल) राग पूर्ण में आवश्यक है? यह गैर-पॉलीफोनिक भाषाओं / एपीआई के
लेवल रिवर सेंट

जवाबों:


9

जावास्क्रिप्ट (ईएस 7), 249 242 241 बाइट्स

with(new AudioContext)for(t=i=0;n=parseInt('l43l431db98643o86ogfdbdfdgfdzbdzgigikigfdbzbdv98db9864311480'[i++],36);)with(createOscillator())frequency.value=880*2**(-~-n%20/12),connect(destination),start(t),stop(i>56?t+q*8:t+=n>20?q=6/13:q/2)

कुछ बाइट बचत के लिए @Neil और @PatrickRoberts को धन्यवाद!

व्याख्या

अंकन को स्ट्रिंग में पैक किया जाता है जहां प्रत्येक वर्ण आधार -36 अंक के रूप में एकल नोट होता है। नोट मान उस सूत्र द्वारा निर्धारित किए जाते हैं, (19 - pitch) * time + 1जहां pitchA5 से कम संख्या वाले सेमिटोन्स की संख्या होती है और timeयह 1एक विशेषांक के लिए या एक योग्यता के 20लिए होती है। 0अंत में बंद हो जाता है forपाश।

टेम्पो 65.22bpm है संपादित करें: अब 65bpm पर, 2 और बाइट्स के लिए

यह व्याख्या / डेमो ब्राउज़र संगतता के Math.powबजाय उपयोग करता **है। यह ऑसिलेटर्स का लाभ भी निर्धारित करता है .3ताकि अंतिम कॉर्ड आपके कानों से खून न निकले (डिफ़ॉल्ट लाभ है 1)।

with(new AudioContext)            // use HTML5 audio
  for(                            // iterate through the note pitches and lengths
    t=i=0;                        // t = current time to place the note
    n=parseInt(                   // n = note pitch/length

      // Packed notation string
      'l43l431db98643o86ogfdbdfdgfdzbdzgigikigfdbzbdv98db9864311480'

    [i++],36);
  )
    with(createOscillator())      // create the note oscillator

      // Set the note frequency (using Math.pow for the demo).
      //frequency.value=880*2**(-~-n%20/12),
      frequency.value=880*Math.pow(2,-~-n%20/12),

      // Send the note's sound through the speakers (for the demo, we'll connect it to
      // a gain node so we can reduce the volume).
      //connect(destination),
      connect((g=createGain(),g.gain.value=.3,g.connect(destination),g)),

      start(t),                     // schedule the note to sound
      stop(                         // schedule the end of the note
        i>56?                       // if we are in the final chord
          t+                        //   do not increment the time
            q*8                     //   hard-code the length to a semibreve
        :t+=n>20?q=6/13:q/2         // else update the length based on the note value
      )

आप एचटीएमएल 5 वेब ऑडियो एपीआई का समर्थन करने वाले किसी भी ब्राउज़र में इसका परीक्षण करने के लिए ऊपर दिए गए बटन को दबा सकते हैं ।


880*2**(-~-n%20/12)आपको कुछ बाइट्स बचानी चाहिए।
नील

@ नील धन्यवाद। मुझे संदेह है कि मैं -~-अपने नोट पैकिंग के प्रारूप में फेरबदल करके भी छुटकारा पा सकता हूं ( + 1सूत्र में केवल यही है क्योंकि मुझे लूप 0को रोकने की आवश्यकता है forऔर मैं पोस्ट करने से पहले इसके बारे में सोचने के लिए बहुत आलसी था)।
user81655

देखा इसके बाद मैंने अपना जवाब पोस्ट किया, lol
पैट्रिक रॉबर्ट्स

आप की जगह एक और बाइट बचा सकता है c=new AudioContext;के साथ with(new AudioContext)की और दो घटनाओं को हटाने के c.कार्यक्रम में।
पैट्रिक रॉबर्ट्स

1
@ kamoroso94 सं। घातांक एक अंश हो सकता है, इसलिए यदि मैंने इसका उपयोग किया <<है तो यह एक पूर्णांक तक ले जाएगा।
user81655

8

गणितज्ञ, 212 152 139 135 बाइट्स

{#~(s=##~SoundNote~41&)~1&/@LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu",{14,18,21}~s~16}~Sound~18.5

Soundजब प्ले बटन दबाया जाता है तो पचेलबेल के कैनन की भूमिका निभाने वाली वस्तु को आउटपुट करता है। यह उपकरण मिडी साधन # 41 "वायलिन" है।

ऑडियो

मुझे क्लिक करें!

व्याख्या

LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu"

स्ट्रिंग में प्रत्येक वर्ण के अक्षर संख्याओं का पता लगाएं ("ए -> 1," बी "-> 2, और इसी तरह), एक से लिपटे List। (यह स्ट्रिंग डी में पचेलबेल के कैनन का प्रतिनिधित्व करता है)

#~(s=##~SoundNote~41&)~1&/@...

कार्य sकरने के लिए सेट करें SoundNoteजिसका उपकरण # 41 है। 1 तक की अवधि निर्धारित करें और प्रत्येक तत्व में कार्य करें List(इस प्रकार SoundNoteआदिम वस्तुएं बनाते हुए )।

{14,18,21}~s~16

अंतिम त्रयोदशी करें। (अवधि 16अंतिम नोट को 16 गुना लंबा बनाने के लिए है - एक पूरा नोट सोलहवां नोट सोलह गुना है।)

... ~Sound~18.5

एक Soundवस्तु बनाओ , 18.5सेकंड सेकंड (क्योंकि टेम्पो 65 बीपीएम है [टेम्पो 65 बीपीएम के साथ 4/4 के 5 उपाय = लगभग 18.5 सेकंड])।

126 बाइट संस्करण, गैर-प्रतिस्पर्धात्मक

Sound[{(s=SoundNote)/@LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu",{14,18,21}~s~16},240/13]

गैर-प्रतिस्पर्धा क्योंकि उत्पादन में आठवें नोट के बजाय दो सोलहवें नोट शामिल हैं, और पृथक्करण काफी ध्यान देने योग्य है।


14
वास्तव में, मैथेमैटिका में पचेलबेल के कैनन के लिए बिल्ट-इन नहीं है?
स्टेवी ग्रिफिन

1
@StewieGriffin केवल पूरी चीज़ ही संभव है, और इसे क्लिप करने की लागत बहुत अधिक होगी।
मेगो

@StewieGriffin हैरानी की बात है, यह नहीं है।
जंगहवान मिन

6

बबलगम , 203 बाइट्स

00000000: e002 2800 c35d 0026 9509 6f34 76f2 ffad  ..(..].&..o4v...
00000010: 4150 0893 a735 bd02 a1eb 1237 18fe 5498  AP...5.....7..T.
00000020: 120a 83e1 6662 8a5e 9709 fe8a 3430 0f48  ....fb.^....40.H
00000030: 5008 54af d19a b44f 2be9 fb3b bf9d 206d  P.T....O+..;.. m
00000040: abbf 12f0 2151 6dae 4712 8c18 4d8e f5cd  ....!Qm.G...M...
00000050: eb85 404c 17cd bd5c 2775 38bd eb50 ab88  ..@L...\'u8..P..
00000060: e015 fb7e 4b1e 5ddb 515b 144c fc5e c1be  ...~K.].Q[.L.^..
00000070: 3d5d 20cd e950 4a1d 256e b56e d364 188b  =] ..PJ.%n.n.d..
00000080: 6fa1 afcc 2100 0235 ada0 2f23 411d 95dd  o...!..5../#A...
00000090: 6665 3b45 041d cbe2 8e3b 2456 fb8d 4e4c  fe;E.....;$V..NL
000000a0: 1a7f b814 a6cf 850e 9b6c 9285 3a6f 1ec3  .........l..:o..
000000b0: 02ed 505c 996b eb4d 209c 2776 a8aa 8380  ..P\.k.M .'v....
000000c0: 42cc b779 218e e75e 8000 00              B..y!..^...

इसे ऑनलाइन आज़माएं!

यह xxd -rसोर्स कोड का एक हेक्सडंप (रिवर्स के साथ ) है। मिडी फ़ाइल जो इसे बनाती है वह इस प्रकार है (हेक्सडंप भी):

00000000: 4d54 6864 0000 0006 0001 0002 01e0 4d54  MThd..........MT
00000010: 726b 0000 0019 00ff 5902 0200 00ff 5804  rk......Y.....X.
00000020: 0402 1808 00ff 5103 0e15 c500 ff2f 004d  ......Q....../.M
00000030: 5472 6b00 0001 f200 c000 00ff 0405 5069  Trk...........Pi
00000040: 616e 6f00 9051 5f81 5880 5100 1890 4e5f  ano..Q_.X.Q...N_
00000050: 6c80 4e00 0c90 4f5f 6c80 4f00 0c90 515f  l.N...O_l.O...Q_
00000060: 8158 8051 0018 904e 5f6c 804e 000c 904f  .X.Q...N_l.N...O
00000070: 5f6c 804f 000c 9051 5f6c 8051 000c 9045  _l.O...Q_l.Q...E
00000080: 5f6c 8045 000c 9047 5f6c 8047 000c 9049  _l.E...G_l.G...I
00000090: 5f6c 8049 000c 904a 5f6c 804a 000c 904c  _l.I...J_l.J...L
000000a0: 5f6c 804c 000c 904e 5f6c 804e 000c 904f  _l.L...N_l.N...O
000000b0: 5f6c 804f 000c 904e 5f81 5880 4e00 1890  _l.O...N_.X.N...
000000c0: 4a5f 6c80 4a00 0c90 4c5f 6c80 4c00 0c90  J_l.J...L_l.L...
000000d0: 4e5f 8158 804e 0018 9042 5f6c 8042 000c  N_.X.N...B_l.B..
000000e0: 9043 5f6c 8043 000c 9045 5f6c 8045 000c  .C_l.C...E_l.E..
000000f0: 9047 5f6c 8047 000c 9045 5f6c 8045 000c  .G_l.G...E_l.E..
00000100: 9043 5f6c 8043 000c 9045 5f6c 8045 000c  .C_l.C...E_l.E..
00000110: 9042 5f6c 8042 000c 9043 5f6c 8043 000c  .B_l.B...C_l.C..
00000120: 9045 5f6c 8045 000c 9043 5f81 5880 4300  .E_l.E...C_.X.C.
00000130: 1890 475f 6c80 4700 0c90 455f 6c80 4500  ..G_l.G...E_l.E.
00000140: 0c90 435f 8158 8043 0018 9042 5f6c 8042  ..C_.X.C...B_l.B
00000150: 000c 9040 5f6c 8040 000c 9042 5f6c 8042  ...@_l.@...B_l.B
00000160: 000c 9040 5f6c 8040 000c 903e 5f6c 803e  ...@_l.@...>_l.>
00000170: 000c 9040 5f6c 8040 000c 9042 5f6c 8042  ...@_l.@...B_l.B
00000180: 000c 9043 5f6c 8043 000c 9045 5f6c 8045  ...C_l.C...E_l.E
00000190: 000c 9047 5f6c 8047 000c 9043 5f81 5880  ...G_l.G...C_.X.
000001a0: 4300 1890 475f 6c80 4700 0c90 455f 6c80  C...G_l.G...E_l.
000001b0: 4500 0c90 475f 8158 8047 0018 9049 5f6c  E...G_.X.G...I_l
000001c0: 8049 000c 904a 5f6c 804a 000c 9045 5f6c  .I...J_l.J...E_l
000001d0: 8045 000c 9047 5f6c 8047 000c 9049 5f6c  .E...G_l.G...I_l
000001e0: 8049 000c 904a 5f6c 804a 000c 904c 5f6c  .I...J_l.J...L_l
000001f0: 804c 000c 904e 5f6c 804e 000c 904f 5f6c  .L...N_l.N...O_l
00000200: 804f 000c 9051 5f6c 8051 000c 904a 5f00  .O...Q_l.Q...J_.
00000210: 904e 5f00 9051 5f8e 4c80 4a00 0080 4e00  .N_..Q_.L.J...N.
00000220: 0080 5100 8360 ff2f 00                   ..Q..`./.

6

बीबीसी बेसिक, 141 ASCII अक्षर (65.217BPM)

*TEMPO1
F.i=2TO71j=i>65SOUND1-j*(479+i/2),-9,ASCM." \\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNNVV\\",i)*2,23-j*161N.

टेम्पो पर सीमा को संशोधित करने के लिए संशोधित। बाद में स्पष्टीकरण अपडेट करेंगे।

बीबीसी बेसिक, 123 ASCII वर्ण (60BPM के रूप में गैर-सक्षम)

Http://www.bbcbasic.co.uk/bbcwin/download.html पर दुभाषिए को डाउनलोड करें

रन होने पर सीधे गाना बजाता है।

F.i=1TO67j=i>64SOUND1-j*(447+i),-9,ASCM."\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\",i)*2,5-j*75N.

Ungolfed

  FOR i = 1 TO 67
    j = i > 64: REM j=0 for the first four bars composed of 16th notes, j=-1 for the final chord (whole note)
    SOUND 1 - j * (447 + i), -9, ASC(MID$("\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\", i)) * 2, 5 - j * 75
  NEXT i

व्याख्या

jयह दर्शाता है कि क्या हम पहले 4 बार या अंतिम कॉर्ड में हैं। TRUE -1बीबीसी बेसिक में है।

SOUNDबयान 4 पैरामीटर लेता है:

चैनल: पहले 4 बार के लिए यह चैनल 1 है। 5 वें बार में कॉर्ड के 3 नोटों के लिए, चैनल नंबर 201, 202 और 203 हेक्स (513,514 और 515 दशमलव) हैं। इसका मतलब है कि चैनल 1,2 पर खेलते हैं। 3, प्रारंभिक 2 अर्थ अन्य चैनलों पर 2 नोटों के साथ एक साथ खेलते हैं (यानी एक 3 नोट कॉर्ड खेलते हैं)।

वोल्यूम: एक नकारात्मक मान के रूप में दिया जाता है क्योंकि सकारात्मक मान अन्य प्रभावों (ध्वनि लिफाफे) का प्रतिनिधित्व करते हैं। -9 पर सेट करें (जोर -15 तक जाएगा जो सबसे जोर से है।)

पिट: इस धुन के लिए, D4 = 108 से A5 = 184 तक होता है। प्रत्येक पूर्णांक चरण एक सेमीिटोन का 1/4 है। मानों को 54 से 92 सीमा में ASCII कोड के रूप में संग्रहीत किया जाता है और सही मूल्य को पुनः प्राप्त करने के लिए दोगुना कर दिया जाता है। 1 / 8th नोट डुप्लिकेट 1/16 नोट के रूप में संग्रहीत किए जाते हैं। अंतिम कॉर्ड को 3 अलग-अलग पिचों के रूप में संग्रहीत किया जाता है और नोट की लंबाई नीचे पूरे नोट के लिए भिन्न होती है।

अवधि: एक सेकंड के 1/20 में। 1/16 वें नोट की अवधि प्रति सेकंड 5/20 है, इसलिए प्रति मिनट 60 1/4 नोट्स (टेम्पो को और अधिक सटीक बनाने के लिए अपर्याप्त रिज़ॉल्यूशन है।) पूरा नोट 5 है - (- 75) = 80 यूनिट (4 सेकंड) ) लंबा।


क्या यह गैर-प्रतिस्पर्धा वाला नहीं होना चाहिए?
जुंगह्वान मिन

@JungHwanMin आपकी टिप्पणी के मूल पाठ का उत्तर देने के लिए: BPM ६५% के भीतर है। प्रश्न में सटीकता पर कोई बाध्यता नहीं है। ओपी की पुकार।
लेवल रिवर सेंट

60 बीपीएम 65 बीपीएम से अलग है। मैं इसे गैर-प्रतिस्पर्धात्मक होने दूंगा क्योंकि यह भाषा द्वारा लगाया गया प्रतिबंध है।
मेघो

@ मैं पहले से ही सोचता था कि बीबीसी बेसिक डिफ़ॉल्ट रूप से एक सेकंड के 100 वें भाग में गिना जाता है, मुझे नहीं पता था कि यह एक दूसरे के 20 वें हिस्से के रूप में था। मैंने अपना कोड 100 वें स्थान पर समायोजित कर लिया है, इसलिए अब मैं 65.215BPM कर सकता हूं, क्या यह ठीक है? यह थोड़ा अतिरिक्त था क्योंकि पूरे नोट 256/100 से अधिक थे, इसलिए मुझे इसे दो आधे नोटों के रूप में खेलना था। 50 सेकंड का दूसरा कोड छोटा होगा लेकिन 62.5BPM ज्यादा सुधार नहीं है।
लेवल रिवर सेंट

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

4

Befunge, 242 बाइट्स

मिडी फ़ाइल के प्रारूप में स्टडआउट करने के लिए धुन लिखी जाती है। अंश को चलाने के लिए आपको उस आउटपुट को एक .mid फ़ाइल पर पुनर्निर्देशित करना होगा ।

<v:"MThd"0006000101"MTrk"001+"~e"0*3"UQ"30*5"-\"9
v>9#:-#,_0"QONLJIGEJIGEGCGECB@>@B@BCEGCECBECEGECBNLJNONLJIGEQONQONQ"0\:
_v#:\%+77+1,"@",\,*8*82,+3*4!*-3::\,"@",:,*:*62,1
v>"QNJQNJ"0\:
_v#:\+1,"@",\,-**82/3\*:*62:,+!\**97!-3::\
@>,\"/U"3*,,,

इसे ऑनलाइन आज़माएं! , हालांकि मुझे नहीं लगता कि वर्तमान में आउटपुट को इस तरह से बचाना संभव है कि यह डेटा की द्विआधारी अखंडता को बनाए रखेगा।

व्याख्या

पहली पंक्ति केवल एक कठिन कोडित मिडी हेडर है, जो लाइन दो की शुरुआत में आउटपुट है। बाकी दो पंक्ति में उनके मिडी मूल्यों के रूप में नोटों के अनुक्रम को एन्कोड किया गया है, जो कि आसानी से एएससीआईआई हैं। तीसरी पंक्ति उन नोटों को चलाने के लिए मिडी कमांडों को लिखती है, जिसकी अवधि की गणना स्वचालित रूप से की जाती है (जब तक कि मैं 14% == 0 नहीं हो) तक हर नोट एक शब्द है। अंतिम राग को चार और पाँच लाइनों पर एक विशेष मामले के रूप में संभाला जाता है (क्योंकि इसमें एक साथ कई कुंजियों को दबाने की आवश्यकता होती है), और छठी पंक्ति ट्रैक मार्कर के अंतिम मिडी छोर को लिखती है।


4

सी, 248 228 210 198 193 191 बाइट्स

#define y(x)cos(.346*t*exp(x/17.))
d=1846,t;main(c){for(;t++<d*80;putchar(c=((t<d*64?y(("TTQRTTQRTHJLMOQRQQMOQQEFHJHFHEFHFFJHFFECECACEFHJFFJHJJLMHJLMOQRT"[t/d]-72)):y(12)+y(9)+y(5))+3)*42));}

यह 8 बिट अहस्ताक्षरित नमूनों के अनुक्रम का उत्पादन करता है, जिन्हें 8000 प्रति सेकंड के हिसाब से खेला जाता है। यदि आपके पास एक पुराना UNIX / Linux सेटअप है, तो आप आउटपुट को रीडायरेक्ट कर सकते हैं /dev/audio। कुछ नए लिनक्स डिस्ट्रोस पर, आपको आउटपुट को ALSA कमांड लाइन प्लेयर पर पाइप करना पड़ सकता हैaplay


इतना अद्भुत। महान समाधान!
हाबिल टॉम

1

स्माइलबासिक, 115 बाइट्स

BGMPLAY"@305T65L16[A8F+G]2A{r}F#8>F#GABAGAF#GAG8BAG8F#EF#EDEF#GABG8BAB8<C#D{r}AA1:1[R1]4F#1:2[R1]4D1{r=>AB<C#DEF#G}

एक अच्छे उपकरण का उपयोग करना 4 अतिरिक्त बाइट्स के लायक था :)


साधन 305 क्या है?
पावेल

SmileBASIC के पास सभी सामान्य मिडी उपकरण हैं, लेकिन इसमें "गुप्त" अनिर्दिष्ट उपकरणों का एक समूह भी है। यहाँ उस उपकरण का उपयोग करके
चलाए गए पचेलबेल

0

जावास्क्रिप्ट (ES6) WAV.js , 325 बाइट्स का उपयोग करते हुए

w=new WAV();w.addProgression(btoa9‘¹9‘¹8€¹‘9‘¹‘y‘9‘y¸€x¸x€8¸€8¸888¸€x¸€8€xù€xù‘y9`.replace(/[CF]./g,'$&#').split(/(?=[A-G])/g).map((f=t=>n=>({note:n,time:t}))(15/65)));['D5','F5#','A5'].map(n=>w.addNote(f(48/13)(n),.3,[],1,1));new Audio(URL.createObjectURL(w.toBlob())).play()
<script src="https://cdn.rawgit.com/patrickroberts/3b065ab94ce5094baacf45ed23e2a16e/raw/9c367e292fbee8341e1019d0d5953a2234449882/wav.babel.js"></script>

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