challenge Tiny MML

文字列の入力をとり、音を鳴らすプログラムを作ってください。

入力はcがド、dがレ、eがミ、fがファ、gがソ、aがラ、bがシ、rが休符とします。この8文字以外の文字は入力に含まれていないと仮定して構いません。おのおのの音符・休符は八分音符・八分休符とします。

オクターブや音の長さの変更、同時発音などの機能は不要です。

サンプル入力(カエルの歌)

cdefedcrefgagfercrcrcrcrcdefedcr

Posted feedbacks - Ruby

ぎゃ、先越された>< beepコマンドを使うのってアリ??
1
2
3
4
5
6
require 'enumerator'
FREQ_TABLE={ ?c=>'262', ?d=>'294', ?e=>'330', ?f=>'349', ?g=>'392', ?a=>'440', ?b=>'494', ?r=>'1'}
def play(mmf)
  system "beep", *mmf.enum_for(:each_byte).map{|b| [ "-n", "-f", FREQ_TABLE[b] ]}.flatten
end
play "cdefedcrefgagfercrcrcrcrcdefedcr"

one linerで。

FreeBSDで動きます(*BSDかも)。
ちなみにFreeBSDにはデフォルトでbeepコマンドがない(はず)です。
1
ruby -e 'open("/dev/speaker", "w"){|d| d.print "l8"+ARGV.shift.gsub("r","n")}' cdefedcrefgagfercrcrcrcrcdefedcr

Index

Feed

Other

Link

Pathtraq

loading...