Pırıltı pırıltı küçük yıldız


27

Popüler İngiliz tekerleme çalmak için bir program yaz.

Nota (Bu dosya, Creative Commons Benzer Paylaşım 3.0 Uluslararası Attribution-Share .: Lisans Atıf Helix84 de İngilizce dil Wikipedia ; Blahedo de İngilizce Vikipedi'de .)

İşe yarayabilecek bazı Wikipedia makaleleri:

Gönderiniz için bazı kurallar:

  • Programınız bilgisayarın ses kartını kullanmalıdır. Programlama diliniz ses donanımına kolay erişemiyorsa, programınız WAV veya MIDI gibi standart bir biçimde bir çıktı dosyası oluşturmalıdır.

  • Programın aslında çıktısını oluşturması gerekir. Örneğin, Ogg Vorbis dosyasını Wikipedia'dan gömmek yasaktır.

  • Ses kalitesi kabul edilebilir olmalıdır. En azından şarkı kolayca tanınmalı. Tercihen, iyi de duyulmalıdır.

  • Odak kod boyutu, ses kalitesi veya her ikisi üzerinde olmalıdır (hangisine karar verdiğinizi açıklayın). Zarif çözümler de harika olurdu. İyi eğlenceler!

  • Bu bir , yani en kısa kod kazanır


frekanslarını yaklaşık değerlendirebilir miyim?
Ming-Tang,

1
Bu neden kapalı?
programcı5000

@ programmer5000 Yakın nedeni çok iyi açıklıyor diyebilirim ...
tamamen insan

2
Golf kodunu yaptıktan sonra bile, bunun hala konu dışı olduğunu söyleyebilirim. Ses kalitesi kabul edilebilir olmalıdır. nesnel bir geçerlilik kriteri değildir.
Dennis,

3
@Dennis "Konu dışı" yerine "belirsiz" gibi olduğunu söyleyebilirim.
Outgolfer Erik

Yanıtlar:


30

QBasic (56)

A$="CCGGAAG2FFEEDDC2"
B$="GGFFEED2"
PLAY "L4"+A$+B$+B$+A$

Odaklama anıdır :)

(Ancak bunu test etmek için bir QBasic yok)


1
DOSBox kurulumumda en azından çalışıyor, fakat tam şarkıyı çalmak için değiştirebilir misiniz?
Lütfen

Bitti. Okuma becerilerim üzerinde çalışacağım: /
Eelvex,

Hmm bu sayfa yanlış mı? en.wikibooks.org/wiki/QBasic/Appendix#PLAY -> Bir oktav, C ile başlar ve B ile biter. QBASIC'in orta C tabanlı olmasını yarı yarıya beklerdim, ancak bu gösterim, tam olarak doğru ise, bunun A220'ye dayanmasını önerir. :)
mootinator

6
Vay canına, bu QBasic ile yaptığım ilk programlama deneyimlerimin hatıralarını getiriyor ... diğer şeylerin yanı sıra peynirli müzik de yazıyor!
Daniel Standage,

3
Hafıza şeridinde yolculuk için +1! Şimdi tek ihtiyacım olan bir DRAW komut örneği :)
System Down

16

JavaScript ( 214 212 211 karakter)

Safari Shell , Opera veya Google Chrome'u JavaScript Shell'e açın , ardından aşağıdaki kodu girin:

for(s="",y=192e3;x=--y/4e3|0;)s+="~ "[(y%4e3>800|x%8==1)&Math.pow(2,"024579702457245702457970"[x>>1]/12)*y/31%2];open("data:audio/wav;base64,UklGRiXuAgBXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQHuAgCA"+btoa(s))

Okunabilirlik için sınırsız (o zaman bile anlaşılması zor olabilir):

for(s = "", y = 192E3; x = --y / 4E3 | 0;) {
  s += "~ "[(y % 4E3 > 800 | x % 8 == 1) & Math.pow(2, "024579702457245702457970"[x >> 1] / 12) * y / 31 % 2];
}
open("data:audio/wav;base64,UklGRiXuAgBXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQHuAgCA" + btoa(s));

