নতুন বছরের মোর্স


33

এটি সাপ্তাহিক চ্যালেঞ্জ # 1। থিম: অডিও প্রসেসিং

আপনার কাজ হ'ল একটি প্রোগ্রাম লিখুন যা ডিস্কে একটি অডিও ফাইল লিখবে (আপনার পছন্দের বিন্যাসে), যার জন্য মোর্স কোড রয়েছে 2015, অর্থাৎ

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

আপনি বিভাগগুলির জন্য যেকোন ধরণের শব্দ চয়ন করতে পারবেন যেমন একটি একক-ফ্রিকোয়েন্সি সাইন ওয়েভ, একটি জ্যা, শব্দ, কোনও উপকরণ (যেমন MIDI ফাইলগুলি ব্যবহার করা) যতক্ষণ না এটি শ্রবণযোগ্য। তবে সময় নির্ধারণে কিছু বাধা রয়েছে:

  • সংক্ষিপ্ত বিভাগগুলির দৈর্ঘ্য কমপক্ষে 0.2 সেকেন্ড হওয়া উচিত।
  • দীর্ঘ বিভাগগুলি সংক্ষিপ্ত বিভাগগুলির হিসাবে কমপক্ষে 3 বার হওয়া দরকার।
  • একটি সংখ্যার মধ্যে বিভাগগুলির মধ্যে বিরতিগুলি সংক্ষিপ্ত বিভাগগুলির সমান দৈর্ঘ্য হওয়া উচিত।
  • অঙ্কগুলির মধ্যে বিরতিগুলি দীর্ঘ সেগমেন্টের সমান দৈর্ঘ্য হওয়া উচিত।
  • প্রতিটি বিভাগ এবং বিরতি সেগমেন্ট / বিরতির এই ধরণের গড় দৈর্ঘ্য থেকে 10% অবধি বিচ্যুত হতে পারে।
  • পুরো অডিও ফাইলটি 30 সেকেন্ডের বেশি হতে পারে না।

বিরতিগুলি পুরোপুরি নিঃশব্দ হওয়ার দরকার নেই, তবে মোর্স বিভাগগুলি বিরতিগুলির থেকে শ্রুতিমধুরভাবে আরও জোরে হওয়া উচিত।

নোট আপনি যে আছে একটি অডিও ফাইলটি লিখতে। আপনি কেবল শব্দটি প্লে করতে পারবেন না, যেমন সিস্টেম বীপগুলি ব্যবহার করে। ফাইল ফর্ম্যাট এবং অডিও জেনারেশন পরিচালনা করতে আপনাকে কোনও ধরণের লাইব্রেরি ব্যবহার করার অনুমতি দেওয়া হয়েছে তবে মোরস এনকোডিংয়ের জন্য আপনাকে বিল্ট-ইন বৈশিষ্ট্যগুলি ব্যবহার করা উচিত নয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

অনুগ্রহ করে ফলাফল অডিও ফাইলের একটি আপলোডের সাথে সংযোগ বিবেচনা করুন (সাউন্ডক্লাউড বা অনুরূপ), যাতে লোকেরা আপনার কোডটি চালা না করেই ফলাফলটি পরীক্ষা করতে পারে। আপনি যদি সাউন্ডক্লাউডে আপলোড করেন তবে দয়া করে ট্র্যাকের অনুমতি ট্যাবে ডাউনলোডগুলি সক্ষম করার বিষয়টি নিশ্চিত করুন।

যদি আপনার আউটপুট একটি অস্বাভাবিক ফাইল ফর্ম্যাট ব্যবহার করে তবে দয়া করে কীভাবে এটি খেলবেন এবং / অথবা এটিকে আরও সাধারণ ফর্ম্যাটে রূপান্তর করুন এবং এটি আপলোড করবেন সে সম্পর্কে কিছু তথ্য যুক্ত করুন।

উদাহরণ ট্র্যাক

এটি একটি ম্যানুয়ালি উত্পাদিত উদাহরণ ট্র্যাক যা স্পেকের সাথে সামঞ্জস্য করে এবং মরস বিভাগগুলির জন্য মাইক্রোফোনের পটভূমির শব্দ (সুনির্দিষ্ট হওয়ার জন্য) ব্যবহার করে noise যদি এম্বেড থাকা প্লেয়ার আপনার পক্ষে কাজ না করে তবে এখানে সাউন্ডক্লাউডের একটি লিঙ্ক রয়েছে

