शब्दों की आवाज


11

लोगों ने कई चीजों को लिखा है, जिससे एक चीज को दूसरे के रूप में कल्पना की जा सकती है। अब मैं संगीत को पत्र का अनुवाद करने में सक्षम होने का प्रस्ताव देता हूं! यह एक प्रोग्राम लिखने के लिए आपकी नौकरी है जो एक टेक्स्ट फ़ाइल लेता है और एक विशिष्ट नोट से परिवर्तित प्रत्येक अक्षर के साथ एक ध्वनि फ़ाइल को आउटपुट करता है C3-C8

डिस्क्लेमर - मुझे वास्तव में किसी भी अच्छे संगीत की उम्मीद नहीं है, लेकिन मैं आश्चर्यचकित हूं।

विशेष विवरण

  • आप एक फ़ाइल को स्ट्रिंग के रूप में और BPM (बीट्स प्रति मिनट) एक इंट के रूप में लेते हैं
  • आप Aनोट होने के लिए अपरकेस बनाते हैंC3
  • और इस क्रम के बाद हर वर्ण के लिए एक आधा कदम बढ़ाएँ: ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
  • हां, हर पात्र का उपयोग नहीं किया जाएगा क्योंकि वह बहुत सारे सप्तक तक फैला है।
  • आप हर कैरेक्टर को फाइल में इस तरह ट्रांसलेट करते हैं
  • दिए गए BPM में नोटों को एक साथ तिमाही नोटों के रूप में रखें
  • या तो एक ध्वनि फ़ाइल के रूप में सहेजें (मैं अनुमान लगा रहा हूं कि मिडी सबसे आसान होगी, लेकिन कुछ भी ठीक है) या इसे खेलें
  • कोई भी sane input फॉर्मेट ठीक है
  • कोई मानक खामियां नहीं हैं
  • यह कोड-गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है !

बोनस

  • आउटपुट को स्थानांतरित करने की अनुमति दें - 50 बाइट्स
  • कई फ़ाइलों को एक-दूसरे के ऊपर एक-दूसरे के ऊपर सुपरइम्पोज़ करने की अनुमति दें - 75 बाइट्स
  • एक लंबे नोट में लगातार अक्षरों को मिलाएं - 50 बाइट्स

संपादित करें: वाह, हमारे पास नकारात्मक अंक हैं। मैं शनिवार को विजेता की घोषणा करूंगा।


आप विजेता का फैसला कब करेंगे?
लीजनमोनमाल 978

क्या हम मान सकते हैं कि इनपुट में कोई असूचीबद्ध अक्षर नहीं होगा? या, जब हमें असूचीबद्ध पात्रों का सामना करना पड़ा तो हमें क्या करना चाहिए?
अप्सिलर्स

स्नैप में @apsillers ! उत्तर, उन्होंने कहा कि वे अपरिभाषित व्यवहार की अनुमति देंगे।
लीजियनममाल 978

मैंने एक नमूना अपलोड किया; आप काफी सही थे, यह वास्तव में किसी भी अच्छा नहीं लगता ...
Sanchises

जवाबों:


6

MATLAB, 159-50-50-75 = -16

नमूना इनपुट

नमूना उत्पादन

शुद्ध साइन ध्वनि तरंगें उत्पन्न करता है, बहुत ही कायरता (sawtooth भी संभव है, एक और भी बेहतर स्कोर के साथ, लेकिन यह थोड़ा सा लगता है ... बहुत ही कायरतापूर्ण)। एक फ़ंक्शन के रूप में काम करता है, इसलिए यह उम्मीद करता है कि एक चरित्र सरणी ( ['abc';'def']) एक पंक्ति प्रति 'ट्रैक' के साथ हो। मुझे लगता है कि यह 'किसी भी इनपुट इनपुट प्रारूप' के तहत आता है , लेकिन अगर आम सहमति यह है कि मुझे एक फ़ाइल पढ़ने की जरूरत है, मुझे लगता है कि मैं इसे बदल सकता हूं। इनपुट iपाठ ट्रैक्स (समान लंबाई का) है, bप्रति मिनट धड़कता है और tट्रांसपोज़ (ट्रांसपोज़ न किए जाने के लिए आपूर्ति 0)। यह साइन इनपुट को ऑफसेट करके दो साइन को एक में मिश्रित करता है, इसलिए मुझे सभी तीन बोनस मिले, जिससे मुझे नकारात्मक अंक मिला।

