PC9801MML言語でダイナ・ワシントン「縁は異なもの」を演奏してみた

ダイナ・ワシントン  縁は異なもの(What a Difference a Day Makes)PC9801

Last Updated on 2024年2月28日

ダイナ・ワシントンは、アメリカのジャズ・シンガー。「縁は異なもの」はスロージャズとして歌われます。これをPC9801のMML言語でコーディングして演奏してみました。

星・花・風景・ホルンの写真集
星・花・風景・ホルン写真素材無料【写真AC】

ダイナ・ワシントン「縁は異なもの」

縁は異なもの(What a Difference a Day Makes)はスローテンポなジャズのビートで歌われます。「縁は異なもの味なもの」ということわざがあります。男女の関係は、いつどこでどうなるか全く予測できない不思議で面白いだという意味です。この曲をエイトビートに変えて、アップテンポでアレンジしました。

最後の部分は繰り返して、曲は終わらないのですが、途中で切ったものを公開しています。
この曲は、私自身の自作ゲーム「荒野の端に」のエンディングロールに使うために作りました。ゲーム「荒野の端に」のために作った曲は数曲あるのですが、順次紹介したいと思います。もちろん、ゲームプログラムはPC9801のN88-日本語BASIC(MSDOS版)、通称「ドスベ」でコーディングしており、音楽はMML言語です。

音源とMMLデータを公開いたします。なお、音源は1990年ぐらいのものですので、音質がよくありませんのでご勘弁を。

音源

MMLデータ

FM音源3声を使用してます。1行目はヘッダですので、実際の音楽データは2行目以降になります。
19行目まで演奏すると03行目に飛ぶようにメインプログラム(ドライバ)はコーディングしています。
いろいろな音色を使ってます。
・@9 「クラリネット」
・@22 「低域の金管楽器」
・@28 「丸みを持ったエレクトリックピアノ」
・@36 「フルート」
・@57 「ホルン」
・@58 「スネアドラム」
・@68 「フルートとハープのユニゾン」
スネアドラムのエイトビートは2拍目と4泊目がアクセントになるように「@vコマンド」でいちいち指定しています。

"1308","縁は異なもの",19,3,3
01 "MBt100@22@v100o5r8l8>fefedc#dc<b-ab-@v105t85l4at80g.","MB@57@v105o4l2fff@v107l4ee.","MB@57@v105l2o3abb-l4b-b-."
02 "r2r1r1","t90r2t120@58q3@v95l8fl16ffl8@v100f@v95fff@v100f@v95ffl16ffl8@v100f@v95fff@v100f@v95f","r2r1r1"
03 "r4o5@9@v110l8cdl6fdf","@58@v100fr8r4r2","r1"
04 "l2ggr4l8fgl6fef","@v90l8fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","@29@v108o3l2gl4gdl2cl4gc"
05 "l2edr4l8del6fdf","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l2dl4d<a>l2dd"
06 "l2b-b-r4>l8ccl6ccc","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l2gl4gdl2cc"
07 "l1c<@36@v110r4r8l8aaaaa","fl16ffl8@v95f@v90fff@v95f@v90f@v95fr8r4r2","@v110l2fl4fc@v113l8fr8r4r2"
08 "l2aar4r8l8aaaaa","@v90l8fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","@v108l2al4ael2al4aa"
09 "l2aar4r8l8aaaaa-","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l2dl4dal2dl4dd"
10 "l2ggr4l8del6fef","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l2gl4gdl2gl4gd"
11 "l1g@68@v110r4l8cdl6fdf","fl4fl16ffl8@v97ffff@v100fr8r4r2","@v110l2g@v113l8gggg@v116l8er8r4r2"
12 "l4g.l8f#l2gr4l8fgl6fef","@v90l8fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","@v108l4g.l8gl4gr4l4c.l8cl4cr4"
13 "l2edr4l8del6fdf","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l4f.l8fl4fr4l4d.l8dl4dr4"
14 "l4b-.l8al2b-r4l8>ccl6ccc","fl16ffl8@v95f@v90fff@v95f@v90ffl16ffl8@v95f@v90fff@v95f@v90f","l4g.l8gl4gr4l4c.l8cl4cr4"
15 "l2c@57@v105r8l8<a>c<a","fl16ff@v95l8ff@v100fr8r4","l2f.r4"
16 "l2gr8l8a>c<b-l2aa","@28@v100q8o5r8l8defl2gr8l8defg>l4dl8c","l4g.l8gl4gr4l4d.l8dl4dr4"
17 "r4l4gl8agfel2gg","<l2bb->l8c<efg>cl4el8d","l4f.l8fl4fr4l4e.l8el4er4"
18 "r4l8fgl6fedl2ff","l2c<bl2b-r8l8agf","l4e-.l8e-l4e-r4l4d.l8dl4dr4"
19 "r4l8eel6efgl1f@28@v100l1f","l4e>l8eel6efgl8f<cagf#l4g.l2f@58@v90l8q3ff@v95ff","l2eer1l1f"

