পাই শব্দ করুন


15

হ্যাঁ, আপনি শিরোনামটি ঠিক পড়েছেন। পাই শব্দ করুন।

আরও সুনির্দিষ্টভাবে, প্রথম 1000-তে পাই এর প্রতিটি অঙ্কের জন্য, এটি একটি মিউজিকাল নোটে ম্যাপ করুন এবং ফলস্বরূপ সুরটি কোনও ফাইলে আউটপুট করুন।

মূলত, প্রতিটি অঙ্ক সি মেজর স্কেলের একটি নোটে পরিণত হয় (মূলত সাধারণ স্কেল)। সুতরাং 1 মিডিল সি-তে পরিণত হয়, 2 টি ডি 4-এ, 3 টি ই 4-তে পরিণত হয়, 9 টি ডি 5-তে পরিণত হয় এবং এই জাতীয়ভাবে।

বিধি

  • প্রতিটি নোটের ঠিক 0.5 সেকেন্ড দীর্ঘ হওয়া উচিত।
  • সুরটি 3 টি শুরু সহ পাই এর প্রথম 1000 ডিজিট ধারণ করে।
  • 1 থেকে 7 মিডিল সি থেকে বি 4, 8 টি সি 5, 9 ডি -5 এবং 0 ই -5 প্রতিনিধিত্ব করে
  • এই চ্যালেঞ্জের আগে যতক্ষণ না এগুলি তৈরি করা হয়েছিল ততক্ষণ সমস্ত সমর্থিত ফাইল ফর্ম্যাটগুলির অনুমতি রয়েছে।
  • শুরু এবং শেষ সহ ফাইলের কোথাও কোনও বিরতি থাকতে পারে না।
  • বাদ্যযন্ত্রটি কিছু যায় আসে না। এটি পিয়ানো, সাইন ওয়েভ, সত্যিই যে কোনও কিছু হতে পারে, যতক্ষণ না সঠিক শব্দ সহজেই শ্রবণযোগ্য।
  • এটি অবশ্যই কোনও ইনপুট নেবে না এবং ফাইল ব্যতীত কোনও আউটপুট উত্পাদন করতে পারে না। অন্যান্য ফাইল থেকে পড়া নিষেধ।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

গণিতের কোড উদাহরণ:

(*please forgive me for this horrible, horrible mess of code*)
digits = RealDigits[Pi, 10, 1000][[1]] /. {0 -> 10};
weights = {0, 2, 4, 5, 7, 9, 11, 12, 14, 16}; 
melody = {};
For[i = 1, i < 1001, i++, melody = {melody , Sound[SoundNote[weights[[digits[[i]]]], 0.5]]}]
final = Sound[Flatten[melody]];
Export["C:\\Mathematica Shenanigans\\pi.wav", final];

প্রথম 100 টি সংখ্যা দেখানো মেলোডি উদাহরণ: http://vocaroo.com/i/s0cfEILwYb8M

আপনার বিচক্ষণতার জন্য, প্রতিটি নোটের জন্য পিচের একটি টেবিল এবং প্রতিটি অঙ্কটি কী নোট উপস্থাপন করে:

Digit 1: C: 261.63 Hz
Digit 2: D: 293.66 Hz
Digit 3: E: 329.63 Hz
Digit 4: F: 349.23 Hz
Digit 5: G: 392.00 Hz
Digit 6: A: 440.00 Hz
Digit 7: B: 493.88 Hz
Digit 8: C5: 523.25 Hz
Digit 9: D5: 587.33 Hz
Digit 0: E5: 659.25 Hz

5
9 ডি 5 এ পরিণত হয়েছে আপনার স্পষ্ট করে দেওয়া উচিত যে অন্যান্য নোটগুলি 4অষ্টমীতে রয়েছে ave এছাড়াও, আপনার টেবিলে অঙ্কটি 0শেষ ( E5) আসতে পারে ?
লুইস মেন্ডো

1
@ লুইস মেন্ডো হ্যাঁ এটি করে। আমি এগুলিকে আরও পরিষ্কার করে দেব।
sagiksp

