"नल" खेलें


31

आज, 11 नवंबर 2015, संयुक्त राज्य अमेरिका में वयोवृद्ध दिवस है। " नल " अमेरिकी सैन्य अंत्येष्टि में खेला जाने वाला बिगुल कॉल है :

( Vtmiller से SoundCloud पर "नल" )

यह एक साधारण राग है, केवल चौबीस नोट लंबे और केवल चार अलग-अलग नोटों का उपयोग करते हैं। यहाँ शीट संगीत है:

टेप संगीत ( स्रोत )

चुनौती

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

सभी चौबीस नोटों को सटीक पिच, अवधि और रिक्ति के साथ खेला जाना चाहिए। कोई व्यक्ति जो "टैप" से परिचित है, वह आपके कोड को चलाने में सक्षम होना चाहिए और आसानी से चलाए जा रहे गीत को पहचान सकता है।

राग की अवधि (पहले नोट की शुरुआत से लेकर अंतिम नोट के अंत तक) 30 से 70 सेकंड के बीच होनी चाहिए। आप वैकल्पिक रूप से अपनी ध्वनि फ़ाइल के प्रारंभ और / या अंत में 5 सेकंड का मौन रख सकते हैं, इसलिए 80 सेकंड की फ़ाइल सबसे लंबी अनुमति है।

आप निश्चित रूप से, गीत को ऑनलाइन कहीं डाउनलोड नहीं कर सकते हैं या इसे एक ऑडियो लाइब्रेरी से निकाल सकते हैं जो ऐसा होता है जैसा कि नमूना है। हालाँकि, आप ऑडियो पुस्तकालयों का उपयोग कर सकते हैं जो व्यक्तिगत नोट्स बना सकते हैं / बना सकते हैं और ऑडियो फाइलें बना सकते हैं।

स्कोरिंग

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

ध्यान दें कि आप SoundCloud ऑडियो फाइलों को सीधे एक खाली लाइन पर लिंक को चिपकाकर पदों में एम्बेड कर सकते हैं । यदि आपके पास एक साउंडक्लाउड खाता है तो यह आपके आउटपुट को साझा करने का एक शानदार तरीका होगा।


मैं सोच रहा हूँ ChucK।
The_Basset_Hound

4
केल्विन, अगर आप बुरा न मानें, तो मैं पुराने BASIC में कुछ गोल्फ के जवाब पोस्ट करूंगा और PPCG के बाहर वेटरन्स चैरिटी को दान करूंगा। आपने मुझे ऐसा करने के लिए प्रेरित किया है। ब्रिटेन में बीटीडब्लू हमारे पास रिमेंबर संडे है, नवंबर में दूसरा रविवार, जिसका मतलब है कि इस साल यह आखिरी रविवार था। मेरी शुरुआती यादों में से एक पोपियों से घिरा स्मारक है जहाँ 2 मिनट का मौन मनाया गया। मैं 3. के बारे में था। जब मैंने अपनी मां से पूछा कि कोई बात क्यों नहीं कर रहा है, तो उसने मुझे चुप रहने के लिए कहा।
स्तर नदी सेंट

क्या त्वचा की लंबाई के लिए कोई नियम हैं?
SirPython

@SirPython मुझे यह भी नहीं पता था कि उस प्रतीक का क्या मतलब था! En.wikipedia.org/wiki/Fermata के अनुसार "वास्तव में यह कितना समय तक आयोजित किया जाता है, यह कलाकार के विवेक पर निर्भर करता है।" आउटपुट पर विवेक का उपयोग करना वास्तव में कोडगुल्फ के साथ फिट नहीं होता है, इसलिए मैंने इसे लिखित रूप में खेला। मैं देख रहा हूँ कि आप कहाँ जा रहे हैं ... बिंदीदार दूसरे नोट को लंबा करने से बिंदीदार आठवें नोट को सोलहवें नोट तक संकुचित किया जा सकता है, जिससे चीजें सरल हो जाती हैं। लेकिन मुझे लगता है कि यह धोखा है:
लेवल रिवर सेंट

जवाबों:


4

qb64, 100 84 बाइट्स

पुराने Qbasic का अपडेट किया गया संस्करण, http://www.qb64.net/ पर डाउनलोड किया जा सकता है

गणना रिक्त स्थान को बाहर करती है, जिसकी आवश्यकता नहीं है और केवल स्पष्टता के लिए डेटा को तीन-नोट वाक्यांशों में विभाजित करने के लिए है।

