Ngôi sao nhỏ lấp lánh


27

Viết một chương trình để chơi các vần tiếng Anh phổ biến.

Bản nhạc (Tệp này được cấp phép theo Giấy phép Creative Commons Attribution-Share Alike 3.0 Unributioned Attribution: Helix84 tại tiếng Anh Wikipedia ; Blahedo tại Wikipedia tiếng Anh .)

Một số bài viết Wikipedia có thể hữu ích:

Một số hướng dẫn cho trình của bạn:

  • Chương trình của bạn phải sử dụng card âm thanh của máy tính. Nếu ngôn ngữ lập trình của bạn không có quyền truy cập thuận tiện vào phần cứng âm thanh, chương trình của bạn phải tạo tệp đầu ra ở một số định dạng chuẩn như WAV hoặc MIDI.

  • Chương trình của bạn phải thực sự tạo ra đầu ra của nó. Ví dụ: nhúng tệp Ogg Vorbis từ Wikipedia sẽ không được phép.

  • Chất lượng âm thanh phải được chấp nhận. Ít nhất, bài hát nên dễ nhận ra. Tốt hơn là, nó cũng nên nghe tốt.

  • Trọng tâm phải là kích thước mã, chất lượng âm thanh hoặc cả hai (giải thích cái nào bạn đã quyết định). Giải pháp thanh lịch cũng sẽ là tuyệt vời. Chúc vui vẻ!

  • Đây là một , vì vậy mã ngắn nhất sẽ thắng


Tôi có thể xấp xỉ tần số ghi chú?
Ming-Tang

1
Tại sao điều này bị đóng cửa?
lập trình

@ lập trình
viên5000

2
Ngay cả sau khi làm cho nó mã golf, tôi muốn nói rằng điều này vẫn lạc đề. Chất lượng âm thanh phải được chấp nhận. không phải là một tiêu chí hợp lệ khách quan.
Dennis

3
@Dennis Tôi muốn nói rằng nó giống như "không rõ ràng" hơn là "ngoài chủ đề".
Erik the Outgolfer

Câu trả lời:


30

QBasic (56)

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

Tập trung vào hồi tưởng :)

(Đừng có QBasic để kiểm tra điều này)


1
Hoạt động trên bản cài đặt DOSBox của tôi ít nhất, nhưng bạn có thể sửa đổi nó để phát toàn bộ bài hát không?
Vui lòng khởi động

Làm xong. Tôi sẽ thực hiện các kỹ năng đọc của mình: /
E Mườix

Hmm là trang này sai? vi.wikibooks.org/wiki/QBasic/Appcill#PLAY -> Một quãng tám bắt đầu bằng C và kết thúc bằng B. Tôi đã hy vọng một nửa QBASIC là trung cấp C, nhưng ký hiệu đó sẽ gợi ý rằng nó dựa trên chính xác A220 :)
mootinator

6
Ồ, điều này mang lại những ký ức về trải nghiệm lập trình đầu tiên của tôi với QBasic ... liên quan, trong số những thứ khác, viết nhạc sáo rỗng!
Daniel Standage

3
+1 cho chuyến đi xuống làn nhớ! Bây giờ tất cả những gì tôi cần là một mẫu lệnh DRAW :)
System Down

16

JavaScript ( 214 212 211 ký tự)

Mở Safari, Opera hoặc Google Chrome sang JavaScript Shell , sau đó nhập mã bên dưới:

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))

Chưa hoàn thành về khả năng đọc (thậm chí sau đó có thể khó hiểu):

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));

Với nhiều ký tự hơn, nó cũng có thể hoạt động trên Firefox, nhưng bạn có thể thay đổi audio/wavphần này để ít nhất lưu tệp WAV.


1
Hoạt động tốt trong Chrome.
mootinator

@mootinator: Làm việc cho tôi là tốt. Tôi đã không nghĩ đến việc kiểm tra nó trong Chrome - nó đã không nhận được hỗ trợ tệp WAV cho đến gần đây. code.google.com/p/chromium/issues/detail?id=23916
Vui lòng khởi động

Ồ Đây là điều tuyệt vời.
Phillip Senn

bạn có ý gì khi "có thêm vài ký tự"? Những nhân vật đó sẽ là gì?
Phillip Senn

@cf_PhillipSenn: Khi tôi chạy mã trên Firefox, tôi đã nhận được một Trình phát tệp không có chức năng. Tôi đã phải thay đổi mã open(...)thành Audio(...).play()(8 ký tự nữa) để sử dụng nó để sử dụng trình phát âm thanh tích hợp sẵn của Firefox.
Xin hãy bắt đầu

11

C # (Độ dài: LOL)

Vì vậy, những gì tôi đã làm ở đây là triển khai hỗ trợ để tạo tệp .wav từ chuỗi được sử dụng cho giải pháp QBasic trong C # (quãng tám, không có tai nạn). Nhấn mạnh vào:

  1. Tránh unsafecác khối mã
  2. Không lãng phí quá nhiều thời gian của tôi để làm điều đó
  3. Làm cho nó tương đối đơn giản để mở rộng

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);
        }
    }
}

