একটি জিইউআই পিয়ানো তৈরি করুন [বন্ধ]


15

চ্যালেঞ্জ

যতটা সম্ভব অক্ষরের সাথে একটি জিইউআই কীবোর্ড তৈরি করুন।

উদাহরণ

এটি আমার পাঠ্যক্রমগুলির একটিতে একটি অ্যাসাইনমেন্ট ছিল বলে আমি উত্স কোডটি প্রদর্শন করতে পারি না can't তবে, এখানে আমার কীবোর্ডের একটি স্ক্রিন শট।

পিয়ানো

এই উদাহরণে, আমার কীগুলি টাইপের ছিল JButtonএবং আমি শব্দটি উত্পাদন করতে একটি মিডি সিনথেসাইজার ব্যবহার করেছি (ডিফল্ট এডিএসআর খামের মান সহ)।

বিধি

  • আপনি স্ট্যান্ডার্ড বহিরাগত লাইব্রেরি ব্যবহার করার অনুমতি দেওয়া হয়।
  • আপনার শব্দ দিয়ে সৃজনশীল হন। আপনি 8-বিট, একটি সেতার ইত্যাদি ব্যবহার করতে পারেন
  • সরলতার জন্য, আপনার কাছে পাঁচটি কী থাকতে পারে; কালো এবং সাদা, সি থেকে ই পর্যন্ত (আমার কীবোর্ডের প্রথম পাঁচটি কী)।
  • সবচেয়ে গুরুত্বপূর্ণ ... আপনার কাজ প্রদর্শন করুন!

বিজ্ঞপ্তি : আপনি কোন ভাষার সাথে কাজ করতে বেছে নিচ্ছেন তার উপর নির্ভর করে এটি একটি বড় কাজ হতে পারে।

এটি এসই কোড গল্ফের আমার প্রথম প্রশ্ন। যদি কিছু অস্পষ্ট থাকে তবে দয়া করে আরও বিশদ জিজ্ঞাসা করুন।


সম্পাদনা : এই চ্যালেঞ্জের জন্য নির্ধারিত তারিখ 9/22/12 হবে। আপনি যদি এই তারিখের পরে কোনও উত্তর পোস্ট করেন তবে আমি এটি নির্বিশেষে (এবং সম্ভবত এটি +1) লক্ষ্য করব।


2
যে ভাষাতে ব্যবহার করতে হবে তার উপর বিধিনিষেধগুলি এখানে খুব বেশি পছন্দ হয় না। আপনার সীমাবদ্ধতা বাদ দেওয়া বা একটি গুরুত্বপূর্ণ কারণ নাম বিবেচনা করুন।
FUZxxl

1
@FUZxxl উদাহরণ বিভাগে বর্ণিত হিসাবে এটি আমাদের জাভা শ্রেণীর জন্য একটি মেয়াদী প্রকল্প ছিল। এটি এখনও খুব শ্রেণীর জন্য একটি শব্দ প্রকল্প হিসাবে ব্যবহৃত হচ্ছে। তবে আমি মনে করি আমি কেবল অদ্ভুত তাই আমি নিষেধাজ্ঞাগুলি বাদ দেব। আমি মনে করি আপনি কোন ভাষাটি ব্যবহার করবেন না তার মানে ... তবে যাই হোক না কেন, আমি সেগুলি সরিয়েছি।
রব

2
"জিইউআই কীবোর্ড" হিসাবে বিবেচনা করার জন্য ন্যূনতম প্রয়োজনীয়তাগুলি কী কী? ইতিমধ্যে উপস্থিত থেকে আমি এটি অনুমান করি যে এটি অবশ্যই একটি জিইউআই প্রদর্শন করবে এবং কিছু শব্দ উত্পন্ন করবে, তবে কী কী বিধিনিষেধ রয়েছে: ক) ইনপুট প্রক্রিয়া; খ) শব্দ খাম; গ) ব্যবহৃত স্কেল; ঘ) সুরের সঠিকতা; e) কীগুলির অনুপাত?
পিটার টেলর

2
@ মাইকডট্রিক, এটি আমার প্রশ্নের 0/5 উত্তর দেয়। আমি আপনার বাস্তবায়ন কীভাবে কাজ করছিলাম তা জিজ্ঞাসা করছি না: আমি জানতে পারি যে আমার (অনুমান) বাস্তবায়ন বৈধ প্রতিযোগী কিনা তা আমি কীভাবে জানতে পারি, কারণ 20% দ্বারা কোনও প্রবেশিকা সংক্ষিপ্ত করার কোনও মানে নেই যদি এমনভাবে বৈধ এন্ট্রি হওয়া থেকে নেওয়া হয় একটি অবৈধ।
পিটার টেলর

