ASCII 피아노의 뮤지컬


22

표준 피아노 에는 88 개의 와 95 개의 인쇄 가능한 ASCII 문자 (16 진 코드 20-7E)가 ​​있습니다.

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

( 'character'는 여기서부터 인쇄 가능한 ASCII 문자를 나타냅니다)

이 JSFiddle 에서는 이를 활용하여 AudioSynth를 사용하여 피아노 곡을 생성하는 간단한 구문을 만들었 습니다 . (누구든지 나를 연결 가능한 실제 피아노 음표로 안내 할 수 있다면 감사하겠습니다.)

입력 문자열의 각 문자는 () 01+-하나의 피아노 키에 해당합니다.

 CHARACTER:  !   "   #   $   %   &   '   *   ,   .   /   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
KEY NUMBER:  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88
      NOTE:  A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C
    OCTAVE:  0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   8

따라서 JSFiddle에서 볼 수있는 사전 설정 타이밍 매개 변수를 사용하여 Mary Had a Little LambRPNPRRR 의 처음 7 개 음표를 연주합니다 .

스페이스 ( )는 한 음 간격 동안 지속되는 악보대를 나타냅니다. 그래서 RPNPRRR PPP RUU마리아의 첫 번째 13 노트가 적절한 장소에서 쉼표와 어린 어린 양을했다한다.

이외의 문자 ()01앞에 0'및 1'(regex [01]+) 시퀀스가 접두어로 붙으면 이 시퀀스는 2 진수 b 로 읽히고 문자는 b 사본으로 바뀝니다 . 따라서 = 5, = 3 등 101A11 10+1-0B01CAAAAA ++-C되기 때문입니다 ( 문자열의 끝에있는 ' 및 '의 시퀀스는 적용되지 않습니다).1011101

일치하는 괄호 ( ())는 두 가지 용도로 사용됩니다.

  1. 그 내용이 있다면 하지 않는 의 순서로 끝나는 0's와 1의 모든 노트 (그렇지 않으면 메모 다르지 않다) 화음과 동시에 재생됩니다. 그래서 (NQU)A는 C 마이너 화음 옥타브 4.는
    중복 노트가 자신의 소리도 중복되어있는 경우. 그래서 (NN)(NNN)사운드 다른.
  2. 콘텐츠가있는 경우 수행 시퀀스와 단부 0집과 1의 해당 시퀀스가 이진수로 판독 B , 괄호 및 콘텐츠로 대체 B의 콘텐츠의 복사. 따라서 (NQU11)9 개의 개별 노트가됩니다 NQUNQUNQU.

괄호 세부 사항 :

  • 중첩 복제 괄호 (목적 2)가 좋습니다. (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • 중첩 비 복제 괄호 (유형 1)는 미세하지만 효과가 없습니다 (A((+)C))동일하다 (A+C).
  • 다음 두 가지를 결합 할 수도 있습니다. ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • 비 복제 괄호 앞 0의와 의 순서는 1개별 문자가 반복되는 것과 같은 방식으로 반복됩니다. 이렇게 10(NQU)됩니다 (NQU)(NQU).
  • 괄호를 복제하기 전에 0와 의 순서는 1영향을 미치지 않습니다.
  • (항상 일치해야 )하지만 그 반대는 아닙니다. 예 : N)유효합니다.

더하기 ( +) 및 빼기 ( -)는 각각 의 상황에 따라 음의 지속 시간 또는 음 의 시간 간격을 늘리거나 줄입니다 .

  • 경우 내부 괄호 비증들은 즉시 증가 또는 밀리 초 (참조 일부 프리셋 번호 음표 길이 변수를 감소 JSFiddle을 ). 따라서 평소보다 더 긴 시간 동안 (++)N재생 N됩니다.
  • 경우 외부 괄호 비증들은 증가 또는 밀리 일부 소정의 수로 (그리고 각각의 후속 구간) 후에 다음 음의 개시와 주 간격을 감소시킨다. 그래서 년 ++NP사이의 간격 NP평소보다 더 길다.

음의 지속 시간과 음의 간격은 0 아래로 떨어질 수 없습니다.

도전

나는 () 01+-많은 프로그래밍 언어에서 많은 문맥에 무해하게 배치 될 수 있기 때문에 의도적으로 7 개의 특수 문자로 선택했습니다 .

당신의 임무는 코드 자체가 JSFiddle 에서 입력 문자열로 사용될 때 최상의 소리를내는 512 바이트 이하 의 퀴네 를 작성 하는 것 입니다.

