표준 피아노 에는 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-0B01C
이 AAAAA ++-C
되기 때문입니다 ( 문자열의 끝에있는 ' 및 '의 시퀀스는 적용되지 않습니다).101
11
0
1
일치하는 괄호 ( ()
)는 두 가지 용도로 사용됩니다.
- 그 내용이 있다면 하지 않는 의 순서로 끝나는
0
's와1
의 모든 노트 (그렇지 않으면 메모 다르지 않다) 화음과 동시에 재생됩니다. 그래서(NQU)
A는 C 마이너 화음 옥타브 4.는
중복 노트가 자신의 소리도 중복되어있는 경우. 그래서(NN)
및(NNN)
사운드 다른. - 콘텐츠가있는 경우 수행 시퀀스와 단부
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
사이의 간격N
및P
평소보다 더 길다.
음의 지속 시간과 음의 간격은 0 아래로 떨어질 수 없습니다.
도전
나는 () 01+-
많은 프로그래밍 언어에서 많은 문맥에 무해하게 배치 될 수 있기 때문에 의도적으로 7 개의 특수 문자로 선택했습니다 .
당신의 임무는 코드 자체가 JSFiddle 에서 입력 문자열로 사용될 때 최상의 소리를내는 512 바이트 이하 의 퀴네 를 작성 하는 것 입니다.
4 개의 간격 / 지속 시간 매개 변수에 대해 초기 값 (음이 아닌 정수)을 선택할 수 있지만 튜닝은 10 분을 초과하지 않아야합니다. 또한 특정 악기에서 튜닝이 가장 잘 들리는 지 알려주십시오.
규칙
- 코드에는 탭, 줄 바꿈 및 인쇄 가능한 ASCII 만 허용됩니다. tune 생성자는 인쇄 할 수없는 모든 ASCII를 무시합니다.
- 출력은 파일 또는 stdout 또는 가장 가까운 대안 (예 : JS 경보)으로 이동할 수 있습니다. 입력이 없습니다.
- 소스 코드를 읽을 수 없습니다. 진정한 quine이어야합니다.
- 연속 된 3 개의 소스 문자를 제거 하면 더 이상 프로그램이 퀴네로 작동하지 않아야합니다. 이것은 사람들이 문자열에 좋은 노래를 쓰지 않고 작은 퀴네 부분을 출력하도록하기위한 것입니다.
- 프로그램이 있다면 그래서
MYCODE
다음MYC
,MYE
,MDE
, 및ODE
모든 quines 안 (그들은 오류 또는 다른 무언가를 출력 할 수있다).
- 프로그램이 있다면 그래서
이것은 인기 경연 대회이며, 가장 높은 투표 응답이 이깁니다.
업데이트 : 마지막 규칙을 완화했습니다.