1
@ মাইকডট্রিক: উদাহরণস্বরূপ, আপনার প্রয়োজন হতে পারে যে বোতামগুলি আপনার উদাহরণের মতো দেখতে পিক্সেল দ্বারা পিক্সেল। অন্য চরম সময়ে আপনি যে কোনও ধরণের পাঁচটি জিইউআই বোতামের বিন্যাসের অনুমতি দিতে পারেন।
হান

উত্তর:


11

ম্যাথামেটিকাল 319 259 255


সম্পাদনা: ক্লিক করা হলে কীগুলি এখন হতাশায় (বোতাম হিসাবে)।


এটি গ্র্যান্ড পিয়ানো নোটগুলি খেলবে {"সি", "সি #", "ডি", "ডি #", "ই"}, যেখানে "সি" মাঝের সি z[n_]নোটটি খেলবে।

z@n_ := EmitSound@Sound[SoundNote[n, .3, 1]]; w = {10, 300}; b = {35, 180};
Graphics[Inset[Button["", z[#[[1]]], Background -> If[#[[2]] == w, None, Black], 
ImageSize -> #〚2〛], #〚3〛] & /@ {{"C", w, {-.4, 0}}, {"D", w, {0, 0}}, {"E", w, {.4, 0}}, 
{"C#", b, {-.2, 0.31}}, {"D#", b, {.2, 0.31}}}, PlotRange -> 1]

কীবোর্ড


দ্বিগুণের চেয়ে কম অক্ষর ব্যবহার করে কীবোর্ডটি 18-কীগুলিতে বাড়ানো যেতে পারে:

z@n_ := EmitSound@Sound@SoundNote[n, .3, 1];
w = {"C", "D", "E", "F", "G", "A", "B", "C5", "D5", "E5", "F5"};
b = {"C#", "D#", "", "F#", "G#", "A#", "", "C#5", "D#5"}; i = ImageSize; t = Thread; 
l = List; s = Inset; m = Table; u = Button;
Graphics[Join[t[s[u @@@ t[l["", y /@ w, i -> {5, 350}]] /. y -> z, m[{90 k, 0}, {k, -5, 5}]]], 
Delete[t[s[u @@@ t[l["", y /@ b, Background -> Black, i -> {28, 212}]] /. 
  y -> z, m[{90 k + 45, 220}, {k, -5, 3}]]], {{3}, {7}}]], 
AspectRatio -> .45, PlotRange -> {{-500, 500}, {-610, 610}}, i -> {800, 430}]   

বড় কীবোর্ড


1
+1 আমার মনে সন্দেহ নেই যে এটি কাজ করবে ... আমার ইচ্ছা যদি আমি এটি খেলতে পারি।
রব

1
আমি আমার Dropbox এ ফাইলের একটি .cdf সংস্করণ বাম dropbox.com/sh/m3y0fs0v0nidqt5/UTv_0YGpz5 অন্যদের কাছে এই শেয়ার করতে পারেন। লাইসেন্সিংয়ের কোনও সমস্যা হবেনা কারণ এটি অ-বাণিজ্যিক, শিক্ষামূলক উদ্দেশ্যে ব্যবহৃত হচ্ছে। আপনার যদি ফ্রি ওল্ফ্রাম সিডিএফ প্লেয়ার না থাকে তবে এটি ডাউনলোড করতে হবে।
ডেভিডসি

ডেভিড, আমি w = {67, 300}আপনার ফলাফল পেতে হবে; কোন ধারণা কেন পার্থক্য? এছাড়াও, আমি কি এই কোডটি সংক্ষিপ্ত করতে সম্পাদনা করতে পারি, যদি আমি সক্ষম হই?
মিঃ উইজার্ড

Mr.Wizard। w = {67,300}v। 9 এ সূক্ষ্মভাবে কাজ করে তাই আপনি যদি এটি পরিবর্তন করতে চান, বা সেই বিষয়ে কোডের যে কোনও একটি সংক্ষিপ্ত করতে চান, ঠিক এগিয়ে যান। বোতামের আকারটি সামঞ্জস্য করা হিট বা মিস হয়েছিল। অদ্ভুত কিছু ঘটেছিল কারণগুলির কারণে আমি ব্যাখ্যা করতে পারি না। (উদাহরণস্বরূপ, আরও বোতাম যুক্ত করা মূল বোতামগুলির অনুপাতকে প্রভাবিত করে))
ডেভিডসি

10

ওয়েব পৃষ্ঠা (840/796 টি অক্ষর)

>>> খেলা শুরু করুন (একাধিক কারণে ইন্টারনেট এক্সপ্লোরার সমর্থিত নয়; গুগল ক্রোম এবং অপেরা সেরা কাজ করে))

