नया साल मोर्स


33

यह साप्ताहिक चैलेंज # 1 है। थीम: ऑडियो प्रोसेसिंग

आपका काम एक कार्यक्रम है, जो डिस्क को एक ऑडियो फ़ाइल लिखते हैं (अपनी पसंद का एक प्रारूप में), जिसमें लिखना है मोर्स कोड के लिए 2015, यानी

..--- ----- .---- .....

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

  • छोटे खंडों की लंबाई कम से कम 0.2 सेकंड होनी चाहिए।
  • लंबे खंडों को छोटे खंडों के रूप में लंबे समय तक कम से कम 3 गुना होना चाहिए।
  • एक अंक के भीतर सेगमेंट के बीच का ब्रेक शॉर्ट सेगमेंट के समान लंबाई होना चाहिए।
  • अंकों के बीच का ब्रेक लंबे खंडों के समान होना चाहिए।
  • प्रत्येक सेगमेंट और ब्रेक उस प्रकार के सेगमेंट / ब्रेक की औसत लंबाई से 10% तक विचलित हो सकते हैं।
  • संपूर्ण ऑडियो फ़ाइल 30 सेकंड से अधिक लंबी नहीं हो सकती है।

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

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

यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।

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

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

उदाहरण ट्रैक

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

बाउंटी विवरण

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

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


1
अतिरिक्त चुनौती: यह वास्तव में अच्छा लग रहा है।
काज वोल्फ

6
@ मेव कितना अच्छा लग सकता है संभवतः?
मार्टिन एंडर

1
Brainf ** k में ऐसा करने से इतने बोनस लेवल पर यह कमाल हो जाएगा।
मस्त

@ मैस्ट शायद, लेकिन दुर्भाग्य से, बीएफ एक फ़ाइल में नहीं लिख सकता है। ;) (मैं अगली बार उस के साथ अधिक उदार होना सुनिश्चित करूँगा।)
मार्टिन एंडर

क्या संगीत संकेतन प्रारूप हैं, जिसमें केवल स्कोर होता है और कोई ऑडियो (.mid, .abc नीचे देखा गया) "ऑडियो ऑडियो" के रूप में स्वीकार्य माना जाता है? "ट्रैकर" स्वरूपों के बारे में, जिसमें नमूने और स्कोर दोनों शामिल हैं, लेकिन कोई ऑडियो ट्रैक (.mod, .xm) प्रदान नहीं किया गया है?
तोबिया

जवाबों:


4

AWK BASH: 66 86 67 74 बाइट्स

मार्टिन बंटनर द्वारा अनुरोध किए जाने के बाद, मैंने एबीसी नोटेशन मानक की जांच के बाद एक टेम्पो जोड़ा , ऐसा लगता है कि इसके लिए कोई परिभाषित डिफ़ॉल्ट मूल्य नहीं है (यह इंगित करने के लिए धन्यवाद नटकी)।
मैं STDOUT के बजाय डिस्क फ़ाइल (a) में भी लिखता हूँ क्योंकि प्रश्न स्पष्ट रूप से "डिस्क पर एक फ़ाइल" चाहता था।

a=C3z;echo "X:1
K:A
Q:99
CzCz$a$a$a3$a$a$a$a${a}3Cz$a$a$a${a}3CzCzCzCzC">a

मैंने ९९ का टेम्पो डाला, जो ऑडियो फ़ाइल को २२ सेकंड तक ले जाता है; यह मेरे पिछले संस्करण की तुलना में धीमा है, लेकिन कम से कम अब इसे हर एबीसी खिलाड़ी पर समान लंबाई माना जाता है, और यह 30 सेकंड के नीचे फिट होता है।

यह दिखता है ... जैसा कि आप देख सकते हैं पिछले संस्करण की तरह बहुत: 2015 के स्कोर का अंतिम (आई होप: ओ)) संस्करण

यहाँ नई मिडी फ़ाइल है

पहला BASH संस्करण (टेम्पो गायब है)

मैंने यह पहले क्यों नहीं सोचा ...: ओ)

यह एक ही परिणाम के लिए AWK के साथ तुलना में 22 कम बाइट्स है

a=C3z;echo "X:1
K:A
CzCz$a$a$a3$a$a$a$a${a}3Cz$a$a$a${a}3CzCzCzCzC"

AWK में पिछले संस्करण की तरह, यह एक वैध "ABC" संकेतन फ़ाइल पर लिखता है (धन्यवाद टोबिया यह पता लगाने के लिए कि "L" कथन वैकल्पिक था)

यह इस तरह दिख रहा है: "2015" विभाजन का अंतिम संस्करण

और यह पिछले संस्करण की तरह ही लगता है

AWK में पिछला संस्करण (86 बाइट्स)

यहाँ एक नया संस्करण है; थोड़ी देर, लेकिन अधिक सटीक समय के साथ। मैंने पहले संस्करण को तुलना / संदर्भ के लिए बोला:

