-
22148b54 :Anonymous
2025-09-27 14:58
-
dim scale$(17),wait(17)
restore *MMLBASE
for i=0 to 17 : read scale$(i) : next
for i=0 to 17 : read wait(i) : next
mmldata$="cdee cdee fedec dedd" :'サイタア サイタア チューリップノハナガア
loopcount = strlen(mmldata$)
for st=0 to loopsount
m$=strmid(st,1,mmldata)
if (st<loopcount) n$=strmid(st+1,1,mmldata) : if (n$="+" or n$="-") m$ = m$+n$
for k=0 to 17
if (scale$(k)=m$) l = wait(k) : k=17 else l=0
next
for i=0 to 256
beep 1 : for j=0 to l :next : beep 0 : 'ココガ ミソ
next
next
end
*MMLBASE
data "c","c+","d-","d","d+","e-","e","f","f+","g-","g","g+","a-","a","a+","b-","b"
data 80 ,75 ,75 ,70 ,65 ,65 ,60 ,50 ,45 ,45 ,30 ,25 ,25 ,20 ,15 ,15 ,10 : 'テキトー
もう40年以上前の話。
工業高校生だった私は、CP/Mな8ビットマシンを相手にマイクロソフト系なBASICで課題に取り組むのでした。
とその時、隣の席からピロロロンと音楽が流れてきたのでした。
そのマシンはZ80で4MHz、デジタル8色で音源はビープのみと現代人にはピンと来ない、でも当時としては当たり前の性能でした。
そんなマシンから音程のある音が流れてきてギョッとしたのですが、案の定同室で課題に取り組んでいた全員が注目してちょっとした騒ぎになりました。どうやったのか尋ねた所、ビープ音を鳴らし続ける命令の後に空ループを入れてから停止させると空ループに応じて周波数が変わって音程を表現出来ると言うカラクリでした。
なのでDATA文の最終行で与えているのは空ループ回数であって、モロ環境依存です。音感が無い私には調音無理なので、仮データ置いただけです。
当時あんな事あったなー、とふと思い出して、隣から覗き込んでコードを暗記しなかった事を悔やみつつこんな感じかな?と再現してみました。マイクロソフト系BASICはif文に複文が使えなかったりループの途中脱出が公式に無かったりと、今使うには厳しいモノがあるけど何もかもが懐かしいです。
懐かしいとか言いつつ、実行環境がある訳でもないので、疑似コードです。
Powered by shinGETsu.