メインプログラム(ドライバ)の紹介

PC9801のN88-日本語BASIC(MSDOS版)、通称「ドスベ」でコーディングたメインプログラム(ドライバ)から、MMLデータ(CSVファイル)を読み込んで、PLAY文で演奏しています。
メインプログラムを一部ではありますが公開します。

1000 '  save "A:\PROBAS\ONGAKU5",A
1010 '  save "B:ONGAKU5",A
1020 '------------------------------------------------------------------------
1030 '  音楽の森 VER 5                                     BY グリーゼ
1040 '------------------------------------------------------------------------
1050 CLEAR &H7F0
1060 CHAIN MERGE "A:\PROBAS\共通部1.BAS",1070
1070 CLS 3:WIDTH 80,20:CONSOLE 2,18,0,1:SCREEN 3
1080 PLAY ALLOC 1000,1000,1000,1000,1000,1000
 ~
1120 '---------------
1130 '初期状態
1140 '---------------
1150 BGMPATH$="A:\PROBAS\DATA\BGM2\"
1160 DIM US.FN$(200),MN.DISP$(200),MFN$(200),KYOKU$(200)
1170 DIM M.CODE$(200),M.TITLE$(200),M.FN$(200)
1180 DIM MN.DCODE$(30),MN.DFN$(30)
1190 DIM MENU.CODE$(20),MENU.TITLE$(20)
1200 I=200:DIM BGM.D1$(I),BGM.D2$(I),BGM.D3$(I),BGM.D4$(I),BGM.D5$(I),BGM.D6$(I)
 ~
2650 '---------------------------------
2660 '演奏開始
2670 '---------------------------------
2680 *GO
2690 MSC.I=1:GOSUB *MCLOAD
2700 FOR PNUM=1 TO PLAYNUM
2710   KYOKU$=KYOKU$(PNUM)
2720   GOSUB *BGMLOAD
2730   MS.PX=20:MS.PY=18:MS.C=9:YESNOFLG=0:MS.MSG$="演奏曲名:"+BGM.TITLE$+"    ":GOSUB *MS.MAKE
2740   DD$="MBT120@0@V100O4L4R4Q7"
2750   PLAY DD$,DD$,DD$,DD$,DD$,DD$
2760   BGM.I=0:BGM.REPERT=1:BGMENDFLG=0
2770 *GO.L
2780   GOSUB *BGMPLAY
2790   IF INP(&HE9)=&HBF OR MOUSE(2,1)=1 THEN *GO2
2800   IF INP(&HE9)=&H7F OR MOUSE(2,2)=1 THEN GOSUB *MS.DEL:GOTO *GO4
2810   IF BGMENDFLG=1 THEN *GO2
2820   GOTO *GO.L
2830 *GO2
2840   GOSUB *MS.DEL
2850 '--- 曲終るまで待つ ---
2860 *GO3
2870   IF STATUS PLAY(0)<>0 THEN *GO3
2880 NEXT
2890 *GO4
2900 MSC.I=0:GOSUB *MCLOAD
2910 IF JIDOUFLG=1 AND TAISYOU=3 THEN GOSUB *MN.DEL
2920 RETURN
 ~