PLAY"T99L4C.L8CL1F. L4C.L8FL1A. L4CFL2A L4CFL2A L4CFL1A. L4F.L8AL1>C< L2AFL1C. L4C.L8CL1F."

खेल स्ट्रिंग में शामिल है

T99     set tempo to 99 quarter notes per minute (default is 120, only just too short)
CDEFGAB play notes in the current octave
><      up or down one octave
Lx      following notes are of note of 1/x duration
.       extend previous note duration by 50%

गोल्फ इतिहास:

पहली पोस्ट: 4/4 समय से 4/2 समय तक, जिसका अर्थ है कि मेरे पास कुछ पूरे नोट हैं, लेकिन सोलहवें नोट नहीं हैं।

संपादित करें 1: कुंजी सी (रेंज जीजी) से एफ (रेंज सीसी) में बदल गई। अब मुझे केवल उच्च C के लिए एक बार एक सप्तक परिवर्तन करना है, जो केवल एक बार होता है, बजाय सभी निम्न G के पहले जैसा।

उन सभी सप्तक परिवर्तनों से छुटकारा पाने के बाद, मुझे नहीं लगता कि गोल्फ के लिए कोई और अधिक है। कुल 20 हैं Lलेकिन उनसे बचने का कोई स्पष्ट तरीका नहीं है।

अंतिम वाक्यांश (11 वर्ण) पहले के समान है, लेकिन अंडर अक्षर में इसे दो बार सम्मिलित करने का कोई तरीका नहीं है। दोहराया डेटा केवल 9 वर्ण होगा यदि प्रारंभिक L4को समाप्त कर दिया गया था (यह अनावश्यक प्रतीत होता है क्योंकि डिफ़ॉल्ट नोट की लंबाई तिमाही नोट लगती है, लेकिन यह प्रलेखित नहीं है इसलिए मैंने इसे अंदर छोड़ दिया।)


9

जावास्क्रिप्ट, 203 198 196 195 बाइट्स

with(new AudioContext)for(t=i=0;n="301093301396202346202346202396331699464390301093"[i++];)with(createOscillator())i%2?l=n/2:(frequency.value=392+n*44,connect(destination),start(t+.1),stop(t+=l))

5 बाइट्स ने डेंड्रोबियम को धन्यवाद और 1 @PatrickRoberts को धन्यवाद दिया।

व्याख्या

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=                        // n = note pitch (or temporarily length)

    // This string contains the values of each note alternating between length and pitch
    //     (l1, p1, l2, p2, etc...)
    // Length value is in 16th notes (1 = 1/16th note, 2 = 1/8th, etc...)
    //     The longer notes are limited to 9 but I think it still sounds OK
    // Pitch value 0 = G4, 3 = C5, 6 = E5, 9 = G5 (multiples of 3 saves 1 byte)
    "301093301396202346202346202396331699464390301093"

  [i++];)
    with(createOscillator())  // create the note oscillator
      i%2?                    // alternate between length and pitch characters
        l=n/2                 // l = length (stored for use in the next iteration)
                              // dividing it by 2 sets the speed to 60 beats per minute
                              //     and casts it to a number
      :(
        frequency.value=392   // base note = G5 (392hz)
          +n*44,              // there is (conveniently) roughly 132hz between each note
        connect(destination), // send the note's sound through the speakers
        start(t               // schedule the note to sound
          +.1),               // short delay to distinguish two notes of the same pitch
        stop(t+=l)            // schedule the end of the note and increment the time
      )

इसे यहाँ ब्राउज़र में टेस्ट करें! HTML5 वेब ऑडियो एपीआई का समर्थन करने वाले किसी भी ब्राउज़र पर काम करता है


1
-5 बाइट्स: c = new AudioContext (); के लिए (t = i = 0; n = "30109330139620234620232320239633999946439093" [i ++]? (C.createOscillator ()) i% 2? L = n / 2:? मान = 392 + n * 44, कनेक्ट (c.destination), स्टार्ट (t + .1), स्टॉप (t + = l))
Dendrobium

मैं कहता हूं कि अवधि (12 इकाइयों को 9 में बदल देना) गलत है; यह इस तथ्य से भी बदतर हो गया है कि बिंदीदार आधे नोटों पर उनके चमड़े हैं और वास्तव में 12 या उससे अधिक होने चाहिए ।
lirtosiast

