http://www.ioccc.org/2013/endoh3/endoh3.c
char a;float b,c;main(d){for(;d>2e3*c?c=1,scanf(" %c%f",&a,&c),d=55-a%32*9/5,b=d>9,d=d%13-a/32*12:1;a=2)++d<24?b*=89/84.:putchar(a=b*d);}
ツイート可能 (137B) なワンライナー。
解説
ABC 記譜法 (のサブセット) のサウンドシンセサイザーです。ABC 記譜法とは、外国で使われる MML みたいなものです。
$ gcc -o endoh3 endoh3.c $ echo "CDEFGABc" | ./endoh3 > /dev/dsp
とやるとドレミファソラシドが流れます。/dev/dsp が使えない人は padsp とか sox とか使って下さい。面倒な人のための動画。(音量注意)
137 バイトのコードの中に ABC 記譜法のパースと波形の生成が詰まってます。以下、実装について、概要だけご紹介。ドキュメントの Spoiler で結構詳細に説明しています。
パース
まず scanf で 1 音符分の音階と長さを持ってきます。
scanf(" %c%f", &a, &c)
これで得られた音階の ASCII コードに以下の謎の変換をかまします。*1
(a % 32 + 5) * 9 / 5 % 13 + a / 32 * 12 - 22
これによって音符を半音ずつ並べた数字 (MIDI ノート番号みたいなの) が得られます。