বিবৃতি
কাজটি হ'ল কিছু সাধারণ উদ্দেশ্যে প্রোগ্রামিং ল্যাঙ্গুয়েজে (আপনার পছন্দের) ফাংশনটি ব্যবহার করে কিছু বাদ্যযন্ত্রের (আপনার পছন্দ মতো) শব্দ (একটি নোট বাজানো) সংশ্লেষিত করা।
দুটি লক্ষ্য রয়েছে:
- ফলাফল শব্দের গুণমান। এটি যথাসম্ভব জরিমানা হিসাবে আসল উপকরণের সাথে সাদৃশ্য করা উচিত;
- Minimality। কোডটি 1500 বাইটের নীচে রাখার পরামর্শ দেওয়া হয় (কেবলমাত্র বেসিক সাউন্ড জেনারেশন থাকলে কম)।
কেবল প্রজন্মের ফাংশন সরবরাহ করা দরকার, বয়লারপ্লেট স্কোরের জন্য গণনা করা হয় না।
দুর্ভাগ্যক্রমে শব্দটির বিশ্বস্ততার জন্য কোনও স্কোর গণনা করা যায় না, তাই কঠোর নিয়ম থাকতে পারে না।
নিয়মাবলী:
- নমুনা লাইব্রেরি, বিশেষ সংগীত উত্পাদনের জিনিসগুলির উপর নির্ভরতা নেই;
- নেটওয়ার্ক থেকে ডাউনলোড হচ্ছে না বা মাইক্রোফোন বা অডিও কার্ডের এমআইডিআই বা এর চেয়ে খুব বাহ্যিক কিছু ব্যবহার করার চেষ্টা করছে না;
- কোড আকার পরিমাপ ইউনিট বাইট হয়। ফাইল বর্তমান ডিরেক্টরিতে তৈরি হতে পারে। প্রাক-বিদ্যমান ফাইল (গুণমান সারণী, ইত্যাদি) উপস্থিত থাকতে পারে, তবে তাদের বিষয়বস্তু স্কোর + এ যুক্ত করা হবে তাদের নাম দিয়ে খোলার মাধ্যমে।
- বয়লারপ্লেট কোড (স্কোর হিসাবে গণনা করা হয়নি) স্বাক্ষরিত পূর্ণসংখ্যার অ্যারে (তালিকা) প্রাপ্ত করে এবং কেবল সেগুলি আউটপুট দেওয়ার ক্ষেত্রে ডিল করে।
- আউটপুট ফর্ম্যাটটিতে সামান্য এন্ডিয়ান 16-বিট শব্দগুলিতে স্বাক্ষর করা হয়েছে, প্রতি সেকেন্ডে 44100 নমুনা, optionচ্ছিক WAV শিরোলেখ সহ। প্লেইন ওয়াভের পরিবর্তে সংকুচিত অডিও আউটপুট দেওয়ার চেষ্টা করা হচ্ছে না;
- দয়া করে সংশ্লেষণের জন্য বিভিন্ন যন্ত্র বাছাই করুন (বা অন্যান্য মানের বনাম কোডের আকারের বুনিয়াটি উপকরণটির জন্য); তবে আপনি কী অনুকরণ করছেন তা প্রাথমিকভাবে বলবেন না - অন্যান্য ব্যবহারকারীদের মন্তব্যে অনুমান করতে দিন;
- বৈদ্যুতিন যন্ত্র নিরুৎসাহিত করা হয়;
- ড্রাম একটি উপকরণ মানুষের কণ্ঠস্বর একটি উপকরণ।
Boilerplates
এখানে কয়েকটি ভাষার জন্য বয়লারপ্লেট রয়েছে। আপনি নিজের ভাষার জন্যও একই রকম বয়লার প্লেট লিখতে পারেন। মন্তব্য করা হয়েছে "জি" ফাংশনটি কেবল একটি ডেমো (1 সেকেন্ড 440 হার্জ সাইন টোন) এর জন্য।
সি:
//#!/usr/bin/tcc -run
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
/*
void g(signed short *array, int* length) {
*length = 44100;
int i;
for(i=0; i<44100; ++i) array[i]=10000*sin(i*2.0*3.14159265358979323*440.0/44100.0);
}
*/
// define your g here
signed short array[44100*100];
int main(int argc, char* argv[]) {
int size=0;
memset(array,0,sizeof array);
// i(array); // you may uncomment and implement some initialization
g(array, &size);
fwrite("RIFFH\x00\x00\x00WAVEfmt\x20\x12\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00\x00\x00LIST\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00GolfNote\0\0\0\0\0\0data\x00\xff\xff\xff", 1, 80, stdout);
fwrite(array, 1, size*sizeof(signed short), stdout);
return 0;
}
পাইথন 2:
#!/usr/bin/env python
import os
import re
import sys
import math
import struct
import array
#def g():
# return [int(10000*math.sin(1.0*i*2*3.141592654*440.0/44100.0)) for i in xrange(0,44100)]
# define your g here
sys.stdout.write("RIFFH\x00\x00\x00WAVEfmt\x20\x12\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00\x00\x00LIST\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00GolfNotePy\0\0\0\0data\x00\xff\xff\xff");
array.array("h", g()).tofile(sys.stdout);
পার্ল 5:
#!/usr/bin/perl
#sub g() {
# return (map 10000*sin($_*3.14159265358979*2*440.0/44100.0), 0..(44100-1))
#}
# define you g here
my @a = g();
print "RIFFH\x00\x00\x00WAVEfmt\x20\x12\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00\x00\x00LIST\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00GolfNotePl\0\0\0\0data\x00\xff\xff\xff";
print join("",map(pack("s", $_), @a));
Haskell,:
#!/usr/bin/runhaskell
import qualified Data.Serialize.Put as P
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C8
import Data.Word
import Control.Monad
-- g :: [Word16]
-- g = map (\t->floor $ 10000 * sin(t*2*3.14159265358979*440/44100)) [0..44100-1]
-- insert your g here
main = do
B.putStr $ C8.pack $ "RIFFH\x00\x00\x00WAVEfmt\x20\x12\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00\x00\x00LIST\x1a\x00\x00\0INFOISFT\x0e\x00\x00\x00GolfNote\0\0\0\0\0\0data\x00\xff\xff\xff"
B.putStr $ P.runPut $ sequence_ $ map P.putWord16le g
উদাহরণ
পিয়ানো সাউন্ডের পরে এখানে বর্ণহীন সি সংস্করণটি মডেল করা হয়েছে:
void g(signed short *array, int* length) {
*length = 44100*5;
int i;
double overtones[]={4, 1, 0.5, 0.25, 0.125};
double freq[] = {393, 416, 376, 355, 339, 451, 555};
double freq_k[] = {40, 0.8, 1, 0.8, 0.7, 0.4, 0.25};
double corrector = 1/44100.0*2*3.14159265358979323;
double volumes_begin[] ={0, 0.025, 0.05, 0.4};
double volumes_end [] ={0.025, 0.05, 0.4, 5};
double volumes_kbegin[]={0, 1.8, 1, 0.4};
double volumes_kend [] ={1.8, 1, 0.4, 0};
for(i=0; i<44100*5; ++i) {
int j;
double volume = 0;
for(j=0; j<sizeof volumes_begin/sizeof(*volumes_begin); ++j) {
double t = i/44100.0;
if(t>=volumes_begin[j] && t<volumes_end[j]) {
volume += volumes_kbegin[j]*(volumes_end[j]-t )/(volumes_end[j]-volumes_begin[j]);
volume += volumes_kend[j] *(t-volumes_begin[j])/(volumes_end[j]-volumes_begin[j]);
}
}
int u;
for(u=0; u<sizeof freq/sizeof(*freq); ++u) {
for(j=0; j<sizeof overtones/sizeof(*overtones); ++j) {
double f = freq[u]*(j+1);
array[i] += freq_k[u]*volume*10000.0/(f)/1*overtones[j]*sin(1.0*i*corrector*f);
}
}
}
}
এটি প্রায় 1330 বাইট স্কোর করে এবং দুর্বল / মাঝারি মানের সরবরাহ করে।
$><<7.chr
রুবি গণনা করে না? : 9 টি চরিত্রের জন্য পি! অথবা $><<?\a
7 অক্ষর জন্য