অনুগ্রহ বিবরণ

আমি অডিও প্রোগ্রামিং ভাষায় স্বল্পতম জমা দেওয়ার জন্য অনুদান দেব , অর্থাত এমন একটি ভাষা যা শব্দ সংশ্লেষণের জন্য ডিজাইন করা হয়েছে। এই তালিকাটি সম্পূর্ণ নয়, সুতরাং অন্য কোনও অডিও প্রোগ্রামিং ভাষা ব্যবহার করতে নির্দ্বিধায় অনুভব করুন, যদি আপনি কোনও এটি জানেন। তুমি যদি তা না হয় তাহলে আপনি একটি অডিও প্রোগ্রামিং ভাষা হিসেবে শ্রেণীভুক্ত করে ব্যবহার করতে চান কিছু ভাষা কিনা, মন্তব্য আমাকে বা জানাতে অনুগ্রহ করে চ্যাট , এবং আমরা যে আলোচনা করতে পারেন।

মনে রাখবেন যে আপনার জমা দেওয়ার এখনও সমস্ত নিয়ম মেনে চলতে হবে - বিশেষত, এটি একটি ফাইল লিখতে হবে, যা সমস্ত অডিও প্রোগ্রামিং ভাষায় সম্ভব নাও হতে পারে। উদাহরণস্বরূপ, আমি যতদূর বলতে পারি, গিবার কেবল শব্দটি চালাতে পারে এবং এটি কোনও ফাইলে সংরক্ষণ করতে পারে না।


1
অতিরিক্ত চ্যালেঞ্জ: এটিকে সত্যই সুন্দর করুন।
কাজ ওল্ফ

6
@Mew মুরস সম্ভবত শব্দ করতে পারেন?
মার্টিন এেন্ডার

1
ব্রেইনফ ** কে এটি করার ফলে এটি অনেকগুলি বোনাস স্তরে দুর্দান্ত হয়ে উঠবে।
মাস্তে

@ বিস্তৃত সম্ভবত, তবে দুর্ভাগ্যক্রমে, BF কোনও ফাইলে লিখতে পারে না। ;) (আমি পরের বারের সাথে আরও সুস্বাদু হওয়ার বিষয়টি নিশ্চিত করব sure)
মার্টিন এন্ডার

সংগীত স্বরলিপি বিন্যাসগুলি কি কেবল স্কোর ধারণ করে এবং কোনও অডিও (.mid, .abc নীচে প্রদর্শিত হয়) "অডিও ফাইল" হিসাবে গ্রহণযোগ্য বলে বিবেচিত হবে? "ট্র্যাকার" ফর্ম্যাটগুলি সম্পর্কে কী, এতে নমুনা এবং স্কোর উভয়ই থাকে তবে কোনও রেন্ডার করা অডিও ট্র্যাক (.mod, .xm) নেই?
টোবিয়া

উত্তর:


4

Awk BASH: 66 86 67 74 বাইট

মার্টিন বাটনার অনুরোধ অনুসারে, আমি একটি টেম্পো যুক্ত করেছি যেহেতু এবিসি নোটেশন মানটি যাচাই করার পরে , এটির জন্য কোনও নির্ধারিত ডিফল্ট মান নেই (এটি নির্দেশ করার জন্য নটকি ধন্যবাদ)।
প্রশ্নটি স্পষ্টভাবে "ডিস্কের একটি ফাইল" চেয়েছিল বলে আমি STDOUT এর পরিবর্তে ডিস্ক ফাইল (ক) এও লিখি।

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

আমি 99 এর একটি টেম্পো রেখেছি যার ফলে অডিও ফাইলটি 22 সেকেন্ড স্থায়ী হয়; এটি আমার আগের সংস্করণটির চেয়ে ধীরে ধীরে তবে কমপক্ষে এখন এটি প্রতিটি এবিসি প্লেয়ারের সমান দৈর্ঘ্যের বলে মনে করা হয় এবং এটি 30 সেকেন্ডের মধ্যে ফিট করে।

দেখতে দেখতে ... অনেকটা আগের সংস্করণের মতো দেখতে পাবেন: 2015 এর স্কোর এর শেষ (আমি আশা করি) version

এখানে নতুন মিদি ফাইল