Birkaç karakter daha, Firefox'ta da çalışabilir, ancak audio/wavparçayı en azından WAV dosyasını kaydetmek üzere değiştirebilirsiniz .


1
Chrome'da gayet iyi çalışıyor.
mootinator

@ mootinator: Benim için de çalışıyor. Chrome'da kontrol etmeyi düşünmemiştim - oldukça yakın zamana kadar WAV dosya desteği almamıştı. code.google.com/p/chromium/issues/detail?id=23916
Lütfen 31:11

Vaov! Bu harika.
Phillip Senn

"birkaç karakter daha" ile ne demek istiyorsun? Bu karakterler ne olurdu?
Phillip Senn

@cf_PhillipSenn: Kodu Firefox'ta çalıştırdığımda, işlevsel olmayan bir QuickTime Player aldım. Ben kodunu değiştirmek zorunda open(...)için Audio(...).play()o Firefox'un çalışma dahili ses oynatıcı kullanmak için almak için (8 daha fazla karakterden).
Lütfen

11

C # (Uzunluk: LOL)

Yani burada yaptığım şey, C #'daki QBasic çözümü için kullanılan dizeden bir .wav dosyası oluşturmak için destek sağlamaktı (tek oktav, kazara yok). Vurgu yapıldı:

  1. unsafeKod bloklarından kaçınmak
  2. İsraf değil de yapıyor zamanımın çoğunu
  3. Uzatmak için nispeten basit hale

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.IO;

