반짝 반짝 작은 별


27

인기있는 영어 동요를 연주하는 프로그램을 작성하십시오.

망할 음악 (이 파일은 크리에이티브 커먼즈에 따라 사용이 허가되어 동일 조건 변경 허락 3.0 Unported 저작자 표시 - . : 라이센스 저작자 표시 Helix84 상기 영어 위키 백과 , Blahedo 상기 영어 위키 백과 ).

유용 할 수있는 일부 Wikipedia 기사 :

제출을위한 몇 가지 지침 :

  • 프로그램은 컴퓨터의 사운드 카드를 사용해야합니다. 프로그래밍 언어가 오디오 하드웨어에 편리하게 액세스 할 수없는 경우 프로그램은 WAV 또는 MIDI와 같은 표준 형식으로 출력 파일을 작성해야합니다.

  • 프로그램은 실제로 출력을 생성해야합니다. 예를 들어, Wikipedia에서 Ogg Vorbis 파일을 포함하는 것은 허용되지 않습니다.

  • 오디오 품질이 양호해야합니다. 최소한 노래는 쉽게 인식 할 수 있어야합니다. 바람직하게는 소리도 좋아야합니다.

  • 코드 크기, 음질 또는 두 가지 모두에 중점을 두어야합니다. 우아한 솔루션도 좋습니다. 즐기세요!

  • 이것은 이므로 가장 짧은 코드가 승리합니다.


음표 주파수를 근사 할 수 있습니까?
Ming-Tang

1
왜 닫혀 있습니까?
programmer5000

@ programmer5000 나는 가까운 이유가 그것을 매우 잘 묘사한다고 말하고 싶습니다 ...
totallyhuman

2
코드 골프를 만든 후에도 여전히 주제가 아닙니다. 오디오 품질이 양호해야합니다. 객관적인 유효성 기준이 아닙니다.
Dennis

3
@Dennis 나는 그것이 "비주 제적"이라기보다는 "불분명하다"라고 말하고 싶습니다.
Outgolfer Erik

답변:


30

Q 기본 (56)

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

초점은 회상입니다 :)

(하지만 이것을 테스트 할 QBasic은 없습니다)


1
내 DOSBox 설치에서 작동하지만 전체 노래를 재생하도록 수정할 수 있습니까?
Please Standand

끝난. 나는 내 독해력에 대해
공부할 것이다

흠이 페이지가 잘못 되었나요? en.wikibooks.org/wiki/QBasic/Appendix#PLAY- > 한 옥타브는 C로 시작하고 B로 끝납니다. QBASIC이 중간 C 기반 일 것으로 기대하는 비율은 절반이지만,이 표기법은 정확히 맞으면 A220 기반이라고 제안합니다. :)
mootinator

6
와우, 이것은 QBasic과의 첫 프로그래밍 경험에 대한 기억을 되찾아줍니다.
Daniel Standage

3
추락 메모리 레인 +1! 이제 필요한 것은 DRAW 명령 샘플입니다. :)
시스템 다운

16

자바 스크립트 ( 214 212 211 자)

Safari, Opera 또는 Chrome to JavaScript Shell 을 열고 아래 코드를 입력하십시오.

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

가독성을 위해 미분화 됨 (그러면 이해하기 어려울 수 있음) :

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

더 많은 문자를 사용하면 Firefox에서도 작동하지만 audio/wav최소한 WAV 파일을 저장하도록 부분을 변경할 수 있습니다 .


1
Chrome에서 잘 작동합니다.
mootinator 2016 년

@ mootinator : 나에게도 효과가 있습니다. Chrome에서 확인하는 것을 생각하지 못했습니다. 상당히 최근까지 WAV 파일 지원을 얻지 못했습니다. code.google.com/p/chromium/issues/detail?id=23916
PleaseStand

와우! 훌륭합니다.
Phillip Senn

"여러 문자가 더있다"는 것은 무엇을 의미합니까? 그 캐릭터는 무엇입니까?
Phillip Senn

@cf_PhillipSenn : Firefox에서 코드를 실행할 때 작동하지 않는 QuickTime Player가 생겼습니다. Firefox의 내장 오디오 플레이어를 사용 하려면 코드 open(...)Audio(...).play()8 자 이상 으로 변경 해야했습니다.
PleaseStand

11

C # (길이 : LOL)

그래서 내가 여기서 한 것은 C #의 QBasic 솔루션에 사용 된 문자열에서 .wav 파일을 생성하는 지원을 구현하는 것입니다 (단일 옥타브, 우발적 인 것은 아님). 강조했다 :

  1. unsafe코드 블록 피하기
  2. 내 시간을 너무 많이 낭비하지 않고
  3. 확장 하기가 비교적 간단합니다.

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