প্রথম বেস সংস্করণ (টেম্পো অনুপস্থিত)

আমি কেন প্রথমে এটি ভাবিনি ...: ও)

এটি একই ফলাফলের জন্য এডাব্লুকে-র তুলনায় 22 কম বাইট

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

এডাব্লুকে-র পূর্ববর্তী সংস্করণের মতো এটি স্ট্যান্ডআউটে একটি বৈধ "এবিসি" নোটেশন ফাইল লিখেছে ("এল" বিবৃতিটি alচ্ছিক ছিল তা জানতে টোবিয়া ধন্যবাদ)

দেখে মনে হচ্ছে: "2015" পার্টিশনের সর্বশেষ সংস্করণ

এটি ঠিক আগের সংস্করণটির মতো শোনাচ্ছে ।

এডাব্লুকে-র পূর্ববর্তী সংস্করণ (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";}

এটি এখনও একটি বৈধ "abc" ফাইল, যা দেখতে এটি দেখতে: 2015 এর স্কোর

এখানে নতুন মিডি ফাইলটি (আমি 30 সেকেন্ডের সীমাতে থাকার জন্য টেম্পোটি ত্বরণ করেছি)।

এডব্লিউকেতে প্রথম সংস্করণ (66 66 বাইট):

এটি আমার আগের উত্তরের চেয়ে অনেক কম আকর্ষণীয় তবে এটি অনেক খাটো, তাই:

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

এটি একটি বৈধ "এবিসি" ফাইল আউটপুট দেয়, যা (অন্যদের মধ্যে) ইজিএবিসিতে পড়তে পারে। এটি দেখতে এটির মতো হবে: ঘোড়াতে "2015" এর স্কোর

এবং এটি (মিডি ফাইল) এর মতো শোনাবে । + +


আপনার এডাব্লুকে মোড়ক ছাড়া এবিসি হিসাবে পোস্ট করা উচিত এবং অনুগ্রহের দাবি দাবী করা উচিত!
টোবিয়া

টোবিয়া, এবিসি একটি ফাইল ফর্ম্যাট, প্রোগ্রামিংয়ের ভাষা নয়। এবং এখনও অবধি by 86 বাইটের সাথে এটিই সংক্ষিপ্ত উত্তর ... এখন প্রশ্নটি "উত্তরটি বৈধ হওয়ার জন্য প্রয়োজনীয় শব্দগুলি থেকে ফলস্বরূপ শব্দটি কি যথেষ্ট পরিমাণে বন্ধ?"
লেফাউভ

আমি এটিকে ফাইল ফর্ম্যাটও বলতাম, তবে ওপি লিঙ্কিত উইকির পৃষ্ঠাটি এটি একটি সাউন্ড প্রোগ্রামিং ভাষা হিসাবে তালিকাভুক্ত করে। আমি আরও উপযুক্ত সিএসাউন্ড প্রোগ্রামের পাশাপাশি আমার নিজের এবিসি ফাইলটি এন্ট্রি হিসাবে বন্ধ করে দিয়েছি। আসুন দেখি তারা এ সম্পর্কে কী চিন্তা করে।
টোবিয়া

এটি উইকিসের সমস্যা ... কিছু সময় লোকেরা এগুলি সম্পাদন করে ভুল করে: ও)। লোটের বিভিন্ন জিনিসকে "প্রোগ্রামিং ভাষা" বলা যেতে পারে তবে আমি মনে করি এবিসি সেগুলির মধ্যে একটি নয়। যাইহোক, "এল" findingচ্ছিক ছিল তা খুঁজে বের করার জন্য ধন্যবাদ। এটি আমাকে
কয়েকটা

"দীর্ঘ বিভাগগুলি সংক্ষিপ্ত বিভাগগুলির হিসাবে কমপক্ষে 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

ডসবক্সের অধীনে সহজেই চালানো যেতে পারে; আউটপুট একটি হল .SND ফাইল নামে SNDএখানে একটি এফএলএসি সংস্করণ তার আউটপুট (এবং এখানে .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) একটি পাইথন স্ক্রিপ্ট দ্বারা উত্পন্ন:

#!/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বিনামূল্যে জন্য অংশ এবং আমি তার শূন্য টারমিনেটর জিনিসকে। এছাড়াও, ফাইলের নামের পরে শিরোনামটি একটি বাইট শুরু করে তা আমাকে (3 বাইট) inc dxপরিবর্তে শিরোনামে (1 বাইট) সরানোর জন্য একটি ব্যবহার করতে দেয় mov dx, header। ওও, যদি আমাকে .sndকেবল এটির কল করার অনুমতি দেওয়া হত তবে আমি দুটি বাইট সংরক্ষণ করতে পারতাম, তবে আমি নিশ্চিত নই যে আসল ডস এটির অনুমতি দেবে (ডসের অধীনে এক্সটেনশনের চিকিত্সাটি বেশ অদ্ভুত ছিল)।
মাত্তেও ইটালিয়া

আমি ফাইল কলিং সঙ্গে কিছু পরীক্ষার করেনি .SND: আমি পেয়েছিলাম .SNDDosBox উপর, SND~1FreeDOS, এবং আমি "বাস্তব" ডস অন্য কিছু আশা; সুতরাং, এটি অবশ্যই "অপরিবর্তিত আচরণ" অঞ্চল। শেষ পর্যন্ত, আমি ফাইলটি কল করে স্থির করেছিলাম SND(মুছে ফেলার কারণে 1 বাইট কম a, যার দাম রাখে inc dx- যা হয় dec dx)।
মাত্তেও ইটালিয়া

8

গণিত - 130

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পারেন "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]]
ডেভিডসি

মার্টিন, তবে প্রতিটি বিরতিতে ইতিমধ্যে একটি .2 ছিল। .4 + .2
ডেভিডসি

@ ডেভিডকারারহর আহ, আপনি ঠিক বলেছেন
মার্টিন এেন্ডার

7

পার্ল 5: 94 122 140

এসএনডি ফাইলগুলির সহজ শিরোনাম রয়েছে, বাইনারি প্রিন্ট করার দরকার নেই। এই সংস্করণগুলি 'এ' নামক 8khz মনো এসএনডি ফাইল তৈরি করে:

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

ফলাফল ফাইল

পুরানো সমাধান। 'এ' নামে একটি 1khz 8-বিট মনো ডাব্লুএইভি ফাইল তৈরি করে:

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

আসল 122 বাইট সমাধানের বেস 64 এনকোডিং:

b3BlbgpBLCc+YSc7cHJpbnQKQSJSSUZGkEIAAFdBVkVmbXQgEAAAAAEAAQDoAwAA6AMAAAEACABk
YXRhbEIAACIscGFjayJzKiIsbWFweygkXyl4KDg5NDI2MTA3Mj4+JHYrKyYxPzQwMDoxMDApfSgy
NTUsMCl4MjA=

আপনি .auহয়ত এক্সটেনশন ব্যবহার করতে পারেন । সাবাশ!
এফ। হাউরি 8'15

7

এডাব্লুকে: 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}

এটি স্টাডাউটে একটি সান অ অডিও ফাইল আউটপুট দেয় যা ভিএলসি (অন্যদের মধ্যে) প্লে করতে পারে। যদিও এউ ফাইল ফর্ম্যাটে কোনও নমুনা হারের সীমাবদ্ধতা নেই, ভিএলসি 4096 হার্জ থেকে নিকৃষ্ট মানের নমুনা সহ কোনও ফাইল খেলতে অস্বীকার করেছে, তাই আমি এই ফ্রিকোয়েন্সিটি ব্যবহার করেছি

সম্পাদনা: ড্রপবক্সে ফলাফল অডিও ফাইলের লিঙ্ক


(*) এর জন্য কোনও বোনাস থাকা উচিত নয়? ; O)


আপনার d=d "\177... সংক্ষেপে স্থানের দরকার নেই । এটি একটি বাইট সংরক্ষণ করে। তবে যখন আমি ফলাফল অডিও ফাইলটি খেলি তখন মনে হয় এটি 5 এর শেষ খিটটি হারিয়েছে
মার্ক রিড

ধন্যবাদ। একই কৌশলটি ব্যবহার করে আমি একটি দ্বিতীয় বাইট সংরক্ষণ করেছি conc আমি সবেমাত্র vlc 2.1.1 এর সাথে অডিও ফাইলটি পরীক্ষা করেছি এবং এটি সম্পূর্ণরূপে শোনাচ্ছে। আপনি কোন খেলোয়াড় ব্যবহার করেছেন?
লেফাউভ