Tôi nhận thấy sóng đầu ra có biên độ rất nhỏ trong câu trả lời của tôi ở trên. Rõ ràng tôi đang thiếu một cái gì đó về cách một mẫu 8 bit hoạt động.
mootinator

À, sửa nó rồi. Thứ tự các hoạt động là quan trọng. Đầu ra mẫu tại đây: dl.dropbox.com/u/469380/testfile.wav
mootinator

FromDigits["LOL",36]==28101Điều đó không giống như LOL <sub> 36 </ sub> byte ...
CalculatorFeline

6

Con trăn (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
điều này không thể được rút ngắn import ttls?
zzzzBov

@zzz: Ừm, đó có phải là một trò đùa không?
Giăng

2
@zzz: -Bangs-head-on-Desk- Bạn đang nói chính xác điều gì?
John

1
@ John rõ ràng là một công án. bạn nên cúi đầu hoặc đánh anh ta.
ixtmixilix

1
(nhận xét rất muộn) Để tham khảo, đây là phiên bản -60 byte, vì nó thực sự bị đánh gôn.
Erik the Outgolfer

5

C, 277 ký tự

#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 ký tự

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}

Thuận tiện, mặc định của OSS/dev/dsp8kHz mono u8; tất cả những gì tôi làm ở đây là mở thiết bị và viết các mẫu được tính toán.


Đăng Perl riêng; bạn đang ở trên codegolf :)
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;}
dạ dày 30/12/17

4

PowerShell: 207

Mã đánh gôn:

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, với ý kiến:

# 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)
}

Không phải là bản tái hiện âm thanh tuyệt vời nhất của bài hát, nhưng nó hoạt động.


1
(bình luận muộn) Bạn có thể làm n{thay vì n {?
Erik the Outgolfer

4

C - 520

Băng.

#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);}}

Tại sao sử dụng phần cứng của thế kỷ trước như loa và tai nghe? Đoạn mã tuyệt vời này cho phép bạn phát bài hát trên một phần cứng hiện đại: ổ đĩa mềm!
Không có những đòi hỏi đặc biệt:

  • Một ổ đĩa mềm IDE
  • nền tảng Linux
  • Biên dịch với -lm
  • Đảm bảo chương trình có thể truy cập /dev/fd0, do đó, có thể điều khiển thiết bị hoặc chạy dưới dạng siêu người dùng

Uốn các quy tắc một chút, nhưng hãy chờ một giây xem ổ đĩa mềm là thiết bị âm thanh và bộ điều khiển IDE là một card âm thanh tích hợp.


Tôi muốn nói điều này là hợp lý, ổ đĩa mềm là đáng ngạc nhiên có khả năng cho công việc này youtu.be/LkqYLOa76E0
Hotkeys

3

Thẻ siêu thanh 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"

Cách sử dụng: Khởi động HyperCard, nhập M để mở Hộp thông báo, dán mã ở trên và nhấn enter.

harpsichordcó thể được thay thế bằng flutehoặc boingđể có được âm thanh khác nhau.


(nhận xét rất muộn) harpsichord-> flute-6 xóa khoảng cách giữa nhạc cụ và dấu ngoặc kép -1 tổng -7
Erik the Outgolfer

3

C, 96 ký tự

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

Tạo dữ liệu âm thanh đơn âm không dấu 8 bit thô theo kiểu bytebeat cổ điển . Tốc độ mẫu được đề xuất để phát lại là từ 8 đến 16 kHz; thay đổi tốc độ mẫu thay đổi nhịp độ và cao độ.

Để biên dịch và chơi trong Linux, hãy lưu mã ở trên twinkle.cvà chạy các lệnh sau:

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

Một số lưu ý về cách thức hoạt động của mã:

  • Thủ thuật chung được sử dụng cho các tác phẩm bytebeat như thế này là putchar()lấy một giá trị nguyên nhưng chỉ in tám bit thấp của nó. Do đó, putchar(t)nơi tmột bộ đếm tăng, tạo ra sóng răng cưa và tần số của sóng có thể được thay đổi bằng cách nhân tvới một giá trị phù hợp.

  • !!(t>>9&7|!(-t>>12&7))tạo ra mẫu ghi chú 6 + 1 lặp lại. Cụ thể, !!(t>>9&7)đánh giá 0bất cứ khi nào t>>9 & 7 == 01khác. Do đó, nó tạo ra khoảng cách 512 mẫu trong dạng sóng cứ sau 4096 mẫu, trong khi !(-t>>12&7)loại bỏ khoảng cách thứ tám như vậy.

  • 96+"#d|dOE3#dOE3dOE3"[t>>13&15]tạo ra giai điệu: mã ASCII của từng ký tự trong chuỗi cộng với 96 cho tần số tương đối của nốt tương ứng. Trên thực tế, các giá trị là tần số gần đúng tính bằng Hz của các nốt nhạc hòa nhạc trong quãng tám thứ 3 / nhỏ, tức là với A tương ứng với 220. Tuy nhiên, do âm cơ sở mà các giá trị này được nhân lên là khoảng 64 Hz (khi được phát ở 16 kHz , hoặc 32 Hz khi phát ở 8 kHz), chúng ta cần thu nhỏ kết quả xuống năm quãng tám >>5để đưa tần số trở lại phạm vi hợp lý.

Thi thiên Nếu bạn muốn thử mã này trên trình phát bytebeat dựa trên JavaScript, hãy thay thế [t>>13&15]bằng .charCodeAt(t>>13&15).


2

Con trăn 317 304 301

Đây là giải pháp của tôi, chỉ sử dụng các thư viện python tiêu chuẩn:

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)))