4 개의 간격 / 지속 시간 매개 변수에 대해 초기 값 (음이 아닌 정수)을 선택할 수 있지만 튜닝은 10 분을 초과하지 않아야합니다. 또한 특정 악기에서 튜닝이 가장 잘 들리는 지 알려주십시오.

규칙

  • 코드에는 탭, 줄 바꿈 및 인쇄 가능한 ASCII 만 허용됩니다. tune 생성자는 인쇄 할 수없는 모든 ASCII를 무시합니다.
  • 출력은 파일 또는 stdout 또는 가장 가까운 대안 (예 : JS 경보)으로 이동할 수 있습니다. 입력이 없습니다.
  • 소스 코드를 읽을 수 없습니다. 진정한 quine이어야합니다.
  • 연속 된 3 개의 소스 문자를 제거 하면 더 이상 프로그램이 퀴네로 작동하지 않아야합니다. 이것은 사람들이 문자열에 좋은 노래를 쓰지 않고 작은 퀴네 부분을 출력하도록하기위한 것입니다.
    • 프로그램이 있다면 그래서 MYCODE다음 MYC, MYE, MDE, 및 ODE모든 quines 안 (그들은 오류 또는 다른 무언가를 출력 할 수있다).

이것은 인기 경연 대회이며, 가장 높은 투표 응답이 이깁니다.

업데이트 : 마지막 규칙을 완화했습니다.


3
당신도 마리아는 전화 키패드에 작은 어린 양을했다 재생할 수 있습니다 : 3,212,333 (222) 399 (그것을 시도, 완벽하게 나옵니다.)
레벨 강 세인트

피아노를위한 무료 사운드 폰트가 많이 있습니다. 또한 멋진 JSFiddle!
qwr

나는 어떤 도전에서도 마지막 규칙을 본 적이 없다.
justhalf

@qwr 이 방식 으로 직접 연결할 수있는 모든 88 개의 키를 알고 있습니까? 조금 보였지만 찾을 수 없었습니다.
Calvin 's Hobbies

답변:


6

기음

나는 /**/C에서 주석을 열고 닫는 방법이 아닌 문자열에 의해 생성되는 낮은 소음을 좋아한다고 결정했습니다 . 여기서 흥미로운 또 다른 부분 34은 a "35-1( 1 의도적으로 끝나는 ) 신의 화음을 피하십시오. 나는 또한 결말을 극적으로 만들려고 노력했다. 정말 했어요 조금 더 나아질 수 있도록 나중에 편집하려고합니다.

/**/char*p= "/**/char*p= %c%s%c; int main(){printf(p,34,p,35-1);p++;/**/}/**/";
int main(){printf(p,34,p,35-1);p++;/**/}/**/

규칙을 이해하기 위해 주석 처리 된 섹션은 제거에 실패한 quine이 발생하기 때문에 여전히 최종 규칙을 통과합니다.


3
"조금 더 나아질 수 있도록 나중에 편집하려고합니다." 거의 1 년이 지났습니다. 나는 당신이 나중에 더 나은 소리를 만들기 위해 이것을 편집하지 않을 것이라고 생각하기 시작했습니다. : P
Alex A.

@AlexA. 일년 이상!
wizzwizz4

5

J

그래, 어떻게 될지 짐작할 수있을 것 같아

J에서 parens없이 멋진 작업을 수행하는 것은 어렵고 0과 1로 거의 끝낼 수 없으므로 대부분 키보드의 높고 낮은 절반에 앉아있는 것처럼 들립니다. 최선을 다했습니다. 알겠습니다.

다음은 피아노의 펑키 한 기준입니다. 나는 작곡에 관한 첫 번째 사실을 모른다. 나는 단지 퀴네를 잡고 숫자를 조금 틀었다.