আমি সম্ভবত এটি কিছুটা ছোট করতে পারি, তবুও এটি একটি ভাল শুরু। নিম্ন স্কোরটি  চরিত্রের সাথে সমস্ত উপস্থিতির পরিবর্তে এবং কীওয়ার্ডটি মুছে ফেলার newপরে, গুগল ক্রোমের সামঞ্জস্যতা ভেঙে পরবর্তী পরিবর্তন change

<style>table{border-collapse:collapse;border-width:1 0;border-style:solid;font-size:64;line-height:2}td{border-style:solid;border-width:0 1}</style><table><td colspan=3 title=0>&nbsp;<td bgcolor=black colspan=2 title=1>&nbsp;<td colspan=2 title=2>&nbsp;<td bgcolor=black colspan=2 title=3>&nbsp;<td colspan=3 title=4>&nbsp;<tr><td colspan=4 title=0>&nbsp;<td colspan=4 title=2>&nbsp;<td colspan=4 title=4>&nbsp;</table><script>for(A=[y=5];y--;){for(s=x=64e3;x--;)s+="~ "[x*(268+17*y)>>13&1];A[y]=new Audio("data:audio/wav;base64,UklGRiXuAgBXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQHuAgCA"+btoa(s))}setInterval("for(y=5;y--;)with(A[y])volume=volume&&Math.exp(-currentTime)",99);onmousedown=function(e){if(z=e.target.title)with(A[z])play(currentTime=0,volume=1)};onmouseup=function(e){if(z=e.target.title)with(A[z])pause(volume=0)}</script>

এই কোডটি .htm বা .html এ শেষ হওয়া একটি পাঠ্য ফাইল হিসাবে সংরক্ষণ করুন এবং এটি ক্রোম বা অপেরাতে খুলুন ( সাফারিও কাজ করতে পারে) বা খোলার জন্য সমাধানটির জেএসবিন পৃষ্ঠাটি খোলার জন্য । টুইঙ্কল টুইঙ্কল লিটল স্টার কোড গল্ফ সমস্যার সমাধান থেকে আমি ডাব্লুএইভি ফাইল শিরোনামটি পুনরায় ব্যবহার করেছি ।

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

এখানে কোডের আরও পাঠযোগ্য সংস্করণ:

<style>
    table {
        border-collapse: collapse;
        border-width: 1 0;
        border-style: solid;
        font-size: 64;
        line-height: 2;
    }

    td {
        border-style: solid;
        border-width: 0 1;
    }
</style>

<table>
        <td colspan=3 title=0>&nbsp;
        <td bgcolor=black colspan=2 title=1>&nbsp;
        <td colspan=2 title=2>&nbsp;
        <td bgcolor=black colspan=2 title=3>&nbsp;
        <td colspan=3 title=4>&nbsp;
    <tr>
        <td colspan=4 title=0>&nbsp;
        <td colspan=4 title=2>&nbsp;
        <td colspan=4 title=4>&nbsp;
</table>

<script>
    for (A = [y = 5]; y--;) {

        for (s = x = 64e3; x--;)
            s += "~ "[x * (268 + 17 * y) >> 13 & 1];

        A[y] = new Audio("data:audio/wav;base64,UklGRiXuAgBXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQHuAgCA" + btoa(s));
    }

    setInterval(function() {
        for (y = 5; y--;)
            with (A[y])
                volume = volume && Math.exp(-currentTime);
    }, 99);

    onmousedown = function(e) {
        if (z = e.target.title)
            with (A[z])
                play(currentTime = 0, volume = 1);
    };

    onmouseup = function(e) { 
        if (z = e.target.title)
            with (A[z])
                pause(volume = 0);
    };
</script>

1
+1 ফায়ারফক্স 15 এ দুর্দান্ত কাজ করে, যদিও আমি আরও ভাল শোনার যন্ত্রটি বেছে নিতে পারি।
ডেভিডসি

6

