আপনার কীবোর্ডকে একটি কীবোর্ড করুন


10

কার্য

আপনার একটি প্রোগ্রাম লেখা উচিত যে যখন একটি বোতাম টিপানো হয়, তখন এটি প্রতিটি কীটির জন্য আলাদা শব্দ দেয়।

আপনি যে কীগুলি ব্যবহার করবেন তা হ'ল:

1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm

নোটগুলি শুরু হয় Cএবং উপরের প্রতিটি কী একটি করে সেমিটোন যুক্ত করে।

যদিও এটি আপনার জন্য কিছুটা সহজ করে তুলুন। আপনি দুটি অনুরূপ কাজের মধ্যে বেছে নিতে পারেন,

1) একটি কী টিপে দেওয়া হলে একটি অন্য নোট আউটপুট দেয় যা অন্য কী টিপানো অবধি অব্যাহত থাকে। এই প্রোগ্রামটি অনির্দিষ্টকালের জন্য চলে

2) ইনপুট হিসাবে একটি স্ট্রিং নিন যা কেবলমাত্র উপরের অক্ষরগুলি ধারণ করে যা প্রতিটি নোটকে ঠিক 1 সেকেন্ডের জন্য আউটপুট দেয় (0.05 সেকেন্ডের ভিন্নতার মঞ্জুরিপ্রাপ্ত)

ইনপুট

  1. একটি কী চাপছে
  2. উপরোক্ত চিহ্নগুলি সহ একটি একক স্ট্রিং

আউটপুট

  1. অন্য এক কী টিপে না আসা পর্যন্ত একক সংগীতের নোট
  2. প্রতিটি এক সেকেন্ড লম্বা নোটগুলির একটি সিরিজ

মন্তব্য