1
আমরা কি 'ভাল সমর্থিত ফর্ম্যাটস' ধরে নিতে পারি কোনও ভিএলসি দ্বারা উন্মুক্তযোগ্য কোনও অর্থ?
পাভেল

@ পাভেল প্রেটি অনেক
sagiksp

যদি আমার ভাষা শব্দ শব্দ বা ফাইলগুলিতে লেখার সমর্থন না করে তবে আমি নোটের নামগুলি (যেমন 3.14 -> ইসিএফ) আউটপুট দিতে পারি?
ফিনডাব্লু

উত্তর:


10

গণিত, 107 87 বাইট

20 বাইট সংরক্ষণের জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

"t.au"~Export~Sound[SoundNote[⌊12Mod[#,10,1]/7⌋-1,.5]&/@#&@@RealDigits[Pi,10,1000]]

#&@@RealDigits[Pi,10,1000]1000 এর প্রথম 1000 সংখ্যার তালিকা দেয় π SoundNote[⌊12Mod[#,10,1]/7⌋-1একটি অঙ্ক থেকে সঠিক পিচ নম্বর (যেখানে 0 ডিফল্টরূপে মাঝখানে সি হয়) উত্পাদন করে। তারপরে SoundNote[...,.5]&/@সেই পিচ নামটিকে সময়কালের 1/2 সেকেন্ডের শব্দ অবজেক্টে পরিণত করে, যা Soundএকটি আসল অডিও স্নিপেটে সংগ্রহ করে। অবশেষে "t.au"~Export~একটি ইউনিক্স অডিও ফর্ম্যাট ফাইলে রফতানি হয়, বেশিরভাগ কারণেই এক্সটেনশানটি স্বল্পতম সমর্থিত হয় তবে এটি হয় যে আমরা ফাইলের নামটি π এর মুখের মধ্যে একটি চড় !

পূর্ববর্তী জমা:

"t.au"~Export~Sound[StringSplit["E5 C D E F G A B C5 D5"][[#+1]]~SoundNote~.5&/@#&@@RealDigits[Pi,10,1000]]

10

পাইথন 2, 182 বাইট

x=p=6637
while~-p:x=p/2*x/p+2*10**999;p-=2
s="MThd\0\0\0\6\0\1\0\1\342\4MTrk\0\0\13\301\0\220"
for i in`x`:s+="JHGECA@><L\260"[~ord(i)%29]+'{<'
open('p.mid','w').write(s+"\0\377/\0")

`x`উত্পাদন করবে 31415926...20198L। ট্রেলিং Lম্যাপিংয়ের মাধ্যমে চূড়ান্ত চ্যানেল বার্তা বাইট উত্পাদন করতে ব্যবহৃত হয় ~ord(i)%29

একক ট্র্যাক আউটপুট টাইপ করুন 1 মিডি ফাইল, p.midবর্তমান ওয়ার্কিং ডিরেক্টরিতে নাম দেওয়া হয়েছে।

0000: 4d 54 68 64 00 00 00 06  MThd....  # Midi header, 6 bytes to follow
0008: 00 01 00 01              ....      # Type 1, 1 track
000c: e2 04                    â.        # (-)30 ticks per beat, 4 beats per second

000e: 4d 54 72 6b 00 00 0b c1  MTrk...Á  # Track header, 3009 bytes to follow
0016: 00 90 40 7b              ..@{      # Wait  0 ticks, play E4 (3), 97% volume
001a: 3c 3c 7b                 <<{       # Wait 60 ticks, play C4 (1), 97% volume
001d: 3c 41 7b                 <A{       # Wait 60 ticks, play F4 (4), 97% volume
0020: 3c 3c 7b                 <<{       # Wait 60 ticks, play C4 (1), 97% volume
0023: 3c 43 7b                 <C{       # Wait 60 ticks, play G4 (5), 97% volume
...
0bcf: 3c b0 7b 3c              <°{<      # Wait 60 ticks, all notes off
0bd3: 00 ff 2f 00              .ÿ/.      # End of track marker

1
বেশ দেরিতে, তবে আপনি কী পাই সূত্রটি ব্যবহার করছেন তা ভাবতে থাকলে, এটি ম্যাথওয়ার্ল্ড.ওয়লফ্রাম / পিআইফর্মুলাস.চটিএমএলে ফর্মুলা 25-এ পরিবর্তিত
স্যামুয়েল লি

6

স্ক্র্যাচ , 530 বাইট

BookOwl এর উত্তর দ্বারা অনুপ্রাণিত ।

অনলাইন বিক্ষোভ । প্লেব্যাক অবিলম্বে শুরু হবে, spaceথামাতে এবং পুনরায় সেট করতে টিপুন । আবার শুরু করতে বিড়ালটিকে ক্লিক করুন।

সম্পাদনা: কিছুটা নিচে গল্ফ আমি অফিসিয়াল উইকিতে কিছু গল্ফিং টিপস পেয়েছি ।

when gf clicked
set[c v]to[4e3
repeat(c
add[2e3]to[f v
end
repeat(250
set[b v]to(c
set[h v]to((d)mod(1e4
change[c v]by(-16
repeat(b
set[d v]to(((d)*(b))+((1e4)*(item(b)of[f v
set[g v]to(((2)*(b))-(1
replace item(b)of[f v]with((d)mod(g
set[d v]to(((d)-((d)mod(g)))/(g
change[b v]by(-1
end
change[h v]by(((d)-((d)mod(1e4)))/(1e4
repeat(4
add((h)mod(10))to[a v
set[h v]to(((h)-((h)mod(10)))/(10
end
repeat(4
say(item(last v)of[a v
play note((round((((item(last v)of[a v])-(1))mod(10))*(1.78)))+(60))for(0.5)beats
delete(last v)of[a v

গ্রাফিকাল:

একবারে 4 টি অঙ্ক তৈরি করতে রবিনউইটজ ওয়াগন স্পিগট ব্যবহার করে।


3

আর, 450 বাইট

N=261.63*(2^(1/12))^c(16,0,2,4,5,7,9,11,12,14);S=44100;s=unlist(sapply(el(strsplit(as(Rmpfr::Const("pi",1e5),"character"),""))[c(1,3:1001)],function(x)sin(0:(0.5*S-1)*pi*2*N[(x:1)[1]+1]/S)));c=32767*s/max(abs(s));a=file("p.wav","wb");v=writeChar;w=function(x,z)writeBin(as.integer(x),a,z,e="little");v("RIFF",a,4,NULL);w(36+S*10,4);v("WAVEfmt ",a,8,NULL);w(16,4);w(c(1,1),2);w(S*1:2,4);w(c(2,16),2);v("data",a,4,NULL);w(2*length(s),4);w(c,2);close(a)

Rmpfrপাই অঙ্কগুলিতে সঠিক নির্ভুলতা পেতে প্যাকেজ ব্যবহার করে। একটি .wavফাইল আউটপুট দেয় ।

নতুন লাইন এবং মন্তব্যে ইন্ডেন্ট করা:

N=261.63*(2^(1/12))^c(16,0,2,4,5,7,9,11,12,14) # Frequency of each notes
S=44100 #Sampling rate
s=unlist(sapply(el(strsplit(
                   as(Rmpfr::Const("pi",1e5),"character"), #get pi correct digits as a character string
                   ""))[c(1,3:1001)], #Grabs first 1000 digits
                function(x)sin(0:(0.5*S-1)*pi*2*N[(x:1)[1]+1]/S))) #Wave function
c=32767*s/max(abs(s)) #Normalize to range [-32767;32767] as per wav 16-bit standard
a=file("p.wav","wb")
v=writeChar
w=function(x,z)writeBin(as.integer(x),a,z,e="little")
v("RIFF",a,4,NULL)     #ChunkID
w(36+S*10,4)           #Chunksize
v("WAVEfmt ",a,8,NULL) #Format, followed by SubChunk1ID
w(16,4)                #SubChunk1Size
w(c(1,1),2)            #AudioFormat & NumChannels
w(S*1:2,4)             #SampleRate & ByteRate
w(c(2,16),2)           #BlockAlign & BitsPerSample
v("data",a,4,NULL)     #SubChunk2ID
w(2*length(s),4)       #Subchunk2Size
w(c,2)                 #Actual data
close(a)

0

সি (জিসিসি) 572 বাইট

p(float f){i;char b[10000];p=3.14;for(i= 0;i<5000;i++){b[i]=35*sin(f*(2*p*i)/10000);putchar(b[i]);}} f(){i;FILE *f;char p[1001];float n[10];n[0]= 261.63;for(i=1;i<=6;i++){if(i==3)n[i]=349.23;else n[i]=1.12231*n[i-1];}for(i=7;i<=9;i++)n[i]=2*n[i-7];f=popen("pi 1000","r");fgets(p,sizeof(p)-1,f);for(i=0;i<999;i++){switch(p[i]){case'1':p(n[0]);break;case'2':p(n[1]);break;case'3':p(n[2]);break;case'4':p(n[3]);break;case'5':p(n[4]);break;case'6':p(n[5]);break;case'7':p(n[6]);break;case'8':p(n[7]);break;case'9':p(n[8]);break;case'0':p(n[9]);break;default:p(n[0]);break;}}}

অবরুদ্ধ সংস্করণ:

void play(float freq)
{
    char buffer[10000];
    float pi=3.14;
    for(int i = 0; i<5000; i++)
    {
       buffer[i] = 35*sin(freq*(2*pi*i)/10000 );
       putchar(buffer[i]);
    }
}

void f()
{
    FILE *fp;
    char pi[1001];
    float note[10];
    note[0]= 261.63;

    for(int i=1;i<=6;i++)     
    {
       if(i==3)
         note[i]=349.23;
       else
         note[i]=1.12231*note[i-1]; 
    }      

    for(int i=7;i<=9;i++)
      note[i]=2*note[i-7];

   fp=popen("pi 1000","r" );
   fgets(pi, sizeof(pi)-1, fp);  

   for(int i=0;i<1001;i++)
   {
    switch(pi[i])
    {   
        case '1': play(note[0]);break;
        case '2': play(note[1]);break;
        case '3': play(note[2]);break;
        case '4': play(note[3]);break;
        case '5': play(note[4]);break;
        case '6': play(note[5]);break; 
        case '7': play(note[6]);break;
        case '8': play(note[7]);break;
        case '9': play(note[8]);break;
        case '0': play(note[9]);break;
        default : play(note[0]);break;
    }

  }     
}

ব্যাখ্যা:

  • play(float freq) রুটিনটি আপনি যে নোটটি (হার্ডকডযুক্ত) খেলতে চান তার প্যারামিটার হিসাবে ফ্রিকোয়েন্সি গ্রহণ করে এবং একটি বাফারে একটি সাইন ওয়েভ সংরক্ষণ করে।
  • ফাংশনে f(), আমি C4 থেকে E5 পর্যন্ত একটি notesঅ্যারেতে নোটগুলির সাথে সম্পর্কিত ফ্রিকোয়েন্সিগুলি সঞ্চয় করেছিলাম ।
  • piএকটি বাফারে 1000 অঙ্কের পরে মানটি সংরক্ষণ করুন this এটি করার জন্য, আমি piআমার মেশিনে প্যাকেজটি ইনস্টল করেছি এবং popenআউটপুটটি পড়তে pi 1000এবং এটি একটি charবাফারে সঞ্চয় করি ।
  • ব্যবহার করে একটি for লুপ এবং switchআমি বাফারের play()প্রতিটি অঙ্কের সাথে মিলে নোটগুলি তৈরি করতে ফাংশনটি কল করেছি pi। ,

ব্যবহার: ./binary_name.o | aplayআধুনিক লিনাক্স বিতরণগুলিতে, পুরানো বিতরণগুলিতে আপনি এটিকে পুনর্নির্দেশ করবেন/dev/audio


পুরোটির switch(foo){...}মতো কিছু দিয়ে প্রতিস্থাপনের পরামর্শ দিন play(note[(foo-'1')%10])। এছাড়াও,
সিলিংক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.