위의 답변에서 출력 웨이브의 진폭이 매우 작은 것으로 나타났습니다. 분명히 8 비트 샘플이 작동하는 방식에 대해 뭔가 빠졌습니다.
mootinator

아, 고쳤다 작업 순서가 중요합니다. 샘플 출력 : dl.dropbox.com/u/469380/testfile.wav
mootinator

FromDigits["LOL",36]==28101LOL <36> <sub> 바이트처럼 보이지 않습니다 ...
CalculatorFeline

6

파이썬 (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
이것을 단축시킬 수 없었 import ttls습니까?
zzzzBov

@zzz : 음, 그거 장난이야?
John

2
@zzz : -Bangs-head-on-desk- 정확히 무엇을 말하고 있습니까?
John

1
@ 존 그것은 분명히 koan입니다. 당신은 그를 절 또는 명중해야합니다.
ixtmixilix

1
(매우 늦은 의견) 참고로 여기 에 -60 바이트가 있습니다. 실제로 골프를 쳤기 때문입니다.
Outgolfer Erik

5

C, 277 자

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

펄, 203 자

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}

편리하게도 OSS/dev/dsp기본값은 8kHz mono u8입니다. 내가 여기서하는 일은 장치를 열고 계산 된 샘플을 작성하는 것입니다.


Perl을 별도로 게시하십시오. 당신은 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;}
gastropner

4

PowerShell : 207

골프 코드 :

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

코멘트가없는 언 골프 드 :

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

노래의 가장 큰 소리로 변환되지는 않지만 작동합니다.


1
(늦은 댓글) n{대신 할 수 있습니까 n {?
Outgolfer Erik

4

C-520

충돌.

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

스피커 및 헤드폰과 같은 지난 세기의 하드웨어를 사용하는 이유는 무엇입니까? 이 뛰어난 코드를 통해 현대 하드웨어에서 플로피 드라이브로 노래를 재생할 수 있습니다!
특별한 요구 사항이 없습니다 :

  • IDE 플로피 드라이브
  • 리눅스 커널
  • 와 컴파일 -lm
  • 프로그램이에 액세스 할 수 있는지 확인하여 /dev/fd0장치를 숨기거나 수퍼 유저로 실행하십시오.

규칙을 약간 구부리지 만 잠시 플로피 드라이브에 사운드 장치를, IDE 컨트롤러에 통합 사운드 카드를 고려해 보겠습니다.


나는 이것이 합리적이라고 말하고, 플로피 드라이브는이 작업을 위해 놀랍게도 가능합니다. youtu.be/LkqYLOa76E0
Hotkeys

3

하이퍼 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"

사용법 : HyperCard를 시작하고 ⌘M을 입력하여 메시지 상자를 열고 위의 코드를 붙여 넣은 다음 Enter 키를 누릅니다.

harpsichord다른 소리 로 바꾸 flute거나 boing다른 소리를 얻을 수 있습니다 .


(매우 늦게 댓글) harpsichord-> flute-6 악기와 따옴표 사이의 공백 제거 -1 총계 -7
Erik the Outgolfer

3

C, 96 자

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

클래식 바이트 비트 스타일로 원시 8 비트 부호없는 모노 오디오 데이터를 생성 합니다. 재생에 권장되는 샘플 레이트는 8 ~ 16 kHz입니다. 샘플 레이트를 변경하면 템포와 피치가 변경됩니다.

Linux에서 컴파일하고 재생하려면 위의 코드를 twinkle.c다음과 같이 저장 하고 다음 명령을 실행하십시오.

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

코드 작동 방식에 대한 참고 사항 :

  • 이와 같은 바이트 비트 컴포지션에 사용되는 일반적인 트릭 putchar()은 정수 값을 사용하지만 하위 8 비트 만 인쇄하는 것입니다. 따라서, 카운터가 증가하는 putchar(t)t은 톱니파를 발생시키고, 파동의 주파수 t는 적절한 값 을 곱함으로써 변경 될 수있다 .

  • !!(t>>9&7|!(-t>>12&7))반복되는 6 + 1 노트 패턴을 생성합니다. 특히, !!(t>>9&7)평가 0때마다 t>>9 & 7 == 0하고 1, 그렇지 않으면. 따라서 4096 개의 샘플마다 파형에서 512 샘플 간격을 생성하는 반면 !(-t>>12&7)8 분 간격 은 제거합니다.

  • 96+"#d|dOE3#dOE3dOE3"[t>>13&15]멜로디를 생성합니다. 문자열에 각 문자의 ASCII 코드에 96을 더한 값은 해당 음의 상대 주파수를 나타냅니다. 실제로이 값은 3 번째 / 작은 옥타브에서 콘서트 피치 음의 대략적인 주파수 (Hz), 즉 220에 해당하는 A입니다. 그러나이 값을 곱한 기본 톤은 약 64Hz이므로 (16kHz에서 연주 할 때) , 또는 8 kHz에서 재생시 32Hz), >>5주파수를 적절한 범위로 되돌리려면 5 옥타브 씩 결과를 축소해야합니다 .

추신. 당신은 자바 스크립트 기반 bytebeat 플레이어에이 코드를 사용하려면, 대신 [t>>13&15].charCodeAt(t>>13&15).


2

파이썬 317 305 301

이것은 표준 파이썬 라이브러리 만 사용하는 솔루션입니다.

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

그리고 여기에는 가독성을 위해 약간의 공백이 있습니다.

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

매스 매 티카, 86 자

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

아두 이노, 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);}}