@ThomasKwa हाँ, यह सही नहीं है, लेकिन आवश्यकता आसानी से पहचानने की है, इसलिए मैं कहूंगा कि यह पास हो गया है। (प्रश्न में साउंडक्लाउड ट्रैक को भी सुनें, पहला डॉटेड हाफ नोट ठीक
10/16 वां है

8

गणितज्ञ, 361 287 285 बाइट्स

मैं यहां सटीकता के लिए गया था। आउटपुट बिल्कुल वैसा ही है जैसा कि स्कोर में वर्णित है, तुरही के साथ बजाया जाता है। आप यहाँ फ़ाइल पा सकते हैं ।

"G"
e="E5";c="C5";EmitSound@Sound[SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17]&@@@{%,8,17,%,24,20,c,2,23,%,8,26,c,24,29,e,2,32,%,12,35,c,12,38,e,6,41,%,12,44,c,12,47,e,6,50,%,12,53,c,12,56,e,2,59,c,8,62,e,24,65,"G5",3,68,e,6,170/3,c,6,136/3,%,2,34,%,8,34,%,24,34,c,2,34}~Partition~3]

गोल्फ सुझाव के लिए @ मार्टिनबटनर को धन्यवाद।


4
लिंक मुझे गीत सुनने की अनुमति नहीं देता है। यह अनुमति के कारण सुनने के लिए या तो हटा दिया गया है या उपलब्ध नहीं है।
d0nut

2
अतिरिक्त पांडित्य होने के लिए, आपने फ़र्मेटास के लिए खाता नहीं बनाया है!
wchargin

"राग की अवधि 30 से 70 सेकंड के बीच होनी चाहिए।" यह 24 सेकंड में थोड़ा छोटा है।
केल्विन के शौक

4
@ केल्विन हॉबीज रुको ... मैं अनुशंसित 50 बीपीएम में यह सब कर रहा हूं ... मैं तुम्हें दोष देता हूं: |
लीजनमोनमाल 978

1
%1, %2और %%वास्तव में किसी भी बाइट को बचाने के लिए नहीं x="E5"-> x(वास्तव में, यह देखते हुए कि आप उन्हें कितनी बार उपयोग करते हैं, आपको वास्तव में वेरिएबल का उपयोग करके काफी बचत करनी चाहिए)। तब आप EmitSount@Sound[SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17]&@@@{{%%,8,17},{%%,24,20},...}सबसे अधिक उपयोग किए जाने वाले नोट को स्टोर और स्टोर करके बाइट्स की बचत कर सकते हैं %। और 24 नोटों पर यह एक फ्लैट सूची को विभाजित करने के लिए अभी भी कम हो सकता है:SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17&@@@{%%,8,17,%%,24,20,%2,2,23,...}~Partition~3
मार्टिन एंडर

5

सोनिक पाई, 899 बाइट्स

समय थोड़ा दूर है, लेकिन मुझे लगता है कि यह ठीक है।

हल्के से गोल्फ:

use_synth: ब्लेड
use_synth_defaults स्थायी: 0.70, रिलीज़: 0.0
खेलने: जी -4, रिहाई: 0.05
0.75 प्रतीक्षा करें
खेलने: जी -4, को बनाए रखने: 0.25
0.25 प्रतीक्षा करें
पकड़ = rrand_i (3,4)
खेलने: सी 5, को बनाए रखने: पकड़, रिहाई: 0.5
रुको + 0.5
खेलने: जी -4, रिहाई: 0.05
0.75 प्रतीक्षा करें
खेलने: सी 5, को बनाए रखने: 0.25
नींद 0.25
पकड़ = rrand_i (3,4)
खेलने: E5, को बनाए रखने: पकड़, रिहाई: 1.25
नींद पकड़ + 1.25
प्ले: जी -4
नींद 0.70
खेलने: सी 5
नींद 0.70
2.टाइम्स करते हैं
  खेलने: E5, को बनाए रखने: 1, जारी: 0.25
  नींद 1.25
  प्ले: जी -4
  नींद 0.7
  खेलने: सी 5
  नींद 0.7
समाप्त
पकड़ = rrand_i (3,5)
खेलने: E5, को बनाए रखने: पकड़, रिहाई: 0.75
नींद पकड़ + 1
खेलने: सी 5, रिहाई: 0.05
नींद 0.75
खेलने: E5, को बनाए रखने: 0.25
नींद 0.25
खेलने: G5, को बनाए रखने: 2.45, रिहाई: 0.05
नींद 2.5
खेलने: E5, को बनाए रखने: 1, जारी: 0.25
नींद 1.25
खेलने: सी 5, को बनाए रखने: 1, जारी: 0.25
नींद 1.25
पकड़ = rrand_i (3,5)
खेलने: जी -4, को बनाए रखने: पकड़, रिहाई: 0.5
नींद पकड़ + 0.5
खेलने: जी -4, रिहाई: 0.05
नींद 0.75
खेलने: जी -4, को बनाए रखने: 0.25
नींद 0.25
पकड़ = rrand_i (3,5)
खेलने: सी 5, को बनाए रखने: पकड़, रिहाई: 1.5