BEGIN{a="C3z";print"X:1\nK:A\nL:1/8\nCzCz"a a a"3"a a a a a"3Cz"a a a a"3CzCzCzCzCz";}

यह अभी भी एक मान्य "एबीसी" फ़ाइल है, जो इस तरह दिखता है: 2015 का स्कोर

यहाँ नई मिडी फ़ाइल है (मैंने 30 सेकंड की सीमा के तहत रहने के लिए गति को तेज कर दिया है)।

AWK में पहला संस्करण (66 बाइट्स):

यह मेरे पिछले उत्तर की तुलना में बहुत कम दिलचस्प है , लेकिन यह बहुत छोटा है, इसलिए:

BEGIN{print"X:1\nK:A\nL:1/4\nCCC2C2C2zC2C2C2C2C2zCC2C2C2C2zCCCCC"}

यह एक वैध "एबीसी" फ़ाइल को आउटपुट करता है, जिसे (अन्य के बीच) ईज़ीएबीसी में पढ़ा जा सकता है। यह इस तरह दिखेगा: मोर्स में "2015" का स्कोर

और यह इस तरह लग जाएगा (मिडी फ़ाइल) । +


आपको इसे AWK रैपिंग के बिना ABC के रूप में पोस्ट करना चाहिए और इनाम का दावा करना चाहिए!
तोबिया

टोबिया, एबीसी एक फ़ाइल स्वरूप है, न कि प्रोग्रामिंग भाषा। और अब तक 86 बाइट्स के साथ यह सबसे छोटा जवाब है ... अब सवाल यह है कि "परिणामस्वरूप ध्वनि वैध होने के लिए आवश्यकताओं के लिए पर्याप्त है?"
LeFauve

मैंने इसे एक फ़ाइल प्रारूप भी कहा होगा, लेकिन विकी पेज ओपी ने इसे एक साउंड प्रोग्रामिंग भाषा के रूप में सूचीबद्ध किया है। मैंने अपने एबीसी फ़ाइल को एक प्रविष्टि के रूप में, एक अधिक उचित Csound कार्यक्रम के साथ sumbitted किया है। आइए देखें कि वे इसके बारे में क्या सोचते हैं।
टोबिया

विकी के साथ यही समस्या है ... कभी-कभी संपादन करने वाले लोग गलतियाँ करते हैं: ओ)। लॉट की विभिन्न चीजों को "प्रोग्रामिंग भाषा" कहा जा सकता है लेकिन मुझे लगता है कि एबीसी उनमें से एक नहीं है। वैसे भी, "एल" का पता लगाने के लिए धन्यवाद वैकल्पिक था। यह मुझे बाइट्स के एक जोड़े को बचाया; ओ)
LeFauve

"छोटे खंडों के रूप में लंबे खंडों को कम से कम 3 गुना लंबा होना चाहिए।" दिखाई गई अंतिम संगीत पंक्ति आवश्यकताओं को पूरा नहीं करती है।
mbomb007

13

x86 मशीन कोड (.COM फ़ाइल): 121 120 113 109 बाइट्स

Hexdump:

00000000  b4 3e bb 01 00 cd 21 b4  3c 31 c9 ba 3e 01 cd 21  |.>....!.<1..>..!|
00000010  4a b4 09 cd 21 be 56 01  8a 0c 46 e8 0c 00 b1 32  |J...!.V...F....2|
00000020  e8 07 00 81 fe 6d 01 75  ef c3 88 cb c0 e3 07 c1  |.....m.u........|
00000030  e1 04 30 d2 b4 02 00 da  cd 21 e2 fa c3 2e 73 6e  |..0......!....sn|
00000040  64 00 00 00 18 ff ff ff  ff 00 00 00 02 00 00 10  |d...............|
00000050  00 00 00 00 01 24 33 33  99 99 99 66 99 99 99 99  |.....$33...f....|
00000060  99 66 33 99 99 99 99 66  33 33 33 33 33           |.f3....f33333|
0000006d

DosBox के तहत आसानी से चलाया जा सकता है; आउटपुट एक .SND फ़ाइल का नाम है SNDयहाँ इसके आउटपुट का एक FLAC संस्करण है (और यहाँ .COM फ़ाइल)।

टिप्पणी विधानसभा:

    org 100h

start:
    ; close stdout
    mov ah,3eh
    mov bx,1
    int 21h
    ; open snd
    mov ah,3ch
    xor cx,cx
    mov dx,filename
    int 21h
    ; write the header
    ; we used the `snd` part of the header as file name, back off one byte
    dec dx
    mov ah,9h
    int 21h
    mov si,data
.l:
    ; data read cycle
    ; read the current byte in cl (zero-extending to 16-bit)
    ; notice that ch is already zero (at the first iteration it's 0 from the
    ; int 21h/3ch, then we are coming from gen, which leaves cx to zero)
    mov cl,[si]
    ; move to next byte
    inc si
    ; generate the tone
    call gen
    ; generate the pause
    mov cl,50
    call gen
    ; repeat until we reach the end of data
    cmp si,eof
    jne .l
    ; quit
    ret