namespace ConsoleApplication1
{
    public static class Extension
    {
        public static byte[] ToByteArray(this object o)
        {
            return o.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)
                .SelectMany(x =>
                                {
                                    var value = x.GetValue(o, null);
                                    if (value.GetType().Equals(typeof (UInt16)))
                                    {
                                        return BitConverter.GetBytes((UInt16) value);
                                    }
                                    if (value.GetType().Equals(typeof (UInt32)))
                                    {
                                        return BitConverter.GetBytes((UInt32) value);
                                    }
                                    if (value.GetType().Equals(typeof(char[])))
                                    {
                                        return ((char[]) value).Select(y => Convert.ToByte(y));
                                    }
                                    if (value.GetType().Equals(typeof(byte[])))
                                    {
                                        return (byte[]) value;
                                    }
                                    throw new NotImplementedException();
                                }).ToArray();
        }
    }
    public class Wave
    {
        public readonly byte[] WavFile; 

        public Wave(string notes)
        {
            var header = new Header();
            var data = new List<Chunk>();
            var f = new Fmt(8000);
            data.Add(f);
            data.Add(new WavData(notes, f));
            var thefile = data.SelectMany(x => x.ToByteArray()).ToArray();
            header.Size = (uint)thefile.Length + 4;
            WavFile = header.ToByteArray().Concat(thefile).ToArray();
        }
        class WavData: Chunk
        {
            private static IEnumerable<byte> RenderNote(string note, int length, Fmt fmt)
            {
                double frequency;
                switch (note)
                {
                    case "A":
                        frequency = 440;
                        break;
                    case "B":
                        frequency = 493.883;
                        break;
                    case "C":
                        frequency = 261.626;
                        break;
                    case "D":
                        frequency = 293.665;
                        break;
                    case "E":
                        frequency = 329.628;
                        break;
                    case "F":
                        frequency = 349.228;
                        break;
                    case "G":
                        frequency = 391.995;
                        break;
                    default:
                        throw new NotImplementedException("Unsupported Note");
                }
                var result = new byte[fmt.SampleRate / length * 2];  // For 120BPM tempo
                for (int i = 0; i < result.Length; i++)
                {
                    double time = (i % fmt.SampleRate) / (double)fmt.SampleRate;
                    double position = time * frequency;
                    if (result.Length - i <= fmt.SampleRate / 16)
                        result[i] = 127;
                    else
                        result[i] = (byte)Math.Round((Math.Sin(position * 2 * Math.PI) + 1) * 127);
                }
                return result;
            }
            public WavData(string notes, Fmt fmt)
            {
                Samples = new byte[0];
                foreach (var note in Regex.Matches(notes, @"[A-G][1|2|4|8]?").OfType<Match>().Select(x => x.Value))
                {
                    Samples = Samples.Concat(RenderNote(note[0] + "", note.Length > 1 ? note[1] - '0' : 4, fmt)).ToArray();
                }

            }
            public override char[] Id
            {
                get { return "data".ToCharArray(); }
            }
            public override uint DataSize
            {
                get { return (uint)Samples.Length; }
            }
            public byte[] Samples { get; private set; }
        }
        class Fmt : Chunk
        {
            public Fmt(UInt32 sampleRate)
            {
                CompressionCode = 1; // Unknown/PCM
                Channels = 1;
                SampleRate = sampleRate;
                SignificantBits = 8;
            }
            public override char[] Id
            {
                get { return "fmt ".ToCharArray();}
            }
            public override uint DataSize
            {
                get { return 16; }
            }
            public UInt16 CompressionCode { get; private set; }
            public UInt16 Channels { get; private set; }
            public UInt32 SampleRate { get; private set; }
            public UInt32 AvgBytesPerSecond { get { return SampleRate*BlockAlign; } }
            public UInt16 BlockAlign { get { return (UInt16) (SignificantBits/8*Channels); } }
            public UInt16 SignificantBits { get; private set; }
        }
        class Header
        {
            public Header()
            {
                Type = "RIFF".ToCharArray();
                RiffType = "WAVE".ToCharArray();
                Size = 0;
            }

            public char[] Type { get; private set; }
            public UInt32 Size { get; set; }
            public char[] RiffType { get; private set; }
        }
        abstract class Chunk
        {
            public abstract char[] Id { get; }
            public abstract UInt32 DataSize { get; }
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            var p1 = "CCGGAAG2";
            var p2 = "FFEEDDC2";
            var p3 = "GGFFEED2";
            var w = new Wave(p1+p2+p3+p3+p1+p2);
            using (var f = new FileStream("testfile.wav", FileMode.Create))
                f.Write(w.WavFile, 0, w.WavFile.Length);
        }
    }
}

Yukarıdaki cevabımda çıkış dalgasının çok küçük bir genlik olduğunu fark ettim. Açıkçası 8 bit bir örneğin nasıl çalıştığı hakkında bir şey eksik.
mootinator

Ah, tamir ettim. Operasyon sırası önemlidir. Burada örnek çıktı: dl.dropbox.com/u/469380/testfile.wav
mootinator

FromDigits["LOL",36]==28101Olmadığını değil LOL gibi bakmak <sub> 36 </ sub> ... bayt
CalculatorFeline

6

Python (259)

import pysynth

c=('c',4)
g=('g',4)
a=('a',4)
b=('b',4)
d=('d',4)
e=('e',4)
f=('f',4)
g2=('g',2)
c2=('c',2)
d2=('d',2)

s=(c,c,g,g,a,a,g2,f,f,e,e,d,d,c2,g,g,f,f,e,e,d2,g,g,f,f,e
            ,e,d2,c,c,g,g,a,a,g2,f,f,e,e,d,d,c2)

pysynth.make_wav(s,fn="s.wav")

3
bu kısaltılamaz import ttlsmıydı?
zzzzBov

@zzz: Um, şaka mı bu?
John

2
@zzz: -Bangs-head-on-desk- Tam olarak ne diyorsunuz?
John

1
@John bu açıkça bir koan. ya eğilmeli ya da ona vurmalısın.
ixtmixilix 09:11

1
(çok geç yorum) Referans için, burada bir sürüm -60 bayt, çünkü gerçekten golf.
Outgolfer Erik,