हाँ, कोई सोनिक पाई का उपयोग कर रहा है!
मेगा मैन

ज के साथ पकड़ को बदलने के माध्यम से थोड़ा गोल्फ हो सकता है, रिलीज को बदलकर: 0.0 को रिलीज करने के लिए: 0 और रिक्त स्थान को हटा दें।
मेगा मैन

4

MATLAB, 338 327 262 258 230 बाइट्स

o=@(L,f)sin(pi*.11*2^(f/12))*(1:600*L))
sound([o(3,-1) o(1,-1) o(12,2) o(3,-1) o(1,2) o(12,4) o(2,-1) o(2,2) o(4,4) o(2,-1) o(2,2) o(4,4) o(2,-1) o(2,2) o(12,4) o(3,2) o(1,4) o(8,6) o(4,4) o(4,2) o(12,-1) o(3,-1) o(1,-1) o(12,4)])

2

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

BGMPLAY"@56T50L2.G8.G16B+G8.<C16E>[G8<C8E4>]2G8<C8EC8.E16G2E4C4>GG8.G16B+

सभी नोट और टाइमिंग सही हैं। मैंने एक तुरही का इस्तेमाल किया क्योंकि यह मिडी में सबसे करीबी चीज है

<audio autoplay controls src="//12me21.github.io/resources/taps.mp3"></audio>


1

पॉवरशेल, 183 175 159 बाइट्स

उदासीन यात्रा, जो बीप्स पसंद नहीं करता है ?!

foreach($i in 0..23){[console]::beep((196,262,330,392)[(001012012012012123210001-split'')[$i]],(3,1,12,3,1,12,2,2,4,2,2,4,2,2,12,3,1,8,4,4,12,3,1,12)[$i]*400)}


स्पष्टीकरण (छंटनी)

foreach($i in 0..23) { # foreach loop which ranges from 0 to 23
    [console]::beep( # [console]::beep(Pitch, Duration)
        (196,262,330,392) # the notes in Hertz
            [ # select which note to use
                (001012012012012123210001-split'') # -split '' creates an array of [0,0,1,0,1 ...], spaces can be omitted
                [$i] # select the n-th element
            ],
        (3,1,12,3,1,12,2,2,4,2,2,4,2,2,12,3,1,8,4,4,12,3,1,12) # array of durations
        [$i]*400 # duration in milliseconds * 400
    )
}


यह लगभग 45 सेकंड में खेलेंगे।

यह विंडोज 'पॉवर्सशेल' का उपयोग करने का मेरा पहला मौका है, जो इस पर गोल्फ के लिए कोई सुझाव नहीं है।


पुराने संस्करणों

175

foreach($i in(0..23)){[console]::beep((196,262,330,392)[(0,0,1,0,1,2,0,1,2,0,1,2,0,1,2,1,2,3,2,1,0,0,0,1)[$i]],(3,1,12,3,1,12,2,2,4,2,2,4,2,2,12,3,1,8,4,4,12,3,1,12)[$i]*400)}

183

$d=3,1,12,3,1,12,2,2,4,2,2,4,2,2,12,3,1,8,4,4,12,3,1,12;$n=0,0,1,0,1,2,0,1,2,0,1,2,0,1,2,1,2,3,2,1,0,0,0,1;foreach($i in(0..23)){[console]::beep((196,262,330,392)[$n[$i]],$d[$i]*400)}

1

बीबीसी बेसिक, 111

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

स्कोर व्हाट्सएप और न्यूलाइन को बाहर करता है, जो गैर-जरूरी हैं और पठनीयता के लिए जोड़े गए हैं

FORk=1TO24
  x=ASC(MID$("')F'Lb(Ke(Ke(KbJhxeI#')F",k))
  SOUND1,-9,x DIV7*4+60,INT(12/1.4^(x MOD7))*5
  SOUND1,0,1,1
NEXT

काफी मानक संपीड़न, प्रति नोट 1 ASCII चरित्र। के पैरामीटर SOUNDइस प्रकार हैं:

Channel (always 1 for the purposes of this challenge)
Amplitude (negative for on, 0 for off, positive is an envelope index)
Pitch (in increments of 1/4 semitone, with middle C at 100)
Duration (20ths of a second)