গ্রোভি: 577 (হোয়াইট স্পেস সহ 703)

প্রথম 5 নোট। অন্যদের সহজেই যুক্ত করা যেতে পারে, এটি কিছুটা গতিশীল।

জঘন্য দোল। সম্ভবত একটি দোল lib সঙ্গে এটি আরও ভাল হবে।

এখানে চিত্র বর্ণনা লিখুন

জেএফুগুয়ের মাধ্যমে খেলে।

গিথুব এ: https://github.com/wpiasecki/glissando/blob/master/src/br/glissando/Piano.groovy

গ্রোভি 2.0.0.2 এ

import java.awt.event.*
class Note { def n; boolean s; def p() { new org.jfugue.Player().with {play n;close()}} }
notes=['C','C#','D','D#','E'].inject([]){ l,n -> l<< Note[n:n,s:n=~/#/]}
h=300
l=0
w=60
x=0
new groovy.swing.SwingBuilder().edt {
  frame size:[notes.size()*30+30,h], 
    show:true, 
    defaultCloseOperation:javax.swing.JFrame.EXIT_ON_CLOSE, 
    { l = layeredPane() }
  notes.each { n ->
    C=java.awt.Color
    s=n.s
    p=panel bounds:(s ? [x-15,0,w-30,h-100] : [x,0,w,h]),
      background: s ? C.BLACK : C.WHITE, 
      border: lineBorder(1, color: C.BLACK)
    p.addMouseListener({ if(it.id==MouseEvent.MOUSE_CLICKED)n.p() }as MouseListener)
    if(!s)x+=w
    l.add p,s?0:1
  }
}

1

আর - 491 টি অক্ষর

আমি কিছুটা দেরি করেছি তবে আমি গতকাল এই পোস্টটি দেখেছি।

একটি ম্যাকের সাথে কাজ করে, প্লেআরওয়েভ এবং প্যাকেজগুলি tuneRএবং ব্যবহার করেsplancs

a=array
x=c(7,2)
y=c(5,2)
z=c(1,1,3,3)
par(mar=rep(0,4))
plot(NA,xli=c(0,9),yli=c(0,3))
N=list(a(c(0,3,3,2,2,0,0,0,0,z,0),x),a(c(3,6,6,5,5,4,4,3,3,0,0,z,1,1,0),c(9,2)),a(c(6,6,7,7,9,9,6,0,z,0,0),x),a(c(2,4,4,2,2,z,1),y),a(c(5,7,7,5,5,z,1),y))
c=c(NA,NA,NA,1,1)
for(i in 1:5){polygon(N[[i]],c=c[i])}
h=c(261.63,293.66,329.63,277.18,311.13)
library(tuneR)
setWavPlayer("~/Library/Audio/playRwave")
repeat{P=data.frame(locator(1));play(sine(h[sapply(N,function(x)splancs::inout(P,x))],bit=16))}

এখানে চিত্র বর্ণনা লিখুন

Ungolfed:

par(mar=rep(0,4))
plot(NA,xlim=c(0,9),ylim=c(0,3)) #Create empty plot: due to fuzzy matching of arguments, xlim can be reduced to xli
N=list(array(c(0,3,3,2,2,0,0,0,0,1,1,3,3,0),dim=c(7,2)), #C polygon
       array(c(3,6,6,5,5,4,4,3,3,0,0,1,1,3,3,1,1,0),dim=c(9,2)), #D polygon
       array(c(6,6,7,7,9,9,6,0,1,1,3,3,0,0),dim=c(7,2)), #E polygon
       array(c(2,4,4,2,2,1,1,3,3,1),dim=(5,2)), #Db polygon
       array(c(5,7,7,5,5,1,1,3,3,1),dim=(5,2)))  #Eb polygon
c=c(NA,NA,NA,1,1) #Colors: by default 1 is "black"
for(i in 1:5){polygon(N[[i]],color=c[i])}
h=c(261.63,293.66,329.63,277.18,311.13) #Notes frequency in hertz: C4, D4, E4, Db4 and Eb4
library(tuneR)
setWavPlayer("~/Library/Audio/playRwave") #This can be change to other wav player I think
repeat{
    P=data.frame(locator(1)) #Grab coordinates of selected point
    H=h[sapply(N,function(x)splancs::inout(P,x))] #In which polygon does the selected point belong to, then map it to its ferquency
    s=sine(H,bit=16) #By default create a 1sec note at the given frequency with 44100 sampling rate
    play(s)
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.