function v(i,b,t)
s=0;for r=1:size(i)
o=[];for k=i(r,:)
o=cat(2,o,sin(55*pi*2^((k-28+t)/12)*(numel(o)/2^13+(0:1/2^13:60/b))));end
s=s+o;end
sound(s/max(s))
end

इनपुट फ़ाइल का उपयोग कर संस्करण: 211-175 = 36

इनपुट तर्क iअब फ़ाइल नाम का प्रतिनिधित्व करता है, अन्य पैरामीटर अपरिवर्तित हैं। नए रिलीज़ पर काम नहीं कर सकता क्योंकि मुझे एक चेतावनी मिल रही है जो textreadजल्द ही समाप्त हो सकती है। संपादित करें: स्पष्ट रूप से टेक्स्ट व्हाट्सएप पर स्वचालित रूप से विभाजित हो जाता है, इसलिए मैंने यह तय किया। इसके अलावा, मुझे लगता है कि मैंने परीक्षण करते समय अजीब तरह की आवाज़ों के साथ गलती से कुछ एलियंस से संपर्क किया होगा।

function v(i,b,t)
i=textread(i,'%s','whitespace','','delimiter','\n');s=0;for r=1:size(i)
o=[];for k=i{r,:}
o=cat(2,o,sin(55*pi*2^((k-28+t)/12)*(numel(o)/2^13+(0:1/2^13:60/b))));end
s=s+o;end
sound(s/max(s))
end

आप किस संस्करण को पसंद करते हैं? :)


ठीक है, युक्ति स्पष्ट रूप से एक फ़ाइल से इनपुट लेने के लिए कहती है ...
LegionMammal978

@ LegionMammal978 यदि आप जोर देते हैं: .matफाइलें एक इनपुट इनपुट प्रारूप की हैं। एक 'i' वैरिएबल के साथ .mat फ़ाइल बनाएं जिसमें आपका पाठ है। फिर, load(i);शीर्ष संस्करण की पंक्ति 2 की शुरुआत में जोड़ें । स्कोर: -16 + 8 = -8। मैं यह तब करूँगा जब आपकी टिप्पणी मेरी तुलना में अधिक उत्थान हो, या जब ओपी की एक राय हो :)
Sanchises

4

स्नैप ! - 401 - 75 = 326

इसे यहाँ ऑनलाइन आज़माएँ।

मैं कार्यक्रम के लिए बाइट्स गिनने की इस पद्धति का उपयोग कर रहा हूं ।

यहाँ छवि विवरण दर्ज करें

मैंने एक ही बार में कई ध्वनियाँ बजाईं।

मूल संरचना मूल (नीचे देखें) के समान है, लेकिन इसके अतिरिक्त के साथ launch{}launch{}अंदर कोड के साथ एक नया सूत्र शुरू करता है, जो संगामिति के लिए अनुमति देता है।

पाठ के रूप में कोड है:

set[c v]to[ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
set[l v]to(list>
ask[BPM]and wait
set tempo to(answer)bpm
repeat until<(answer)=[
ask[notes]and wait
add(answer)to(l
end
delete(last v)of(l
for each(i)of(l
launch{
repeat(length of(i))(#
play note(i(c)(letter(#)of(i)))for(0.25)beats

(i(h)(n))
report(call(JavaScript function ([h][n]) {[return h.indexOf(n)+48]})with inputs(h)(n

मूल कोड, 308।

यहाँ छवि विवरण दर्ज करें

लकी स्नैप! मिडी खेल में बनाया गया है;)

दुर्भाग्य से, इसका कोई indexOfफ़ंक्शन नहीं है , इसलिए मुझे एक बाहरी जावास्क्रिप्ट कॉल करना होगा, जो बहुत महंगा है।

repeat () (#)ब्लॉक यात्रा पुस्तकालय से आता है।

कोड को इस तरह से पाठ के रूप में लिखा जा सकता है, जो है कि मैं 308 बाइट कैसे प्राप्त करूं:

set[c v]to[ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
ask[BPM]and wait
set tempo to(answer)bpm
ask[notes]and wait
repeat(length of(answer))(#)
play note(i(c)(letter(#)of(answer)))for(0.25)beats

(i(h)(n))
report(call(JavaScript function ([h][n]) {[return h.indexOf(n)+48]})with inputs(h)(n

क्या SNAP के पास एक संग्रह / शोकेस है जिसे आप जोड़ सकते हैं जैसे स्क्रैच करता है? एक रन करने योग्य संस्करण से सीधे लिंक करना आसान होगा IMO।
ज्योबिट्स

हाँ। मैंने अपने प्रोजेक्ट के लिए एक लिंक जोड़ा। अच्छा विचार। :)
शिमोनस्टर

क्या इससे अनदेखी -1होती है indexOf? अभी यह ऐसा लगता है कि अगर स्ट्रिंग में नहीं है, यह मिडी नंबर 47 करता है।
माल्टीसेन

@ मैलेटेंस सवाल कभी नहीं कहता कि उचित सीमा के बाहर इनपुट के साथ क्या करें।
शिमोनस्टर

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

4

गणितज्ञ, २१ ९ - ५० - 21५ - ५० = ४४

c=CharacterRange;d=Import;EmitSound[Function[b,Sound[Split@Characters@d@b/.a:{__String}:>SoundNote[StringPosition[c["A","Z"]<>" ()-,;.'\""<>c["a","z"],a[[1]]][[1,1]]+#3-12,60Length@a/#2],{0,60StringLength@d@b/#2}]]/@#]&

इनपुट फ़ाइलों की सूची लेता है, बीपीएम, और इनपुट के रूप में स्थानांतरित करने के लिए आधे-चरण की संख्या और ध्वनि बजाता है (पियानो से, कोई भी अन्य उपकरण अधिक बाइट्स लेता है।) क्या यह बुरा नहीं है!


1

जावास्क्रिप्ट (ईएस 6) 377 - 50 - 50 - 75 = 202

सबसे पहले, यहां एक रन करने योग्य स्निपेट है जो <input>फ़ाइल-रीड के बजाय फ़ील्ड का उपयोग करता है:

<b>BMP:</b> <input id="bpm" size=3 placeholder="BMP" value="120"> <b>Transpose:</b> <input size=3 id="transpose" placeholder="Transpose" value="0"><br/><br/><div id="tracks" style="float:left;padding-right:5px;"><input placeholder="Track" class="track"></div><button id="add">Add Additional Track</button><div style="clear:both; padding-top:5px;"></div><button id="play"><b>Play</b></button><script>f=function(s,b,z){C=new (window.AudioContext||window.webkitAudioContext);b=6e4/b;s.map(function(p){var o=C.createOscillator(t=setTimeout);o.connect(C.destination);o.start();p.split("").map(function(c,i){t(function(){o.frequency.value=440*Math.pow(2, ("ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'\"abcdefghijklmnopqrstuvwxyz".indexOf(c)-21+z)/12)},b*i)});t(function(){o.stop()},p.length*b)})};document.getElementById("play").onclick=function(){f([].map.call(document.getElementsByClassName("track"),function(e){return e.value;}),+document.getElementById("bpm").value,+document.getElementById("transpose").value);};document.getElementById("add").onclick=function(){var i=document.createElement("input");i.placeholder="Track";i.className="track";document.getElementById("tracks").appendChild(document.createElement("br"));document.getElementById("tracks").appendChild(i);};</script>

और अब, वास्तविक प्रविष्टि:

f=(n,b,z)=>{C=new AudioContext;b=6e4/b;s=n.map(m=>(x=new XMLHttpRequest,x.open("GET",m,0),x.send(),x.responseText));s.map(p=>{var o=C.createOscillator(t=setTimeout);o.connect(C.destination);o.start();[...p].map((c,i)=>t(_=>o.frequency.value=440*Math.pow(2,("ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'\"abcdefghijklmnopqrstuvwxyz".indexOf(c)-21+z)/12),b*i)),t(_=>o.stop(),p.length*b)})}

तीन तर्क समवर्ती फ़ाइल खेलने के लिए एक सरणी हैं, सभी आदानों को स्थानांतरित करने के लिए प्रति मिनट नोट्स, और आधे-चरण की संख्या।

व्हॉट्सएप और टिप्पणियों के साथ:

f=(n,b,z)=>{
    C=new AudioContext;
    b=6e4/b;

    // fill s with the contents of each file
    s = n.map(m=>(x=new XMLHttpRequest,x.open("GET",m,0),x.send(),x.responseText));

    // play each track
    s.map(p=>{
        var o=C.createOscillator(t=setTimeout);
        o.connect(C.destination);
        o.start();

        // queue up each note with setTimeout
        [...p].map((c,i)=>
            t(_=>
                o.frequency.value=440*
                    Math.pow(2,
                            ("ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'\"abcdefghijklmnopqrstuvwxyz".indexOf(c)-21+z)/12
                    ),
             b*i)
        );
        // queue up termination of those track
        t(_=>o.stop(),p.length*b)})
}

f(["file:///home/users/apsillers/notes.txt",
   "file:///home/users/apsillers/notes2.txt"],
  240, 5)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.