3770 '------------------------
3780 '音楽演奏
3790 '------------------------
3800 *BGMPLAY
3810 IF STATUS PLAY(0)<>0 THEN RETURN
3820 BGM.I=BGM.I+1
3830 IF BGM.I>BGM.MAXN THEN IF BGM.FLG=0 THEN BGMENDFLG=1:RETURN ELSE BGM.I=BGM.FLG:BGM.REPERT=BGM.REPERT+1
3840 LOCATE 20+10+2*KLEN(BGM.TITLE$)+2,18:COLOR 5:PRINT USING"###/###";BGM.I;BGM.MAXN
3850 IF BGM.PART=1 THEN PLAY BGM.D1$(BGM.I)
3860 IF BGM.PART=2 THEN PLAY BGM.D1$(BGM.I),BGM.D2$(BGM.I)
3870 IF BGM.PART=3 THEN PLAY BGM.D1$(BGM.I),BGM.D2$(BGM.I),BGM.D3$(BGM.I)
3880 IF BGM.PART=4 THEN PLAY BGM.D1$(BGM.I),BGM.D2$(BGM.I),BGM.D3$(BGM.I),BGM.D4$(BGM.I)
3890 IF BGM.PART=5 THEN PLAY BGM.D1$(BGM.I),BGM.D2$(BGM.I),BGM.D3$(BGM.I),BGM.D4$(BGM.I),BGM.D5$(BGM.I)
3900 IF BGM.PART=6 THEN PLAY BGM.D1$(BGM.I),BGM.D2$(BGM.I),BGM.D3$(BGM.I),BGM.D4$(BGM.I),BGM.D5$(BGM.I),BGM.D6$(BGM.I)
3910 IF JIDOUFLG=1 AND BGM.REPERT=2 AND BGM.I>BGM.FLG+1 THEN BGMENDFLG=1
3920 RETURN
3930 '------------------------
3940 '音楽ロード
3950 '------------------------
3960 *BGMLOAD
3970 OPEN BGMPATH$+KYOKU$+".BGM" FOR INPUT AS #1
3980   INPUT #1,BGM.CODE$,BGM.TITLE$,BGM.MAXN,BGM.PART,BGM.FLG
3990   FOR I=1 TO BGM.MAXN
4000     IF BGM.PART=1 THEN INPUT #1,BGM.D1$(I)
4010     IF BGM.PART=2 THEN INPUT #1,BGM.D1$(I),BGM.D2$(I)
4020     IF BGM.PART=3 THEN INPUT #1,BGM.D1$(I),BGM.D2$(I),BGM.D3$(I)
4030     IF BGM.PART=4 THEN INPUT #1,BGM.D1$(I),BGM.D2$(I),BGM.D3$(I),BGM.D4$(I)
4040     IF BGM.PART=5 THEN INPUT #1,BGM.D1$(I),BGM.D2$(I),BGM.D3$(I),BGM.D4$(I),BGM.D5$(I)
4050     IF BGM.PART=6 THEN INPUT #1,BGM.D1$(I),BGM.D2$(I),BGM.D3$(I),BGM.D4$(I),BGM.D5$(I),BGM.D6$(I)
4060   NEXT
4070 CLOSE #1
4080 RETURN

まとめ

テンポや音量の指定は面倒ですが、その代わりに自由度があります。
音楽を言語化表現できる言語がMMLです。

こんな感じで、ほかのオリジナル作品やプログラムしたものなど、ソースを公開していきます。
希望、質問などあればコメント欄にお願いします。

コメント

コメント

タイトルとURLをコピーしました