5

C, 277 karakter

#include<math.h>
a[]={0,7,9,7,5,4,2,0,7,5,4,2,7,5,4,2,0,7,9,7,5,4,2,0},i,j,f;main(){unsigned char
b[8000];f=open("/dev/dsp",1);for(i=0;i<24;i++){for(j=0;j<8000;j++){b[j]=(i%4==3
||j/400%20!=9?1+sinf(j*powf(2,a[i]/12.)):1)*127;}for(j=0;j<8000;j+=write(f,b+j,
8000-j));}close(f);}

Perl, 203 karakter

open F,'>:raw','/dev/dsp';for$a(0,7,9,17,5,4,2,10,7,5,4,12,7,5,4,12,0,7,9,17,5,4
,2,10){$b=pack'C*',map 127*($a>9||$_/400%20!=9?1+sin($_*2**($a%10/12)):1),0..
7999;$b=substr$b,syswrite F,$b while length$b}

Uygun bir şekilde, OSS sitesindeki /dev/dsp8kHz mono- U8 varsayılan; Burada tek yaptığım cihazı açmak ve hesaplanmış örnekler yazmak.


Ayrı Perl Gönderin; codegolf :) konum
Eelvex

179 -j,f;main(i){char b[8000];f=open("/dev/dsp",1);for(i=24;i--;write(f,b,j))for(j=0;j<8000;j++)b[j]=(i%4&&j/400%20==9?1:1+sinf(j*powf(2,("@BDEGIG@BDEGBDEG@BDEGIG@"[i]-64)/12.)))*127;}
gastropner

4

PowerShell: 207

Golf kodu:

filter n {switch($_){C{262}D{294}E{330}F{349}G{392}A{440}}}$t="CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";1..6|%{$t[0..5]|n|%{[console]::beep($_,600)};$t[6]|n|%{[console]::beep($_,1200)};$t=$t.SubString(7)}

Ungolfed, yorumlarla:

# Filter to define note frequencies.
filter n {switch($_){C{262}D{294}E{330}F{349}G{392}A{440}}}

# Notes for Twinkle, Twinkle, Little Star.
$t="CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC"

# Run through each phrase in the song.
1..6|%{
    # Play first six notes as quarter notes.
    $t[0..5]|n|%{[console]::beep($_,600)}
    # Play seventh note as half note.
    $t[6]|n|%{[console]::beep($_,1200)}
    # Left-shift $t by 7 notes.
    $t=$t.SubString(7)
}

Şarkının şimdiye kadarki en harika sesi değil, ama işe yarıyor.