gen:
    ; generate a sawtooth wave at sampling frequency/2 Hz
    ; receives length (in samples>>4) in cx, with lowest bit indicating if
    ; it has to write a wave or a pause
    mov bl,cl
    ; shift the rightmost bit all the way to the left; this kills the
    ; unrelated data and puts a 128 in bl (if cx & 1 != 0)
    shl bl,7
    ; rescale the samples number
    shl cx,4
    ; zero the starting signal
    xor dl,dl
    ; prepare the stuff for int 21h
    mov ah,2h
.l:
    ; increment the signal
    add dl,bl
    ; write it
    int 21h
    ; decrement iteration count and loop
    loop .l
    ret

    ; .SND file header (4096 samples, mono, PCM)
header:
    db "."
    ; we also use "snd" as the file name
filename:
    db "snd",0,0,0,24,0xff,0xff,0xff,0xff,0,0,0,2,0,0,0x10,0,0,0,0,1
    ; terminator for int 21h/ah=9h
    db '$'
data:
    ; generated by gendata.py
    incbin "data.dat"
eof:

data.datइसके बाद के संस्करण शामिल मोर्स स्ट्रिंग के लिए एक आसान से उपयोग प्रतिनिधित्व है (कम बिट: ध्वनि पर / ध्वनि बंद, ऊपरी 7 बिट्स: नमूनों में ध्वनि लंबाई >> 4) Python स्क्रिप्ट द्वारा उत्पन्न:

#!/usr/bin/env python2
import sys

# source string
s = "..--- ----- .---- ....."
# samples
sr = 4096
conv =  {
            '.': 1 | (((sr/5) >> 4) & ~1),    # dot:   1/5 second, dI/dt=1
            '-': 1 | (((sr/5*3) >> 4) & ~1),  # line:  3/5 second, dI/dt=1
            ' ':     ((sr/5*2) >> 4) & ~1     # space: 2/5 second (+1/5 from the always-present pause), dI/dt=0 (silent)
        }
sys.stdout.write(''.join(chr(conv[a]) for a in s))

यदि आप चार बाइट्स बचा सकते हैं, तो आपको आवश्यक रूप से फ़ाइल एक्सटेंशन की आवश्यकता नहीं है।
मार्टिन एंडर

4
@ मार्टिनबटनर: वास्तव में, यह मुझे 3 बाइट्स बचाने की अनुमति देता है। aकी a.sndबस SND हैडर, जो साथ शुरू होता है से पहले डाल दिया है .sndएक शून्य बाइट के बाद, तो मैं मिल .sndमुक्त करने के लिए हिस्सा है और मैं अपने शून्य टर्मिनेटर रीसायकल। इसके अलावा, यह तथ्य कि फ़ाइल नाम के बाद हेडर एक बाइट शुरू करता है, मुझे inc dxएक mov dx, header(3 बाइट्स) के बजाय हेडर (1 बाइट) में स्थानांतरित करने की अनुमति देता है । ओटोह, अगर मुझे इसे .sndअकेले कहने की अनुमति थी तो मैं दो बाइट्स बचा सकता था, लेकिन मुझे यकीन नहीं है कि असली डॉस की अनुमति होगी (डॉस के तहत विस्तार का उपचार काफी अजीब था)।
मट्टियो इटालिया

मैंने फ़ाइल को कॉल करने के साथ कुछ परीक्षण किए .SND: मुझे .SNDडोसबॉक्स पर मिला , फ्रीडोस SND~1पर, और मुझे "असली" डॉस पर कुछ और उम्मीद है; इस प्रकार, यह निश्चित रूप से "अपरिभाषित व्यवहार" क्षेत्र है। अंत में, मैंने फ़ाइल को कॉल करने के साथ समझौता किया SND(1 बाइट हटाए जाने के कारण कम है a, inc dxजो - की लागत को ध्यान में रखते हुए - जो बन जाता है dec dx)।
मत्तेओ इटालिया

8

गणितज्ञ - १३०