गीत की सीमा 13 नोट है, भले ही केवल 4 का उपयोग किया गया हो। प्रिंट करने योग्य ASCII की 95-संख्या सीमा में इस सीमा को प्राप्त करने के लिए, मुझे 7 की पूर्णांक सीमा में अवधि को निचोड़ना पड़ा और इसे 7 ले जाना चाहिए। निम्नलिखित अवधि (सोलहवीं में) का उपयोग किया जाता है (6 के अपवाद के साथ जो कभी नहीं होता है प्रयुक्त): 1,2,3,4,6,8,12। इन नंबरों का उत्पादन करने के लिए, मैं 12 की शक्ति से विभाजित करने के विचार पर मारा sqrt(2)(1.4 द्वारा अनुमानित) और छंटनी।

SOUND1,0,1,112 बाइट्स की लागत एक झुंझलाहट है। समान पिच के नोटों के बीच एक ठहराव प्रदान करना आवश्यक है।


1

रूबी + बीप, 178 बाइट्स

f=[260,346,416,499]
n=[12,*1..4]
l=(a="001012012012012123210001310310224224220318440310".chars.map(&:to_i))[24..-1]
`beep#{24.times.map{|i|" -f#{f[a[i]]} -l#{n[l[i]]}00"}*" -n"}`

मुझे इसे बनाने में थोड़ी देर लगी, मुझे लगता है कि मैं नाव से चूक गया, लेकिन जो भी हो।

fचार आवृत्तियों का उपयोग करता है। n16 नोटों के गुणकों में, पाँच नोट की लंबाई का उपयोग किया जाता है।

a="00101...सभी नोट लंबाई के बाद सभी नोट पिचों को रखता है, संबंधित सरणियों में अनुक्रमित करता है। lउसके बाद 24 वें इंडिस और उसके बाद सेट किया जाता है a। फिर एक बीप कमांड का निर्माण उपरोक्त सभी के माध्यम से पुनरावृति करके किया जाता है, और निष्पादित किया जाता है


0

सी - (रॉ: 318 | WAV: 437)

8-बिट (अहस्ताक्षरित) मोनो पीसीएम 44800 हर्ट्ज, 33.60 सेकंड पर।

मेज़ो फोर्ते, फोर्टिसिमो और फ़ोर्ट डायनेमिक्स को कुछ हद तक कलात्मक रूप से लागू किया गया है। फरमेट्स बेहतर हो सकते हैं।

कोड unsigned long long8 ऑक्टेट और सिस्टम के छोटे एंडियन होने पर निर्भर करता है ।

#include<stdio.h>
#include<math.h>
#ifdef RAW
main(){unsigned long long D[]={0x422422c13c13,0xc13c44813c22},X[]={27863,37193,46860,55727},O=0x406e64924910,i=0,j;float Z,A,U=40,P;for(;i<24;D[i++/12]>>=4){Z=X[O&3]/1e6;P=0;O>>=2;A=i>18?--U:i<14?U+i/2:U+30;for(j=(D[i/12]&15)*13440;j;A-=--j<7e3&&A>0?.01:0)putchar(A*sin(P+=Z)+128);}}
#else
main(){unsigned long long D[]={0x422422c13c13,0xc13c44813c22},X[]={27863,37193,46860,55727},O=0x406e64924910,i=0,j;float Z,A,U=40,P;int W[]={0x46464952,1570852,0x45564157,544501094,16,65537,44800,44800,524289,0x61746164,1505280};fwrite(W,4,11,stdout);for(;i<24;D[i++/12]>>=4){Z=X[O&3]/1e6;P=0;O>>=2;A=i>18?--U:i<14?U+i/2:U+30;for(j=(D[i/12]&15)*13440;j;A-=--j<7e3&&A>0?.01:0)putchar(A*sin(P+=Z)+128);}}
#endif

संकलन करें और कुछ इस तरह से चलाएं:

gcc -std=c99 -o taps taps.c -lm
./taps > taps.wav
play taps.wav

-DRAWकच्चे संस्करण के लिए संकलन-पंक्ति में जोड़ें ।

कच्चे उत्पादन को उदाहरण के playतौर पर SoX के साथ खेला जा सकता है :

play -c 1 -b 8 -r 44800 -t u8 <file>
       |    |       |       |
       |    |       |       +--- Unsigned 8-bit
       |    |       +----------- Sample rate
       |    +------------------- 8 Bits
       +------------------------ 1 Channel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.