(23 23,~,~i.124+-100){,'(23 23,~,~i.124+-100){,'''

그리고 재미를 위해 이것을 EDM으로 재생하십시오. 나는 그것을 Japhex Twin 이라고 부릅니다 .

".s=:'''".s=:'',''''''''&,@(,&'''''''')@(#~>:@(=&''''''''))s'

이 훌륭한 코드 스 니펫의 정확성을 확인할 수 있습니다. tryj.tk을 .


1
이것은 실제로 음악을 전달할 수 있습니다. 큰! :)
Emil

4

파이썬으로 Musique 콘크리트

오늘은 시간이 많지 않지만 답을 얻고 싶었습니다. 장르는 아무것도 들리지 않는 변명입니다. 비디오 게임에서 음향 효과일까요?

BFIN10=r"print('BFIN10=r\"'+BFIN10+'\"'+'\nexec(BFIN10)')"
exec(BFIN10)

실제로 너무 나쁘지 않습니다!
Claudiu

Yoko Ono의 모든 앨범
William Barbosa

4

기음

int(printf)(char*,...); (main)(){char*b=",*",i=(34),*m=("int(printf)(char*,...); (main)(){char*b="),
*z="%s%c%s%c,i=(34),*m=(%c%s%c)%sz=%c%s%c,*B=%c%s%c,*f=(%c%s%c)%s(/*)*/%s/*(*/);}//(+++fim)",*B="(f,
i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),
(26,i),(B,f),(42,i),(i,m,f),B",*f=(";(printf)");(printf)(/*)*/(f,i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m
,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),(26,i),(B,f),(42,i),(i,m,f),B/*(*/)
;}//(+++fim)

프리젠 테이션 목적으로 만 줄 바꿈으로 구분됩니다. 줄 바꿈이 제거되면 이것은 단지 quine 일뿐이며 길이 요구 사항 만 충족합니다.

컴파일하려면 printf 선언이 필요했다 (printf). /*(*//*)*/괄호의 혼합 및 쉼표 연산자가에서 폼 코드에 사용 된 반면, 코드에 괄호를 일치시키는 데 사용되었다printf 매개 변수를.

편집 : 크기 요구 사항에 맞게 짧아지고 조각이 조금 더 빨라집니다.

피아노에서 가장 잘 들립니다.


2
나는 그것을 좋아한다! 그것은 느리게 시작되지만 토큰 130부터 모든 것은 강력하게 잊혀지지 않습니다. 당신은 흠집을 유리하게 사용했습니다.
Calvin 's Hobbies

이것은 판타지 오케스트라를 위해 전달할 수 있습니다! : P
Soham Chowdhury

2
나는 이전 버전을 더 좋아했지만 이것은 여전히 ​​내가 가장 좋아하는 노래입니다. 현상금을 주려고하는데 어떤 이유로 든 효과가 없습니다. 메타 참조 : meta.codegolf.stackexchange.com/questions/2263/…
Calvin 's Hobbies

3

계획

이것은 특히 선율 적이 지 않을 수도 있지만 (실제로는 누군가가 죽은 돼지를 아기 웅대에 떨어 뜨린 것처럼 들리지만) 최소한 짧은 음악입니다. 구성표에서 데드 플라잉 피그와 같은 것을 훨씬 길거나 적게 만드는 것은 어려울 것입니다.

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))

1
아야, 내 귀 ..
Claudiu

2

모피 Golfscript

":H;GHGHCFDA;[34]H+2*{-};":H;GHGHCFDA;[34]H+2*{-};

이것은 의도가 아니라 3 번 연속 문자 철회 규칙의 서한을 충족시킨다.


1

코브라 / 배치

@number float# 2>nul||@echo off
/# 2>nul
for /f "delims=" %%a in (%0) do echo %%a
#/# 2>nul
class P# 2>nul
    def main# 2>nul
        r="# 2>nul"# 2>nul
        s="@number float{3}||@echo off{2}/{3}{2}for /f {1}delims={1} %%a in (%0) do echo %%a{2}#/{3}{2}class P{3}{2}    def main{3}{2}      r={1}{3}{1}{3}{2}       s={1}{0}{1}{3}{2}       Console.write(s,s,34to char,10to char){3}"# 2>nul
        Console.write(s,s,34to char,10to char,r)# 2>nul

기술적으로 배치에서 quine이 아닙니다 (독자적 소스를 읽습니다). 그러나 코브라에서는 퀴네입니다.

슈퍼 마리오 월드 시대의 비디오 게임에서 나오는 유령 수준의 음악과 비슷한 피아노 모드에서 가장 잘 들립니다.


1

피스

J"+K+N+J+N+\K+N+K+NJ"K"J"+K+N+J+N+\K+N+K+NJ

약 20에서 네 번째 설정 (양 + 및-간격 변경)으로 가장 잘 연주되며 기본값은 나머지입니다. 피아노에서 가장 잘 들립니다.


0

하스켈

(변수 이름이 마지막 규칙을 위반하는지 확실하지 않습니다.)

main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "

표준 + 및-값으로 1000 밀리 초 음표 지속 시간 및 250 밀리 초 음표 간격으로 피아노에서 가장 잘 연주됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.