আমি ওএস এক্স-তে কুইকটাইম প্লেয়ার ব্যবহার করছিলাম V আমি এটি ভিএলসিতে খুললাম এবং এটি দুর্দান্ত শোনাচ্ছে, তাই কিছু মনে করবেন না। অ্যাপলের দোষ, তোমার নয়।
মার্ক রিড

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

যদি এম্বেড থাকা প্লেয়ার আপনার পক্ষে কাজ না করে তবে এখানে সাউন্ডক্লাউডের একটি লিঙ্ক রয়েছে

মন্তব্য করা কোড:

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
কমপকে তালিকাবদ্ধ

@ এসপি 3000 ওও ... এটি = ডি সম্পর্কে ভাবেন নি। ধন্যবাদ!
ভেক্টরাইজড

এটি একটি নির্বোধ প্রশ্ন হতে পারে, তবে এইচটি প্রতিটি পুনরাবৃত্তির জন্য 4 দ্বারা বিভক্ত করা হলে কীভাবে লুপটি থামবে?
ডেরেক 朕 會

@ ডেরেক 朕 會 功夫 অজগরটির জন্য, যখন এইচ 0 হয়ে যায়, এটি লুপটি সমাপ্ত করে ফ্যালসকে মূল্যায়ন করে। থ্রি লুপটি একের পর এক "11333033333013333011111" অনুক্রমের মানগুলি বের করার জন্য একটি গল্ফিং ট্রিক।
ভেক্টরাইজড

@ বিটপউনার আমি এটি পেয়েছি যে 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 ফাইল অবিশ্বাস্যভাবে সহজ। লাইব্রেরি ছাড়া চেষ্টা করতে চেয়েছিলেন। কিছু কারণে আমার ফাইলগুলি উইন্ডোজ মিডিয়া প্লেয়ারকে ক্রাশ করেছে বলে মনে হচ্ছে। দ্রুত সময়কাজঅর্ধেক ফাইল মধ্যে বাগ। অডিশন ব্যবহার করে আরও বড় নমুনার হারে রূপান্তর এটি এটিকে ঠিক করে।

আপডেট : পার্ল উত্তর থেকে কিছু অপ্টিমাইজেশন প্রয়োগ করা হয়েছে। এখন স্রেফ নাম nএবং 1000Hz নমুনায় আউটপুট । তদনুসারে উপরের তথ্য সম্পাদনা করা।

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

সি # 382 333 বাইটস

কোনও অ-মানক লাইব্রেরি ব্যবহার করে না, প্রতি সেকেন্ডে 8100-স্যাম্পল 44100 নমুনা-প্রতি সেকেন্ডের ওয়েভটি লিখেছেন, যা আমি আশা করি এটি একটি বৈধ শিরোনাম (ডাব্লুএমপি /। নেট / অড্যাসিটিতে খুশি হয়ে খেলবে / লোড বলে মনে হচ্ছে)।

শিরোনামটি বেস od৪ টি এনকোডড এবং মর্সটি সিঙ্কেল হিসাবে চালু / বন্ধ হিসাবে এনকোড করা হয়েছে যা একক দীর্ঘ (bits৪ বিট) সংরক্ষণ করা হয় কারণ শেষ ৫ টি বিট প্রথমটির মতোই।

ফলাফল এখানে পাওয়া যাবে

গল্ফ কোড:

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 টি বাইট সংরক্ষণ করতে পারেন।
প্রোগ্রামফক্স

Bit৯ বিট পিডাব্লুএম কোডটি bit৪ বিট ধ্রুবকটিতে ফিট করার দুর্দান্ত উপায়। আমি এরকম কিছু চেষ্টা করছিলাম তবে সম্ভবত আমি আপনার পদ্ধতিটি ব্যবহার করে আমার কোডটি ছোট করতে পারিনি could
নটকি

2

সুপারকোলিডার , 625 605 বাইট

অডিও প্রোগ্রামিং ভাষার জমা!

আউটপুট bএআইএফএফ ফর্ম্যাটে কোনও ফাইলকে লেখা হয় । উইন্ডোজ মিডিয়া প্লেয়ার এটি খুলতে ব্যর্থ হয়েছে, তবে এটি ভিএলসি মিডিয়া প্লেয়ারে দুর্দান্ত কাজ করে। উত্পন্ন ফাইলটি aএকটি ওএসসি ফাইল

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

