challenge Tiny MML

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

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

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

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

cdefedcrefgagfercrcrcrcrcdefedcr

Posted feedbacks - Perl

1
2
3
4
5
6
7
8
9
%FREQ_TABLE=( 'c'=>'262', 'd'=>'294', 'e'=>'330', 'f'=>'349', 'g'=>'392', 'a'=>'440', 'b'=>'494', 'r'=>'1');
sub play {
    my($mml)=@_;
    my $len=length($mml);
    for(my $i=0;$i<$len;$i++) {
        system(sprintf("beep -f %s", $FREQ_TABLE{substr($mml,$i,1)}));
    }
}
play("cdefedcrefgagfercrcrcrcrcdefedcr");

Audio::Beep は CPAN で。 MML は引数にして下さい。
1
2
3
4
5
use Audio::Beep;

my $music = $ARGV[0];
$music =~ s/(.)/\1 /g;
Audio::Beep->new()->play($music);

Index

Feed

Other

Link

Pathtraq

loading...