Và đây là một số khoảng trắng để dễ đọc hơn:

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

Toán học, 86 ký tự

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);}}

Cắm còi trên đầu ra 11. Tôi tập trung chủ yếu vào chất lượng , nhưng cũng tập trung vào độ dài mã.


(bình luận muộn) "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "xóa không gian? int beats[] =xóa không gian? for (longxóa không gian? 11, LOWxóa không gian? note, intxóa không gian? i], durationxóa không gian? 11, OUTPUTxóa không gian?
Erik the Outgolfer

Bạn đã thực sự quên một số không gian? Theo như tôi hiểu, không gian trong ffeeddc "dành cho một số độ trễ, thứ mà bạn không cần ở cuối, và beats[] =không có lý do gì để có một khoảng trắng. Ngoài ra, bạn nên tạo một phiên bản tập trung vào chiều dài mã, chỉ vì cái quái quỷ đó!
Erik the Outgolfer

Tôi cho rằng tất cả các biến có thể là một chữ cái nhưng tôi không nghĩ rằng nó đáng để dành thời gian cho một câu trả lời cũ như vậy. Cảm ơn những lời khuyên đó.
Timtech

Ok, vui lòng gửi như một câu trả lời riêng nếu bạn muốn.
TimTech

@Timtech Khi câu hỏi được đóng lại, điều đó không thể được thực hiện một cách đáng tiếc ... :-(
wizzwizz4

2

bash + say + gunzip, 136 byte

say, tất nhiên, là lệnh chuyển văn bản thành giọng nói của OS X. Đây là ... ẩm ướt. Vâng, chúng ta hãy đi với dorky.

printf '<117 bytes>'|gunzip|sh

Tất nhiên, 117 byte là một luồng gzip chứa các ký tự không thể in được. Đây là một kết xuất xxd của tập lệnh bao gồm các ký tự đó:

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

Giải trình

117 byte là tập lệnh sau được nén:

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

Đúng vậy, tôi vừa tạo ra một loạt các saygiọng nói khác nhau nói "o." Để tìm ra cái nào, tôi đã viết một kịch bản sử dụng các aubionote để có được ước tính nhanh chóng và bẩn thỉu về từng âm vực của giọng nói, sau đó đã thực hiện rất nhiều thử nghiệm và lỗi những phát hiện nghe có vẻ đúng.

Tôi đã cân nhắc việc thử chơi golf bằng tay, nhưng có quá nhiều sự lặp đi lặp lại đến nỗi tôi nghĩ rằng Zopfli sẽ làm cho nó ngắn hơn, vì vậy tôi đã dễ dàng thoát ra.


1

SmileBASIC, 45 byte

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

0

Powershell, 120 117 byte

[Console]::beep, ghi chú nhãn và tần số lấy cảm hứng từ Iszi

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

Ý tưởng chính :

  • Giai điệu được mã hóa thành một chuỗi.
  • Các ghi chú được mã hóa bằng ký tự A, C, D, E, F, G.
  • Chữ hoa có nghĩa là a double duration.
  • 3 bit thấp ( $_-band7) của từng nốt nhạc sử dụng như chỉ mục trong mảng tần số ( A->1, C->3, D->4...)
  • Tập lệnh này sử dụng tốc độ lấy mẫu giảm cho các tần số: (0,110,0,65,73,82,87,98)[$_-band7]*4thay vì của Iszi (0,440,0,262,294,330,349,392)[$_-band7]. [console]::Beepkhông phải là nhạc cụ chính xác nhất, vì vậy nó có thể hơi giả :)

Giải thích : Đối với mỗi char từ chuỗi giai điệu ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC, tập lệnh:

  • tra cứu thường xuyên từ mảng bằng cách sử dụng các bit thấp hơn làm chỉ mục
  • tính toán thời lượng dựa trên chữ hoa / chữ thường
  • các cuộc gọi [console]::beepđể chơi ghi chú
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.