চুক একটি অডিও প্রোগ্রামিং ভাষা। বিটপউনার আমাকে এটি 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;}
ভেক্টরাইজড

আপনি কি jঅ্যারে এড়াতে ব্যবহার করছেন ?
কেএসএফটি

1016835বাইনারি ম্যাজিক নম্বর হয় 11111000010000000011jপ্রতিটি অঙ্কের মধ্যে বিরতিগুলির ট্র্যাক রাখতে কেবল 2015(প্রতিটি অঙ্কের 5 টি শব্দ রয়েছে) রয়েছে?
ভেক্টরাইজড

@ বিটপউনার আহ, আমি তা খেয়ালও করি নি। এটা সত্যিই দুর্দান্ত ধারণা!
কেএসএফটি

অনুগ্রহের উচ্চতর সুযোগ পেতে আপনি নিজের উত্তরে এটি সম্পাদনা করতে পারেন। তবে, উন্নতি কোনও নতুন উত্তরকে ন্যায়সঙ্গত করার পক্ষে যথেষ্ট নয় যা আপনি ইতিমধ্যে চকের
সন্ধানের কাজটি বেশিরভাগই করেছেন

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

মাপগুলি অতিরিক্ত হোয়াইটস্পেস, একক লাইন টার্মিনেটর (ইউএনআইএক্স) এবং শেষ লাইনের পরে কোনও টার্মিনেটর ধরে ধরে গণনা করা হয়।

আপনি তাদের সাউন্ড কমান্ডটি ব্যবহার করে আহবান করুন:

csound morse.org morse.sco

যা বর্তমান ডিরেক্টরিতে আউটপুট ফাইল তৈরি করবে, "টেস্ট.এএফ" নামে

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

একটি কুরুচিপূর্ণ তরঙ্গরূপটি চয়ন করে আমি দুটি বা তিনটি বাইট শেভ করতে পারতাম, তবে আমি চিরাচরিত মোর্স সাইন ওয়েভের শব্দটি পছন্দ করি।

PS: আমি Csound এ মোট নবাগত, যে কোনও গল্ফিং টিপস প্রশংসা করা হয়, বিশেষত স্কোর ফাইল সম্পর্কিত!


আহ, আমি সিএসাউন্ডের অপেক্ষায় ছিলাম। যদি কেউ এতে উত্তর পোস্ট না করে থাকে তবে আমি সম্ভবত নিজেই একটি লেখার চেষ্টা করতাম। :)
মার্টিন ইন্ডার

1

ব্রেনফাক , 9৪৯ বাইট

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

এটি 8 বিট স্বাক্ষরযুক্ত নমুনার ক্রম উত্পন্ন aplayকরে যা লিনাক্সের মতো সরঞ্জাম সহ প্রতি সেকেন্ডে 8000 নমুনায় খেলানো যেতে পারে । বিএফ কনস্ট্যান্টগুলির সারণীতে ক্রেডিট ।

এটি অনলাইন চেষ্টা করুন!

কিছুটা কম গল্ফ

DIT DIT DAH DAH DAH
++[>
 -[+>++[++<]>]>[>..........-..........+<-]
 -[+>++[++<]>]>[....................-]
<<<<<-]
+++[>
 +++[>
  -[+>++[++<]>]>[>..........-..........+<-]
 <<<-]
 -[+>++[++<]>]>[....................-]
<<<-]
-[+>++[++<]>]>[....................-]
DAH DAH DAH DAH DAH
+++++[>
 -[+>++[++<]>]>[....................-]
 +++[>
  -[+>++[++<]>]>[>..........-..........+<-]
 <<<-]
<<<-]
+++[>
 -[+>++[++<]>]>[....................-]
<<<-]
DIT DAH DAH DAH DAH
-[+>++[++<]>]>[>..........-..........+<-]
++++[>
 -[+>++[++<]>]>[....................-]
 +++[>
  -[+>++[++<]>]>[>..........-..........+<-]
 <<<-]
<<<-]
++[>
 -[+>++[++<]>]>[....................-]
<<<-]
DIT DIT DIT DIT DIT
+++++[>
 -[+>++[++<]>]>[....................-]
 -[+>++[++<]>]>[>..........-..........+<-]
<<<<<-]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.