1
(geç yorum) yapabilir misin n{yerine n {?
Outgolfer Erik,

4

C - 520

Çarpmak.

#include <linux/fd.h>
#include <time.h>
struct timespec t,p;char*q="AAHHJJH  FFEECCA  HHFFEEC  HHFFEEC  AAHHJJH  FFEECCA";x,y,z,v,w;main(){x=open("/dev/fd0",3);for(y;q[y];y++){clock_gettime(CLOCK_MONOTONIC,&p);if(q[y]>' ')for(w=z=0;z<4e8;z+=t.tv_nsec,w++){struct floppy_raw_cmd s={0};s.flags=FD_RAW_NEED_SEEK;v=!v;s.track=v;ioctl(x,FDRAWCMD,&s);clock_gettime(CLOCK_MONOTONIC,&t);t.tv_nsec=(w+1)*5e8/pow(2.,q[y]/12.)-(t.tv_sec-p.tv_sec)*1e9-t.tv_nsec+p.tv_nsec;t.tv_sec=0;nanosleep(&t,0);}t.tv_nsec=2e8;nanosleep(&t,0);}}

Neden geçen yüzyılın donanımlarını hoparlörler ve kulaklıklar gibi kullanıyorsunuz? Bu mükemmel kod, şarkıyı modern bir donanımda çalmanıza izin verir: disket sürücü!
Özel bir gereklilik yok:

  • Bir IDE disket sürücüsü
  • Linux çekirdeği
  • İle derleyin -lm
  • Programın erişebildiğinden emin olun /dev/fd0, bu yüzden cihazı ya da süper kullanıcı olarak çalıştırın

Kuralları biraz büker, ancak bir saniye için disket sürücüsünü bir ses aygıtı ve IDE denetleyicisini tümleşik bir ses kartı olarak kabul edelim.


Bunun makul olduğunu söyleyebilirim, disket sürücüler şaşırtıcı bir şekilde bu görev için yetenekli. Youtu.be/LkqYLOa76E0
Hotkeys

3

HyperCard 2.2 - 113

play harpsichord "c c g g a a gh fq f e e d d ch gq g f f e e dh gq g f f e e dh cq c g g a a gh fq f e e d d ch"

Kullanım: HyperCard'ı başlatın, Mesaj Kutusunu açmak için ⌘M yazın, yukarıdaki kodu yapıştırın ve enter tuşuna basın.

harpsichordfarklı sesler almak için fluteveya ile değiştirilebilir boing.


(çok geç yorum) harpsichord-> flute-6 enstrüman ve tırnak toplamı arasında -1 toplamı -7 kaldır
Erik, Outgolfer

3

C, 96 karakter

main(t){for(;++t>>16<3;)putchar(t*!!(t>>9&7|!(-t>>12&7))*(96+"#d|dOE3#dOE3dOE3"[t>>13&15])>>5);}

Klasik bytebeat tarzında ham 8 bitlik işaretsiz mono ses verileri üretir . Çalma için önerilen örnekleme oranları 8 ila 16 kHz arasındadır; Numune hızını değiştirmek tempoyu ve perdeyi değiştirir.

Linux altında derlemek ve oynamak için, yukarıdaki kodu olduğu gibi kaydedin twinkle.cve aşağıdaki komutları çalıştırın:

gcc twinkle.c -o twinkle
./twinkle | aplay

Kodun nasıl çalıştığı hakkında bazı notlar:

  • Bunun gibi bytebeat bileşimleri için kullanılan genel numara putchar(), bir tamsayı değeri alır, ancak yalnızca sekiz bitini yazdırır. Böylece putchar(t), burada tartan bir sayaç, bir testere dişi dalga üreten ve dalganın frekansı çarpılarak değiştirilebilir tuygun bir değer ile.

  • !!(t>>9&7|!(-t>>12&7))yinelenen 6 + 1 nota deseni üretir. Spesifik olarak, ne zaman ve ne zaman olacağını !!(t>>9&7)değerlendirir . Böylece, her 4096 numunede dalga formunda 512-numune boşluğu üretirken, bu sekizinci boşluğu ortadan kaldırmaktadır.0t>>9 & 7 == 01!(-t>>12&7)

  • 96+"#d|dOE3#dOE3dOE3"[t>>13&15]melodiyi oluşturur: Dize artı 96'daki her karakterin ASCII kodu karşılık gelen notun nispi frekansını verir. Aslında, değerler 3. / küçük oktavdaki konser aralığı notalarının Hz cinsinden yaklaşık frekanslarıdır, yani 220'ye karşılık gelir. Ancak, bu değerlerin çarpıldığı temel ton yaklaşık 64 Hz olduğundan (16 kHz'te çalındığında) veya 8 kHz'te çalındığında 32 Hz), >>5frekansı makul bir aralığa geri döndürmek için sonucu beş oktafa düşürmemiz gerekir.

Ps. Eğer bir JavaScript tabanlı bytebeat oyuncu bu kodu denemek isterseniz, değiştirin [t>>13&15]ile .charCodeAt(t>>13&15).


2

piton 317 305 301

Bu benim çözümüm, sadece standart python kütüphaneleri kullanarak:

import math,wave,struct;d=24000;r=1100.;t=wave.open("t.wav","w");t.setparams((1,2,int(r),d,"NONE",""));a=[0,7,9,7];b=[5,4,2,0];c=[7,5,4,2]
for h in[math.sin(6*[240*2**(j/12.)for j in a+b+c+c+a+b][x/1000]*(x/r))*(x%500>9 or x/1000%4>2)for x in range(d)]:t.writeframes(struct.pack('h', int(h*64000/2)))

Ve burada okunabilirlik için biraz daha boşluk var:

import math,wave,struct;d=24000;r=1100.
a=[0,7,9,7];b=[5,4,2,0];c=[7,5,4,2];s=[240*2**(j/12.) for j in a+b+c+c+a+b]
z=[math.sin(6*s[int(x/1000)]*(x/r))*(x%500>10 or int(x/1000)%4>2) for x in range(d)]
t=wave.open("t.wav","w");t.setparams((1,2,int(r),d,"NONE",""))
for h in z:t.writeframes(struct.pack('h', int(h*64000./2)))

2

Mathematica, 86 karakter

s=SoundNote;If[#>9,s[#-10,2],{s@#,s@#}]&/@Join[a={0,7,9,17,5,4,2,10},b={7,5,4,12},b,a]

2

Arduino, 688

int length=15;char notes[]="ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc";int beats[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,4};int tempo=300;void playTone(int tone,int duration){for(long i=0;i<duration*1000L;i+=tone*2){digitalWrite(11,HIGH);delayMicroseconds(tone);digitalWrite(11, LOW);delayMicroseconds(tone);}}void playNote(char note, int duration){char names[]={'c','d','e','f','g','a','b','C'};int tones[]={1915,1700,1519,1432,1275,1136,1014,956};for(int i=0;i<8;i++){if(names[i]==note){playTone(tones[i], duration);}}}void setup(){pinMode(11, OUTPUT);}void loop(){for(int i=0;i<length;i++){if(notes[i]==' '){delay(beats[i]*tempo);}else{playNote(notes[i],beats[i]*tempo);}delay(tempo/2);}}

Zili çıkış 11'e takın. Esas olarak kaliteye ve ayrıca kod uzunluğuna konsantre oldum .


(geç yorum) "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "boşluk kaldırılsın mı? int beats[] =boşluk kaldırılsın mı? for (longboşluk kaldırılsın mı? 11, LOWboşluk kaldırılsın mı? note, intboşluk kaldırılsın mı? i], durationboşluk kaldırılsın mı? 11, OUTPUTboşluk kaldırılsın mı?
Outgolfer Erik,

Gerçekten bazı alanları unuttun mu? Anladığım kadarıyla, boşluk ffeeddc ", sonunda ihtiyaç duymadığınız ve beats[] =bir boşluk olması için hiçbir neden bulunmayan bir tür gecikme içindir . Ayrıca, kod uzunluğu üzerinde yoğunlaşan bir versiyon yapmalısınız, sadece bunun için!
Outgolfer Erik,

Sanırım değişkenlerin hepsi bir harf olabilir ama böyle eski bir cevabın zamanına değeceğini sanmıyorum. Bu ipuçları için teşekkürler.
Timtech

Tamam, isterseniz ayrı bir cevap olarak göndermekten çekinmeyin.
Timtech

@Timtech Soru kapandığı için maalesef bu
konuya katılamaz

2

bash + say + gunzip, 136 bayt

sayTabii ki, OS X text-to-speech komutu. Bu ... salakça. Evet, hadi salakla gidelim.

printf '<117 bytes>'|gunzip|sh

117 bayt, elbette, yazdırılamayan karakterler içeren bir gzip akışıdır. İşte bu karakterleri içeren betiğin xxd dökümü:

00000000: 7072 696e 7466 2027 1f8b 085c 305c 305c  printf '...\0\0\
00000010: 305c 305c 3002 032b 4eac 54d0 2d0b c9c8  0\0\0..+N.T.-...
00000020: cf4d 2c56 c8e7 c2ca 75cc cb4b c4ce 71cb  .M,V....u..K..q.
00000030: ccc7 c90b 4b4d 85f0 7252 530b 14f4 4ca0  ....KM..rRS...L.
00000040: c2de 8945 a979 4061 6cbc e0c4 dcc4 bc92  ...E.y@al.......
00000050: 8c44 dc02 2e89 7999 a939 685c 5c74 7723  .D....y..9h\\tw#
00000060: ec44 755c 6e2a 8f8a ee19 581b 8767 1402  .Du\n*....X..g..
00000070: 5c30 fa36 7e25 2599 025c 305c 3027 7c67  \0.6~%%..\0\0'|g
00000080: 756e 7a69 707c 7368                      unzip|sh

açıklama

117 bayt gzipped aşağıdaki komut dosyasıdır:

say -vThomas o
say -vThomas o
say -vAnna o
say -vAnna o
say -vFiona o
say -vFiona o
say -vVeena o
sleep .4
say -vKaren o
say -vKaren o
say -vSamantha o
say -vSamantha o
say -vDaniel o
say -vDaniel o
say -vThomas o
sleep .4
say -vVeena o
say -vVeena o
say -vKaren o
say -vKaren o
say -vSamantha o
say -vSamantha o
say -vDaniel o
sleep .4
say -vVeena o
say -vVeena o
say -vKaren o
say -vKaren o
say -vSamantha o
say -vSamantha o
say -vDaniel o
sleep .4
say -vThomas o
say -vThomas o
say -vAnna o
say -vAnna o
say -vFiona o
say -vFiona o
say -vVeena o
sleep .4
say -vKaren o
say -vKaren o
say -vSamantha o
say -vSamantha o
say -vDaniel o
say -vDaniel o
say -vThomas o

Doğru, ben sadece say"o" diyen birkaç farklı ses çıkardım . Hangilerinin olduğunu bulmak için, her bir sesin sesinin hızlı ve kirli bir tahminde bulunmak için aubionotes kullanarak bir senaryo yazdım , daha sonra birçok deneme yaptım ve çoğunlukla doğru olan sesleri buldum.

Bunu elle golf oynamaya çalışmayı düşündüm, ama Zopfli'nin daha kısa sürede çalışacağını düşündüğüm çok fazla tekrar var, bu yüzden kolay yoldan çıktım.


1

SmileBASIC, 45 bayt

BGMPLAY"{M=CCGGAAG2FFEEDDC2}{M}[GGFFEED2]2{M}

0

Powershell, 120 117 bayt

[Console]::beep, Not etiketleri ve Iszi'den ilham alan frekanslar

 ($a='ccggaaGffeeddC')+'ggffeeD'*2+$a|% t*y|%{[console]::beep((0,110,0,65,73,82,87,98)[$_-band7]*4,600+600*($_-lt97))}

Ana fikir :

  • Melodi bir dizgede kodlanmıştır.
  • Notlar karakter ile kodlanır A, C, D, E, F, G.
  • Büyük harf a anlamına gelir double duration.
  • 3 düşük bit ( $_-band7) frekanslar dizisinde indeks olarak her not kullanımları ( A->1, C->3, D->4...)
  • Bu komut dosyası, frekanslar için azaltılmış örnekleme oranını kullanır: (0,110,0,65,73,82,87,98)[$_-band7]*4bunun yerine Iszi'nin (0,440,0,262,294,330,349,392)[$_-band7]. [console]::Beepen doğru müzik aleti değil, bu yüzden biraz sahte olabilir :)

Açıklama : Melodi dizisindeki her karakter ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddCiçin komut dosyası:

  • Dizin olarak alt bitleri kullanarak dizinin frekanslarını arar.
  • char büyük / küçük harfe dayalı bir süre hesaplar
  • [console]::beepnota çalmak için aramalar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.