출력 11에 버저를 연결하십시오. 주로 품질 과 코드 길이에 중점을 두었습니다 .


(늦은 코멘트) "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "공간을 제거 하시겠습니까? int beats[] =공간을 제거 하시겠습니까? for (long공간을 제거 하시겠습니까? 11, LOW공간을 제거 하시겠습니까? note, int공간을 제거 하시겠습니까? i], duration공간을 제거 하시겠습니까? 11, OUTPUT공간을 제거 하시겠습니까?
아웃 골퍼 에릭

실제로 일부 공간을 잊었습니까? 내가 이해하는 한, 공간 ffeeddc "은 일종의 지연을위한 것이며, 결국에는 필요하지 않으며 beats[] =공간을 가질 이유가 없습니다. 또한 코드 길이에 집중하는 버전을 만들어야합니다.
Outgolfer Erik

변수가 모두 한 글자 일 수 있다고 생각하지만 이전 답변에 시간이 가치가 있다고 생각하지 않습니다. 그 팁에 감사드립니다.
Timtech 2006 년

원하는 경우 별도의 답변으로 자유롭게 게시하십시오.
Timtech 2016 년

@Timtech 질문이 마감
되었으므로

2

bash + say + gunzip, 136 바이트

say물론 OS X TTS 명령입니다. 이건 ... 황당 하군 그래, dorky와 함께 가자.

printf '<117 bytes>'|gunzip|sh

물론 117 바이트는 인쇄 할 수없는 문자를 포함하는 gzip 스트림입니다. 해당 문자를 포함한 xxd 스크립트 덤프는 다음과 같습니다.

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

설명

117 바이트는 다음과 같은 스크립트입니다.

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

맞습니다. 방금 다른 say목소리를 "o"라고했습니다. 어느 것을 알아 내기 위해 각 목소리의 음높이를 빠르고 더럽게 추정하기 위해 aubionotes 를 사용하여 스크립트를 작성한 다음, 대부분 올바른 소리를 찾기 위해 많은 시행 착오 를 거쳤 습니다.

나는 이것을 수동으로 골프를 타는 것을 고려했지만 Zopfli가 더 짧은 작업을 할 것이라고 생각한 반복이 너무 많아서 쉽게 벗어날 수있었습니다.


1

SmileBASIC, 45 바이트

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

0

파워 쉘, 120 117 바이트

[Console]::beep, Iszi에서 영감을 얻은 레이블 및 주파수 참고

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

주요 아이디어 :

  • 멜로디는 문자열로 인코딩됩니다.
  • 노트가 문자로 인코딩 A, C, D, E, F, G.
  • 대문자는을 의미합니다 double duration.
  • 3 하위 비트 ( $_-band7) 주파수의 배열의 인덱스로서 사용하는 각 음의 ( A->1, C->3, D->4...)
  • 이 스크립트는 주파수에 대해 감소 된 샘플링 속도를 사용합니다. (0,110,0,65,73,82,87,98)[$_-band7]*4대신 Iszi 's (0,440,0,262,294,330,349,392)[$_-band7]입니다. [console]::Beep가장 정확한 악기가 아니므로 약간 가짜 일 수 있습니다. :)

설명 : 멜로디 문자열의 각 문자 ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC에 대해 스크립트는 다음과 같습니다.

  • 하위 비트를 인덱스로 사용하여 배열에서 빈번한 조회
  • 문자 대문자 / 소문자를 기준으로 기간을 계산합니다.
  • [console]::beep메모를 재생하기 위해 전화
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.