Letter | Note
-------+-------
   1   |  C
   !   |  C#
   2   |  D
   "   |  D#
   3   |  E
   4   |  F
   $   |  F#
   5   |  G
   %   |  G#
   6   |  A
   ^   |  A#
   7   |  B
   8   |  C
   *   |  C#
   9   |  D
   (   |  D#
   0   |  E
   q   |  F
   Q   |  F#
   w   |  G
   W   |  G#
   e   |  A
   E   |  A#
   r   |  B
   t   |  C    <-- middle C
   T   |  C#
   y   |  D
   Y   |  D#
   u   |  E
   i   |  F
   I   |  F#
   o   |  G
   O   |  G#
   p   |  A
   P   |  A#
   a   |  B
   s   |  C
   S   |  C#
   d   |  D
   D   |  D#
   f   |  E
   g   |  F
   G   |  F#
   h   |  G
   H   |  G#
   j   |  A
   J   |  A#
   k   |  B
   l   |  C
   L   |  C#
   z   |  D
   Z   |  D#
   x   |  E
   c   |  F
   C   |  F#
   v   |  G
   V   |  G#
   b   |  A
   B   |  A#
   n   |  B
   m   |  C

বিধি

  • আপনি কার্যগুলির মধ্যে চয়ন করতে পারেন তবে দয়া করে আপনার উত্তরের মধ্যে যা বলবেন
  • টাস্ক 2 এ আপনাকে একটি 0.05 ডলার দ্বিতীয় প্রকারের দেওয়া হবে
  • প্রতিটি প্রতীক 1 সেমিটোন দ্বারা টোন বাড়ায় incre
  • পৃথক নোটগুলি উপরে দেখানো হয়েছে
  • এটি একটি তাই সংক্ষিপ্ততম কোড জয়ী

এই মূলত থেকে নিয়ে যাওয়া হয় এখানে সঙ্গে caird coinheringaahing এর সম্মতি


এটি অডিও লাইব্রেরি নেই এমন ভাষাগুলিতে খোলার জন্য আমি একটি তৃতীয় আউটপুট ফর্ম্যাটটি প্রস্তাব করছি: স্টাডআউটে লিখিত বিকল্প 2 আউটপুট সম্বলিত একটি ডাব্লুএইভি ফাইল। এটি বাইনারি ডেটা মুদ্রণ করতে পারে এমন কোনও ভাষাতে প্রবেশের অনুমতি দেবে।
রে

উত্তর:


6

পাইথন 3, 154 140 বাইট

from winsound import*
for i in input():Beep(int(65.406*2**('1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.find(i)/12)),999)

আমি দ্বিতীয় টাস্ক টাইপ বেছে নিয়েছি।

লুপ প্রতিটি চরিত্রের মধ্য দিয়ে যায় এবং স্ট্রিংয়ের মধ্যে এই উপাদানটির সূচি সন্ধান করে। এই সূচকটি নিম্ন সি ('1') থেকে সিমিটোন সংখ্যা। পছন্দসই ফ্রিকোয়েন্সি গণনা এই সূত্র দ্বারা তৈরি করা হয় ।

পিএস এই লাইব্রেরিটি শুধুমাত্র উইন্ডোজে কাজ করে।

-13 বাইটস ovs ধন্যবাদ।

-1 বাইট জোনাথন অ্যালানকে ধন্যবাদ।


1
আপনার সম্ভবত উল্লেখ করা উচিত যে এটি কেবল উইন্ডোজে কাজ করে।
নিখুঁত

1
141 বাইটে from winsound import* for i in input():Beep(int(65.406*2**('1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.find(i)/12)),1000)
গল্ফড

তবে প্রশ্নটি একটি প্রোগ্রামের জন্য জিজ্ঞাসা করেছে ....
নীল এ।

0.05সহনশীলতা আপনি ব্যবহার করতে অনুমতি থাকবে 999
জোনাথন অ্যালান


3

জাভাস্ক্রিপ্ট (ES6), 247 বা 230 বাইট

উভয় বিকল্প ব্যবহার করে দেখার সিদ্ধান্ত নিয়েছে।

withবিবৃতিটি পরামর্শ দেওয়ার জন্য @arrylyeo- কে কয়েকটি বাইট সংরক্ষণ করা হয়েছে।
@ Мал Малышев এর সাথে একটি সমস্যা দেখানোর জন্য ধন্যবাদ.search()

বিকল্প 1 - কীবোর্ড ইনপুট, 252 246 247 বাইট

_=>{c=new AudioContext;q=1;with(c.createOscillator())connect(c.destination),I.oninput=_=>(~(i='1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.indexOf(I.value,I.value=""))&&(frequency.value=65.4*2**(i/12),q&&start(q=0)))}
<input id=I

অক্ষর কোডগুলির পরিবর্তে প্রকৃত অক্ষর টাইপ করা ইনপুট উপাদানটির উপর নির্ভর করে। ফোকাস অবশ্যই ইনপুট বাক্সে থাকতে হবে।

বিকল্প 2 - স্ট্রিং ইনপুট, 234 229 230 বাইট

s=>{c=new AudioContext;with(c.createOscillator())connect(c.destination),[...s].map((c,i)=>frequency.setValueAtTime(65.4*2**('1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.indexOf(c)/12),i)),start(),stop(s.length)}

কেবল স্ট্রিংটি ফাংশন প্যারামিটার হিসাবে নেয়।

সংযুক্ত স্নিপেট

আমি আপনার ভলিউমটি এটি চলমান হিসাবে সরিয়ে দেওয়ার পরামর্শ দিচ্ছি, এটি উচ্চতর হতে পারে। প্লেব্যাক বন্ধ করতে, স্নিপেটের o=প্রতিটিটির অভ্যন্তরে অন্তর্ভুক্ত করা দরকার with(c.createOscillator())

f= // keyboard input
_=>{c=new AudioContext;q=1;with(o=c.createOscillator())connect(c.destination),I.oninput=_=>(~(i='1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.indexOf(I.value,I.value=""))&&(frequency.value=65.4*2**(i/12),q&&start(q=0)))}

g= // string input
s=>{c=new AudioContext;with(o=c.createOscillator())connect(c.destination),[...s].map((c,i)=>frequency.setValueAtTime(65.4*2**('1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.indexOf(c)/12),i)),start(),stop(s.length)}

swap=_=>{keyboard=!keyboard;A.innerHTML=keyboard?"Keyboard":"String";S.style.display=keyboard?"none":"inline";window.c&&c.close();window.o&&o.stop();keyboard?f():I.oninput=null;I.value="";}
keyboard=0;
swap();
<span id="A"></span> Input:<br>
<input id="I">
<button id="S" onclick="g(I.value)">Run</button><br>
<button onclick="swap()">Swap</button>


আপনি দোলনা বস্তুকে একটি withবিবৃতিতে সমস্ত দৃষ্টান্তগুলি গলফ করার জন্য রাখতে পারেন o., এর মতো:_=>{c=new AudioContext;with(c.createOscillator())connect(c.destination),I.oninput=_=>(~(i='1!2"34$5%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm'.search(I.value,I.value=""))&&(frequency.value=65.4*2**(i/12),r||(start(),r=1)))}
darrylyeo

1
@ স্টারিলিও ধন্যবাদ, withবিবৃতিটি বাস্তবায়ন করবে , তবে এটি শেষ বিটটি ভেঙে দিয়েছে ( o.r||(o.start(),o.r=1)) যেহেতু আমি o.rসেই পয়েন্ট অবধি অবধারিত সত্যটি ব্যবহার করছি , তবে এখনই এটি ত্রুটিযুক্ত হয়ে গেছে যেহেতু rএটি ঘোষণা করা হয়নি। দেখা যাচ্ছে যে কেবলমাত্র কোনওরকম অবজেক্ট থেকে ভেরিয়েবলকে আলাদা করে ঘোষণা করা সংক্ষিপ্ত ছিল, তাই আমি এটি করেছি।
জাস্টিন মেরিনার

আপনি '$' প্রতীকটি প্রবেশ করার পরে খুব উচ্চতর ফ্রিকোয়েন্সি তৈরি হয়।
Кирилл Малышев

@ .Ышев ভাল ক্যাচ, এই কারণটি ইনপুটটিকে .search()রেজেক্স হিসাবে বিবেচনা করে। স্যুইচ করা হয়েছে .indexOf()
জাস্টিন মেরিনার

1

এএইচকে , 130 বাইট

s=1!2"34$5`%6^78*9(0qQwWeErtTyYuiIoOpPasSdDfgGhHjJklLzZxcCvVbBnm
Loop,Parse,1
SoundBeep,55*2**((InStr(s,A_LoopField,1)-10)/12),999

আমি অপশন 2 বেছে নিয়েছি।

ব্যাখ্যা:

ভেরিয়েবল হিসাবে অনুসন্ধান স্ট্রিংটি সংরক্ষণ করা sসরাসরি সেই জগাখিচুড়ি থেকে পালানোর চেয়ে কম ছিলSoundBeep ফাংশনে । আমাকে শতাংশ চিহ্ন থেকে বাঁচতে হয়েছিল যেহেতু এটি পরিবর্তনশীল নামের জন্য একটি পালানোর চরিত্র তবে বাকী স্ট্রিং ঠিক আছে OK

ডিফল্টরূপে, ভেরিয়েবলটি 1হ'ল প্রথম ইনপুট প্যারামিটার। কোনও ডিলিমিটার নির্দিষ্ট না করে পার্সিং লুপে খাওয়ানোর ফলে ইনপুট স্ট্রিংয়ের প্রতিটি অক্ষর স্বতন্ত্রভাবে বিশ্লেষণ করা হবে।

SoundBeep হার্জেডের একটি ফ্রিকোয়েন্সি এবং মিলিসেকেন্ডে একটি সময়কাল নেয় এবং সেই নোটটি দীর্ঘকাল ধরে চালায়।

মজাদার অংশটি সঠিক ফ্রিকোয়েন্সিগুলি নির্ধারণ করছিল। উল্লেখ পিয়ানো কী ফ্রিকোয়েন্সি টেবিল উইকিপিডিয়া থেকে এবং একই পৃষ্ঠায় সূত্র, আমি দেখেছি সবচেয়ে কম এনকোডিং ব্যবহার করতে ছিল 1 রেফারেন্স নোট হিসাবে কারণ এটা ফ্রিকোয়েন্সি চমৎকার বৃত্তাকার 55 Hz- হয়। যেহেতু আমরা সি 1 এ শুরু করতে চাই , তাই আমাদের এ 1 (13 তম নোট) থেকে সি 1 (চতুর্থ নোট) এ সামঞ্জস্য করতে হবে । এটি InStrহ'ল ওয়ান-ইনডেক্সড হ'ল InStrফাংশনের ফলাফল থেকে আমরা 10 বিয়োগ করি ।

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