MSXで音作り
MSXはBASICのPLAY文などで気軽に演奏をさせることができるのですが、マシン語だとそれ以上に細かな設定ができそう……ということで試してみました。プログラムの骨組みはC言語(z88dk)ですが、音楽を奏でるドライバ部分はマシン語(インラインアセンブラ)で組んであります。
BASICでは1オクターブ間を均等に12で割った12音階(ドレミファソラシの7音+ド#レ#ファ#ソ#ラ#の5音)しか使えませんが、24で割ったり、48で割ったりしてみました。均等にではなく、sin波や放物線に沿った割り方もしてみました。
https://twitter.com/fukui_keeekn/status/1600484029245329408
↑このように微妙な音を出せることを確認したうえで、例えばドとそれより微妙に高い(低い)音を一緒に奏でたらどうなるのか、も試してみました。
https://twitter.com/fukui_keeekn/status/1601239203307999234
BASICだと特殊なことをしない限り(エンベロープを使うなどしない限り)音量が変化しません。八分音符を二つ続けての演奏と四分音符一つの演奏との違いが見いだせません(耳のいい人には違って聞こえるのでしょうか?)。そこで音量を時間とともに下げるプログラムをC言語(インラインアセンブラ)で組んでみました。原理的にはBASICでもできるはずですが、うまくいくかは試していないので分かりません。
https://twitter.com/fukui_keeekn/status/1604448264283385861
上記三つともクリックするとツイートへと跳びます。WebMSXはそのツイートから更に跳ぶことで辿り着きます。
コメント