输出“D”中的Pachelbel“佳能”的下列摘录为音频:
作为参考,这里有一个堆栈片段,它将播放摘录:
<audio controls><source src="https://a.clyp.it/h3y3isar.mp3"></audio>
发布于 2016-12-25 17:35:29
00000000: e002 2800 c35d 0026 9509 6f34 76f2 ffad ..(..].&..o4v...
00000010: 4150 0893 a735 bd02 a1eb 1237 18fe 5498 AP...5.....7..T.
00000020: 120a 83e1 6662 8a5e 9709 fe8a 3430 0f48 ....fb.^....40.H
00000030: 5008 54af d19a b44f 2be9 fb3b bf9d 206d P.T....O+..;.. m
00000040: abbf 12f0 2151 6dae 4712 8c18 4d8e f5cd ....!Qm.G...M...
00000050: eb85 404c 17cd bd5c 2775 38bd eb50 ab88 ..@L...\'u8..P..
00000060: e015 fb7e 4b1e 5ddb 515b 144c fc5e c1be ...~K.].Q[.L.^..
00000070: 3d5d 20cd e950 4a1d 256e b56e d364 188b =] ..PJ.%n.n.d..
00000080: 6fa1 afcc 2100 0235 ada0 2f23 411d 95dd o...!..5../#A...
00000090: 6665 3b45 041d cbe2 8e3b 2456 fb8d 4e4c fe;E.....;$V..NL
000000a0: 1a7f b814 a6cf 850e 9b6c 9285 3a6f 1ec3 .........l..:o..
000000b0: 02ed 505c 996b eb4d 209c 2776 a8aa 8380 ..P\.k.M .'v....
000000c0: 42cc b779 218e e75e 8000 00 B..y!..^...
这是源代码的十六进制(与xxd -r
相反)。它生成的MIDI文件如下(也是一个十六进制文件):
00000000: 4d54 6864 0000 0006 0001 0002 01e0 4d54 MThd..........MT
00000010: 726b 0000 0019 00ff 5902 0200 00ff 5804 rk......Y.....X.
00000020: 0402 1808 00ff 5103 0e15 c500 ff2f 004d ......Q....../.M
00000030: 5472 6b00 0001 f200 c000 00ff 0405 5069 Trk...........Pi
00000040: 616e 6f00 9051 5f81 5880 5100 1890 4e5f ano..Q_.X.Q...N_
00000050: 6c80 4e00 0c90 4f5f 6c80 4f00 0c90 515f l.N...O_l.O...Q_
00000060: 8158 8051 0018 904e 5f6c 804e 000c 904f .X.Q...N_l.N...O
00000070: 5f6c 804f 000c 9051 5f6c 8051 000c 9045 _l.O...Q_l.Q...E
00000080: 5f6c 8045 000c 9047 5f6c 8047 000c 9049 _l.E...G_l.G...I
00000090: 5f6c 8049 000c 904a 5f6c 804a 000c 904c _l.I...J_l.J...L
000000a0: 5f6c 804c 000c 904e 5f6c 804e 000c 904f _l.L...N_l.N...O
000000b0: 5f6c 804f 000c 904e 5f81 5880 4e00 1890 _l.O...N_.X.N...
000000c0: 4a5f 6c80 4a00 0c90 4c5f 6c80 4c00 0c90 J_l.J...L_l.L...
000000d0: 4e5f 8158 804e 0018 9042 5f6c 8042 000c N_.X.N...B_l.B..
000000e0: 9043 5f6c 8043 000c 9045 5f6c 8045 000c .C_l.C...E_l.E..
000000f0: 9047 5f6c 8047 000c 9045 5f6c 8045 000c .G_l.G...E_l.E..
00000100: 9043 5f6c 8043 000c 9045 5f6c 8045 000c .C_l.C...E_l.E..
00000110: 9042 5f6c 8042 000c 9043 5f6c 8043 000c .B_l.B...C_l.C..
00000120: 9045 5f6c 8045 000c 9043 5f81 5880 4300 .E_l.E...C_.X.C.
00000130: 1890 475f 6c80 4700 0c90 455f 6c80 4500 ..G_l.G...E_l.E.
00000140: 0c90 435f 8158 8043 0018 9042 5f6c 8042 ..C_.X.C...B_l.B
00000150: 000c 9040 5f6c 8040 000c 9042 5f6c 8042 ...@_l.@...B_l.B
00000160: 000c 9040 5f6c 8040 000c 903e 5f6c 803e ...@_l.@...>_l.>
00000170: 000c 9040 5f6c 8040 000c 9042 5f6c 8042 ...@_l.@...B_l.B
00000180: 000c 9043 5f6c 8043 000c 9045 5f6c 8045 ...C_l.C...E_l.E
00000190: 000c 9047 5f6c 8047 000c 9043 5f81 5880 ...G_l.G...C_.X.
000001a0: 4300 1890 475f 6c80 4700 0c90 455f 6c80 C...G_l.G...E_l.
000001b0: 4500 0c90 475f 8158 8047 0018 9049 5f6c E...G_.X.G...I_l
000001c0: 8049 000c 904a 5f6c 804a 000c 9045 5f6c .I...J_l.J...E_l
000001d0: 8045 000c 9047 5f6c 8047 000c 9049 5f6c .E...G_l.G...I_l
000001e0: 8049 000c 904a 5f6c 804a 000c 904c 5f6c .I...J_l.J...L_l
000001f0: 804c 000c 904e 5f6c 804e 000c 904f 5f6c .L...N_l.N...O_l
00000200: 804f 000c 9051 5f6c 8051 000c 904a 5f00 .O...Q_l.Q...J_.
00000210: 904e 5f00 9051 5f8e 4c80 4a00 0080 4e00 .N_..Q_.L.J...N.
00000220: 0080 5100 8360 ff2f 00 ..Q..`./.
发布于 2016-12-26 02:20:08
*TEMPO1
F.i=2TO71j=i>65SOUND1-j*(479+i/2),-9,ASCM." \\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNNVV\\",i)*2,23-j*161N.
修改为适应速度的限制。稍后会更新解释。
http://www.bbcbasic.co.uk/bbcwin/download.html下载解释器
跑步时直接播放这首歌。
F.i=1TO67j=i>64SOUND1-j*(447+i),-9,ASCM."\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\",i)*2,5-j*75N.
FOR i = 1 TO 67
j = i > 64: REM j=0 for the first four bars composed of 16th notes, j=-1 for the final chord (whole note)
SOUND 1 - j * (447 + i), -9, ASC(MID$("\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\", i)) * 2, 5 - j * 75
NEXT i
j
是一个标志,指示我们是在前4个小节还是最后一个和弦中。真是英国广播公司BASIC版的-1
。
SOUND
语句接受4个参数:
频道:对于前4小节,这是1频道。对于第5小节中的和弦的3个音符,频道数为201、202和203六进制(小数513,514和515 )。这意味着在频道1,2和3上播放,最初的2意思是同时播放与其他频道的2个音符(即播放一个3音符和弦)。
音量:以负值的形式给出,因为正数代表其他效果(声包络)。设为-9 (最高可达-15,声音最大)。
音调:这个曲调的范围从D4=108到A5=184。每个整数步为半一步的1/4。值作为ASCII代码存储在54到92之间,并加倍以重新生成正确的值。1/8音符以复本1/16的形式储存。最后的和弦被存储为3个不同的音高,音长随整个音符变化如下。
持续时间:每秒1/20。1/16音符的持续时间是每秒5/20,所以每分钟60 1/4音符(没有足够的分辨率使节奏更精确)。整个音符是5-(-75)=80个单位(4秒)长。
发布于 2016-12-26 17:47:19
该调子以MIDI文件的格式写入stdout。为了播放摘录,您需要将输出重定向到.mid文件。
<v:"MThd"0006000101"MTrk"001+"~e"0*3"UQ"30*5"-\"9
v>9#:-#,_0"QONLJIGEJIGEGCGECB@>@B@BCEGCECBECEGECBNLJNONLJIGEQONQONQ"0\:
_v#:\%+77+1,"@",\,*8*82,+3*4!*-3::\,"@",:,*:*62,1
v>"QNJQNJ"0\:
_v#:\+1,"@",\,-**82/3\*:*62:,+!\**97!-3::\
@>,\"/U"3*,,,
在网上试试!,尽管我认为目前不可能以这样的方式保存输出,以保持数据的二进制完整性。
第一行是必需的,只是一个硬编码的MIDI头,它在第二行的开头输出。第二行的其余部分将音符序列编码为MIDI值,这是方便的ASCII。第三行写出播放这些音符的MIDI命令,并自动计算持续时间(除非i%14 == 0,否则每个音符都是半舍入)。最后的和弦作为第4行和第5行的特例处理(因为这需要同时按下多个键),第6行写出了轨道标记的最后MIDI末端。
https://codegolf.stackexchange.com/questions/104535
复制相似问题