r = Riffle;
s = SoundNote;
Export["m.mid", 
 Sound@
   r[Flatten@
     r[
       s[0,.4(Boole@#+.5)]&/@Array[#>4&,5,5-#]&/@{2,0,1,5},
       (b=None~s~#&)@.6
     ],b@.2
   ]
]

ऑनलाइन खेलना


ओह, तुम भी की Exportतरह infix संकेतन का उपयोग कर सकते हैं "m.mid"~Export~Sound@...
मार्टिन एंडर

(b=None~s~#&)@.6होना चाहिए (b=None~s~#&)@.4 इसके अलावा, आप का उपयोग कर 3 वर्ण बचा सकता हैr = Riffle; s = SoundNote; Export["m.mid", Sound@r[r[Table[s[0, If[{1, 2, 11}~MemberQ~k || k > 15, .2, .6]], {k, 20}], None~s~.2], None~s~.4, 11]]
DavidC

मार्टिन, लेकिन प्रत्येक ब्रेक में पहले से ही .2 था। .4 + .2
डेविड जेएन

@DavidCarraher आह, आप सही कह रहे हैं।
मार्टिन एंडर

7

पर्ल 5: 94 122 140

एसएनडी फ़ाइलों में सरल हेडर हैं, बाइनरी में प्रिंट करने की आवश्यकता नहीं है। इस संस्करण में 8khz मोनो SND फ़ाइल का निर्माण किया गया है जिसका नाम 'a' है:

open A,'>a';print
A".snd",pack"N*",24,-1,2,8e3,1,map{(--$|x3)x(894261072>>$_&1?1600:400)}0..39

परिणाम फ़ाइल

पुराना हल। एक 1khz 8-बिट मोनो WAV फ़ाइल को 'a' नाम देता है:

open
A,'>a';print
A pack"A4lA8lssllssA4ls*",RIFF,17040,WAVEfmt,16,1,1,(1e3)x2,1,8,data,17004,map{($_)x(894261072>>$v++&1?400:100)}(255,0)x20

परिणाम फ़ाइल

122 वर्णों को प्राप्त करने के लिए मुझे शीर्ष लेख को बाइनरी में पैक करने के बजाय पेस्ट करना था जो कोड को यहां कॉपी करना कठिन बनाता है। बच गया संस्करण है:

open
A,'>a';print
A"RIFF\x90B\0\0WAVEfmt \0\0\0\0\0\xe8\0\0\xe8\0\0\0\0datalB\0\0",pack"s*",map{($_)x(894261072>>$v++&1?400:100)}(255,0)x20

Base 122 वास्तविक बाइट समाधान का एन्कोडिंग:

b3BlbgpBLCc+YSc7cHJpbnQKQSJSSUZGkEIAAFdBVkVmbXQgEAAAAAEAAQDoAwAA6AMAAAEACABk
YXRhbEIAACIscGFjayJzKiIsbWFweygkXyl4KDg5NDI2MTA3Mj4+JHYrKyYxPzQwMDoxMDApfSgy
NTUsMCl4MjA=

यू .auएक्सटेंशन का उपयोग कर सकता है , हो सकता है। बहुत बढ़िया!
एफ। होरी

7

AWK: 172 170 बाइट्स

... और किसी भी लहर पुस्तकालय का उपयोग किए बिना! (*)

BEGIN{for(;++i<204;){d=d"\177\177\n";D=D"\n\n"}t=d d d D;d=d D;T=D D D;u=t t t;print".snd\0\0\0\30\0\0\221\306\0\0\0\2\0\0\20\0\0\0\0\1"d d u T u t t T d u t T d d d d d}

यह एक सन au ऑडियो फाइल को स्टडआउट पर आउटपुट करता है जिसे vlc (दूसरों के बीच) द्वारा चलाया जा सकता है। जबकि au फ़ाइलफ़ॉर्मट में कोई नमूना दर सीमा नहीं है, VLC 4096 हर्ट्ज के लिए एक नमूना दर हीनता के साथ किसी भी फ़ाइल को चलाने से इनकार करता है, इसलिए मैंने इस आवृत्ति का उपयोग किया

संपादित करें: ड्रॉपबॉक्स पर परिणामी ऑडियो फ़ाइल के लिए लिंक


(*) क्या इसके लिए बोनस नहीं होना चाहिए? ; ओ)


आप में जगह की जरूरत नहीं है d=d "\177... संघनन। कि एक बाइट बचाता है। लेकिन जब मैं परिणामी ऑडियो फ़ाइल बजाता हूँ, तो ऐसा लगता है कि यह 5 के अंतिम डिटेल को याद कर रहा है
मार्क रीड

धन्यवाद। मैंने उसी ट्रिक का उपयोग करके एक दूसरे बाइट को दूसरे बाइट से बचाया। मैं सिर्फ vlc 2.1.1 के साथ ऑडियो फ़ाइल की जाँच की और यह पूरा लगता है। आपने किस खिलाड़ी का उपयोग किया?
LeFauve

मैं ओएस एक्स पर क्विकटाइम प्लेयर का उपयोग कर रहा था। मैंने इसे वीएलसी में खोला और यह ठीक लगता है, इसलिए कोई बात नहीं। Apple की गलती है, आपकी नहीं।
मार्क रीड

7

पायथन, 155

अजगर निर्मित लहर मॉड्यूल का उपयोग करता है।

import wave
n=wave.open(*"nw")
k=17837
n.setparams((2,2,k,0,"NONE",0))
h=k*1314709609
while h:[n.writeframes(`i%9`)for i in[0]*(2-h%2)*k+range(h%4*k)];h/=4

नामक फाइल को लिखता है n

धन्यवाद लूप के लिए सूची समझ का उपयोग करने के सुझाव के लिए Sp3000 (इससे इंडेंटेशन को थोड़ा हटाने में मदद मिली)।

इसे सुनें:

https://soundcloud.com/bitpwner/morse-the-new-year-2015

यहाँ SoundCloud का लिंक दिया गया हैयदि आपके लिए एम्बेडेड प्लेयर काम नहीं करता है, तो ।

टिप्पणी कोड:

import wave
n=wave.open("n.wav","w")         # Open a wav file for writing
k=44100                            
n.setparams((2,2,k,0,"NONE","")) # Sets the minimal params for the wav file
w=n.writeframes
h=23450475295733                 # Contains base-4 morse: '.'=1, '-'=3, ' '=0
while h:
    for i in range(h%2*k):w(h%4*chr(i%99)) # Writes saw-tooth signal using i%99
    w((2-h%2)*k*" ")                       # Writes the pauses
    h/=4

चूँकि wएक साइड-इफ़ेक्ट है, मुझे लगता है कि आप दो बाइट्स को बचाने के लिए सूची बना सकते हैं:while h:[w(h%4*chr(i%99))for i in range(h%2*k)];w((2-h%2)*k*" ");h/=4
Sp3000

@ Sp3000 oo ... उस डी = के बारे में नहीं सोचा था। धन्यवाद!
दोपहर

यह एक मूर्खतापूर्ण प्रश्न हो सकता है, लेकिन यदि एच को प्रत्येक पुनरावृत्ति के लिए 4 से विभाजित किया जाता है, तो लूप कैसे बंद हो जाता है?
डेरेक 會 會 ere

@ डेरेक 會 功夫 on अजगर के लिए, जब h 0 हो जाता है, तो यह लूप को समाप्त करते हुए गलत का मूल्यांकन करता है। जबकि लूप एक गोल्फिंग ट्रिक है जो "11333033333013333011111" क्रम में मूल्यों को एक-एक करके निकालता है।
वेक्टर

@bitpwner मुझे ऐसा लगता है कि 0 गलत का मूल्यांकन करता है, लेकिन क्या यह नहीं है कि सभी सकारात्मक संख्याओं के लिए, यदि आप इसे किसी अन्य सकारात्मक संख्या से विभाजित करते हैं, तो कोई उपाय नहीं है जिससे आप इसे 0 में से निकाल सकें?
डेरेक 會 功夫

6

सी #, 556 552 536 535 516 506 503 491 483 बाइट्स

पुस्तकालय Wav.Net का उपयोग करता है

using System;using System.Linq;namespace WavDotNet.Core{using S=Samples<float>;class P{static void Main(){var w=new WavFileWrite<float>("a",9999);var b=new Tools.Generators.Sawtooth(9999);Func<long,float,S>g=(t,a)=>b.Generate32Bit(new TimeSpan(t),99,a);var l=2500000;S x=g(l,1),y=g(l*3,1),z=g(l*3,0),_=g(l,0),v=new S(new[]{x,_,x,_,y,_,y,_,y,z,y,_,y,_,y,_,y,_,y,z,x,_,y,_,y,_,y,_,y,z,x,_,x,_,x,_,x,_,x}.SelectMany(c=>c).ToList());w.AudioData.Add(new Channel<float>(v,0));w.Flush();}}}

नामक फ़ाइल में आउटपुट करता है a

ड्रॉपबॉक्स पर होस्ट किए गए परिणाम

अघोषित कोड:

using System;
using System.Linq;
namespace WavDotNet.Core
{
    using FloatSamples = Samples<float>;
    class P
    {
        static void Main()
        {
            var file = new WavFileWrite<float>("output.wav", 9999);
            var sawtoothGen = new Tools.Generators.Sawtooth(9999);
            Func<long, float, FloatSamples> generate = (t, amplitude) => sawtoothGen.Generate32Bit(new TimeSpan(t), 99, amplitude);
            var length = 2500000;
            FloatSamples shortBeep = generate(length, 1),
            longBeep = generate(length * 3, 1),
            shortPause = generate(length * 3, 0),
            longPause = generate(length, 0),
            allSamples = new FloatSamples(new[] { shortBeep, longPause, shortBeep, longPause, longBeep, longPause, longBeep, longPause, longBeep, shortPause,
                longBeep, longPause, longBeep, longPause, longBeep, longPause, longBeep, longPause, longBeep, shortPause, 
                shortBeep, longPause, longBeep, longPause, longBeep, longPause, longBeep, longPause, longBeep, shortPause, 
                shortBeep, longPause, shortBeep, longPause, shortBeep, longPause, shortBeep, longPause, shortBeep }
                .SelectMany(c => c).ToList());
            file.AudioData.Add(new Channel<float>(allSamples, 0)); // 0 == ChannelPositions.Mono
            file.Flush();
        }
    }
}

5

अजगर 3 2, 191 188 174 171 (कोई पुस्तकालय नहीं)

Wav फ़ाइलें अविश्वसनीय रूप से सरल हैं। पुस्तकालयों के बिना प्रयास करना चाहता था। किसी कारण से मेरी फ़ाइलें Windows Media Player को क्रैश करने लगती हैं। जल्दी समयकाम करता हैफ़ाइल में आधे रास्ते से बाहर। ऑडिशन का उपयोग करके एक बड़ी नमूना दर में रूपांतरण इसे ठीक करता है।

अद्यतन : पर्ल उत्तर से कुछ अनुकूलन लागू किया गया। अब केवल नाम के साथ nऔर 1000 हर्ट्ज के नमूने में आउटपुट होता है । तदनुसार जानकारी संपादित करें।

w,s=200*" ",50*"~~  "
a,b,c=s+w,3*s+w,2*w
open(*"nw").write("RIFF\xD46\0\0WAVEfmt \20\0\0\0\1\0\1\0\xE8\3\0\0\xE8\3\0\0\1\0\10\0data\xB06\0\0"+a*2+b*3+c+b*5+c+a+b*4+c+a*5)

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

w,s=1600*" ",200*"~~~~    "
a,b,c=s+w,3*s+w,2*w
open("n.wav","wb").write("RIFF\244\265\1\0WAVEfmt \20\0\0\0\1\0\1\0@\x1f\0\0@\x1f\0\0\1\0\10\0data\200\265\1\0"+a*2+b*3+c+b*5+c+a+b*4+c+a*5)

4

सी # ~ 485 बाइट्स

Wav.Net लाइब्रेरी का उपयोग करना ।

using WavDotNet.Core;namespace System.Collections.Generic{using f=Single;class T{static void Main(){var i=new WavFileWrite<f>("x",8000);Func<long,Samples<f>>g=d=>new WavDotNet.Tools.Generators.Sawtooth(8000).Generate32Bit(new TimeSpan(d),600,1);var s=new List<f>();var k="..--- ----- .---- .....";foreach(var c in k){s.AddRange(c=='.'?g(2000000):g(6000000));s.AddRange(new f[1600]);if(c==' '){s.AddRange(new f[3200]);}}i.AudioData.Add(new Channel<f>(new Samples<f>(s),0));i.Flush();}}}

और यहाँ है आउटपुट है।

पठनीय संस्करण,

using WavDotNet.Core;

namespace System.Collections.Generic
{
    using f = Single;

    class T
    {
        static void Main()
        {
            var i = new WavFileWrite<f>("x", 8000);
            Func<long, Samples<f>> g = d => new WavDotNet.Tools.Generators.Sawtooth(8000).Generate32Bit(new TimeSpan(d), 600, 1);
            var s = new List<f>();
            var k = "..--- ----- .---- .....";

            foreach (var c in k)
            {
                s.AddRange(c == '.' ? g(2000000) : g(6000000));
                s.AddRange(new f[1600]);

                if (c == ' ')
                {
                    s.AddRange(new f[3200]);
                }
            }

            i.AudioData.Add(new Channel<f>(new Samples<f>(s), 0));
            i.Flush();
        }
    }
}

आप अपनी कक्षा को नेमस्पेस सिस्टम के अंदर लपेटकर कुछ बाइट्स बचा सकते हैं। कॉलेक्शन।सामान्य (जो वास्तव में काम करता है)। कुछ अनावश्यक व्हाट्सएप भी हैं जिन्हें आप हटा सकते हैं।
प्रोग्रामफॉक्स

4

C # 382 333bytes

किसी भी गैर-मानक पुस्तकालयों का उपयोग नहीं करता है, एक 8बिट्स-प्रति-नमूना 44100samples-per-second wav लिखता है, जो मुझे आशा है कि एक वैध हेडर है (WMP / .NET / ऑडेसिटी में खुशी से खेलना / लोड करना लगता है)।

शीर्षलेख बेस 64 एनकोडेड है, और मोर्स को सिग्नल ऑन / ऑफ के रूप में इनकोड किया गया है जो एक ही लंबे (64 बिट्स) में संग्रहीत है क्योंकि पिछले 5 बिट्स पहले जैसे ही हैं।

नतीजा मिल सकता है यहां है

गोल्फ कोड:

using System.IO;class P{static void Main(){using(var w=new FileStream("w.wav",FileMode.Create)){int i=0,d=9980;w.Write(System.Convert.FromBase64String("UklGRhCCCgBXQVZFZm10IBAAAAABAAEARKwAAESsAAABAAgAZGF0YeyBCgA="),0,44);for(var k=5899114207271221109L;i++<d*69;w.WriteByte((byte)(System.Math.Sin((k>>(i/d)%64&1)*i*0.1)*127+127)));}}}

टिप्पणियों के साथ:

using System.IO;

class P
{
    static void Main()
    {
        using(var w=new FileStream("w.wav",FileMode.Create))
        {
            int i=0,d=9980; // d is samples per tone

            // write wav header
            w.Write(System.Convert.FromBase64String("UklGRhCCCgBXQVZFZm10IBAAAAABAAEARKwAAESsAAABAAgAZGF0YeyBCgA="),0,44);

            for(var k=5899114207271221109L; // 0101000111011101110111010001110111011101110111000111011101110101 as long
                i++<d*69; // 69 is number of bits
                w.WriteByte((byte)(
                    System.Math.Sin(
                        (k>>(i/d)%64&1) // read bit (0 or 1)
                        *i*0.1) // mul by ticker (sin(0) = 0)
                    *127+127)) // make sensible
            );
        }
    }
}

चुनौती को समाप्त करने के लिए फ़ाइल के नाम की आवश्यकता नहीं होती है .wav, इसलिए आप वहां 4 बाइट बचा सकते हैं।
प्रोग्रामफॉक्स

69 बिट्स PWM कोड को 64 बिट स्थिरांक में फिट करने का अच्छा तरीका है। मैं ऐसा कुछ करने की कोशिश कर रहा था, लेकिन शायद मैं आपके तरीके का उपयोग करके अपने कोड को छोटा नहीं कर सकता था।
नटकी

2

सुपर कोलाइडर , 625 605 बाइट्स

ऑडियो प्रोग्रामिंग भाषा प्रस्तुत!

आउटपुट bएआईएफएफ प्रारूप में एक फ़ाइल के लिए लिखा गया है । विंडोज मीडिया प्लेयर इसे खोलने में विफल रहता है, लेकिन यह वीएलसी मीडिया प्लेयर में ठीक काम करता है। उत्पन्न फ़ाइल aएक OSC फ़ाइल है

c=0;d=0;f={c=c+d;d=0.2;[c,[\s_new,\w,1001,0,0,\freq,800]]};g={c=c+d;d=0.2;[c,[\n_free,1001]]};h={c=c+d;d=0.6;[c,[\s_new,\w,1001,0,0,\freq,800]]};i={c=c+d;d=0.6;[c,[\n_free,1001]]};x=[f.value,g.value,f.value,g.value,h.value,g.value,h.value,g.value,h.value,i.value,h.value,g.value,h.value,g.value,h.value,g.value,h.value,g.value,h.value,i.value,f.value,g.value,h.value,g.value,h.value,g.value,h.value,g.value,h.value,i.value,f.value,g.value,f.value,g.value,f.value,g.value,f.value,g.value,f.value,i.value];Score.recordNRT(x,"morse.osc","Morse2015.aiff");SynthDef("w",{arg freq=440;Out.ar(0,SinOsc.ar(freq,0,0.2))}).writeDefFile;

मैंने कुछ सुपरकोलाइडर फ़ंक्शन बनाए: fएक छोटी बीप, gएक छोटा ब्रेक, hएक लंबी बीप औरi एक लंबा ब्रेक। सुपरकोलाइडर को प्रत्येक साइन लहर के लिए शुरुआती स्थिति की आवश्यकता होती है और लंबाई की नहीं, इसलिए मुझे ऐसे कार्य बनाने होंगे जो सही शुरुआत की स्थिति के साथ एक लहर उत्पन्न करें और मुझे हर बार उन कार्यों को कॉल करना होगा जब मुझे साइन लहर की आवश्यकता होगी। (मैं पुन: उपयोग करने के लिए एक चर में एक विशिष्ट लंबाई के साथ एक लहर को स्टोर नहीं कर सका)। \wपरिभाषा कोड ब्लॉक के अंत में बनाया जाता है।

मेरे विंडोज कंप्यूटर पर, यह ऑडियो फ़ाइल को मेरे कोड के समान निर्देशिका में सहेजता नहीं था, लेकिन इस निर्देशिका में:

C:\Users\MyName\AppData\Local\VirtualStore\Program Files (x86)\SuperCollider-3.6.6

ड्रॉपबॉक्स पर होस्ट किए गए परिणाम

इंडेंटेशन के साथ कोड:

c = 0;
d = 0;
f = { c=c+d;d=0.2;[ c, [ \s_new, \w, 1001, 0, 0,  \freq, 800 ] ] };
g = { c=c+d;d=0.2; [ c, [\n_free, 1001]] };
h = { c=c+d;d=0.6; [ c, [ \s_new, \w, 1001, 0, 0, \freq, 800]]};
i = { c=c+d;d=0.6;[ c, [\n_free, 1001]] };

x = [ f.value, g.value, f.value, g.value, h.value, g.value, h.value, g.value, h.value, i.value,
      h.value, g.value, h.value, g.value, h.value, g.value, h.value, g.value, h.value, i.value,
      f.value, g.value, h.value, g.value, h.value, g.value, h.value, g.value, h.value, i.value,
    f.value, g.value, f.value, g.value, f.value, g.value, f.value, g.value, f.value, i.value
];

Score.recordNRT(x, "morse.osc", "Morse2015.aiff");

SynthDef("w",{ arg freq = 440;
    Out.ar(0,
         SinOsc.ar(freq, 0, 0.2)
    )
}).writeDefFile;

2

चुस्क - 1195 217 201 147 145 144

ChucK एक ऑडियो प्रोग्रामिंग भाषा है। bitpwner ने मुझे 201 बाइट्स से 147 बाइट्स तक लाने में मदद की।

SinOsc s;WvOut w=>blackhole;"y"=>w.wavFilename;int j;for(1016835=>int i;i>0;2/=>i){s=>w;j++;(i%2?200:600)::ms=>now;s=<w;(j%5?200:600)::ms=>now;}

यदि आपके लिए एम्बेडेड प्लेयर काम नहीं करता है, तो यहां साउंडक्लाउड का सीधा लिंक है


1
मेरे जवाब में इस्तेमाल की गई एक समान चाल के साथ इसे 164 तक कम करने का प्रबंधन:WvOut w=>blackhole;"x"=>w.wavFilename;SinOsc s=>w;0=>int j;for(1016835=>int i;i>0;2/=>i){j++;300=>s.freq;(600-i%2*400)::ms=>now;s=<w;(j%5>0?200:600)::ms=>now;s=>w;}
वेक्टर '

@bitpwner आप jसरणी से बचने के लिए उपयोग कर रहे हैं ?
केएसएफटी

1016835बाइनरी में जादू की संख्या है 11111000010000000011jक्या प्रत्येक अंक 2015(प्रत्येक अंक में 5 ध्वनियां हैं) के बीच रुकने का ट्रैक रखने के लिए है ।
वेक्टर

@bitpwner आह, मैंने भी ऐसा नहीं देखा। यह एक बहुत अच्छा विचार है!
केएसएफटी

आप इसे अपने उत्तर में संपादित कर सकते हैं ताकि बाउंटी की अधिक संभावना हो। imo, सुधार एक नए जवाब को सही ठहराने के लिए बहुत कुछ नहीं है sinc आप पहले से ही चक के बारे में पता लगाने के काम के थोक किया;)
वेक्टर

2

सेसाउंड, 140 + 40 = 180

ऑडियो प्रोग्रामिंग भाषा।

यह ऑर्केस्ट्रा फाइल है:

instr 1
a1 oscil 2^15,990,1
out a1
endin

और यह स्कोर फ़ाइल है:

f1 0 512 10 1
t0 300
i1 0 1
i1 2
i1 40
i1 60
i1 62
i1 64
i1 66
i1 68
i1 4 3
i1 8
i1 12
i1 18
i1 22
i1 26
i1 30
i1 34
i1 42
i1 46
i1 50
i1 54

आकार को अंतिम पंक्ति के बाद कोई अतिरिक्त व्हाट्सएप, सिंगल लाइन टर्मिनेटर (UNIX) और कोई टर्मिनेटर नहीं माना जाता है।

आप उन्हें csound कमांड का उपयोग करके आमंत्रित करते हैं:

csound morse.org morse.sco

डिफ़ॉल्ट रूप से "test.aif" नाम से वर्तमान निर्देशिका में एक आउटपुट फ़ाइल का उत्पादन होगा

https://soundcloud.com/whatfireflies/morse-code-golf-in-csound/s-qzsaq

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

पुनश्च: मैं Csound में कुल नौसिखिया हूँ, किसी भी गोल्फ युक्तियाँ की सराहना कर रहे हैं, विशेष रूप से स्कोर फ़ाइल के विषय में!


आह, मैं सीएसाउंड का इंतजार कर रहा था। अगर किसी ने इसमें कोई जवाब नहीं दिया होता, तो मैं शायद खुद लिखने की कोशिश करता। :)
मार्टिन एंडर

1

ब्रेनफक , 649 बाइट्स

++[>-[+>++[++<]>]>[>..........-..........+<-]-[+>++[++<]>]>[....................-]<<<<<-]+++[>+++[>-[+>++[++<]>]>[>..........-..........+<-]<<<-]-[+>++[++<]>]>[....................-]<<<-]-[+>++[++<]>]>[....................-]+++++[>-[+>++[++<]>]>[....................-]+++[>-[+>++[++<]>]>[>..........-..........+<-]<<<-]<<<-]+++[>-[+>++[++<]>]>[....................-]<<<-]-[+>++[++<]>]>[>..........-..........+<-]++++[>-[+>++[++<]>]>[....................-]+++[>-[+>++[++<]>]>[>..........-..........+<-]<<<-]<<<-]++[>-[+>++[++<]>]>[....................-]<<<-]+++++[>-[+>++[++<]>]>[....................-]-[+>++[++<]>]>[>..........-..........+<-]<<<<<-]

यह 8 बिट अहस्ताक्षरित नमूनों का एक क्रम उत्पन्न करता है जिसे 8000 नमूनों पर प्रति सेकंड जैसे कि aplayलिनक्स पर उपकरण के साथ खेला जा सकता है । बीएफ स्थिरांक की तालिका का श्रेय

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

थोड़े कम गोल्फ वाले

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