検索
<< 2024年12月 >>
1
2 3 4 5 6 7
8
9 10 11 12 13 14
22
23 24 25 26 27 28
29
30 31
広告
駿河屋レトロゲーム
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
カテゴリーアーカイブ
ファン
QRコード

2023年07月13日

Laboratoryテーマ??14「簡単にBGMを鳴らしたい」







このツールの上位版である、「 MMLコンパイラ(通常版)Ver.1.1 」を2024年3月26日に公開しています。




7_13_1.png
今回は、Laboratoryテーマ??14「簡単にBGMを鳴らしたい」です。

やっぱりゲームを作る以上、盛り上げる為BGMは必須ですよね。
無音空間でゲームをプレイするのはなかなかキツイ。
と言う訳で、現時点で公開している自作ゲームで使われているレベルの、簡易的なBGM演奏ルーチンを公開します。
なお、BGMデータは下記レイアウトに合わせて作る必要があるので、音階を周波数データに変換して作らなくてはなりません。
しかし、流石にそれは大変なので、後日「簡易MMLコンパイラ」を公開します。
元々ツールとして制作しておらず、自分が使う用で万人向けに作られていませんでしたが、ツールとして公開するため色々改良しました。

【BGMデータレイアウト】



1音(3バイト)

2音(3バイト)

...

最後


音程下位8ビット

音程上位8ビット

長さ

音程下位8ビット

音程上位8ビット

長さ

...

FF




【音階・周波数対応表】




オクターブ


1

2

3

4

5

6

7

8


音階

C

D5D

6AF

357

1AC

D6

6B

35

1B


C#

C9C

64E

327

194

CA

65

32

19


D

BE7

5F4

2FA

17D

BE

5F

30

18


D#

B3C

59E

2CF

168

B4

5A

2D

16


E

A9B

54E

2A7

153

AA

55

2A

15


F

A02

501

281

140

A0

50

28

14


F#

973

4BA

25D

12E

97

4C

26

13


G

8EB

476

23B

11D

8F

47

24

12


G#

86B

436

21B

10D

87

43

22

11


A

7F2

3F9

1FD

FE

7F

40

20

10


A#

780

3C0

1E0

F0

78

3C

1E

F


B

714

38A

1C5

E3

71

39

1C

E


【長さ】



音符

長さ


全音符

128



2分音符

64



4分音符

32



8分音符

16



16分音符

8



32分音符

4



64分音符

2





本格的なBGM演奏ルーチンになると、BGMデータ中にテンポやボリューム、エンベロープ、タイ、スタッカート、連符等のデータが追加されるため、BGMデータの作成が大変です。(因みに、タイ以降はMSX-BASICのPLAY文にはないコマンドですので、そもそも演奏できません。)
何より、データが膨大になります。
私はあまり自作ゲームのBGMに拘らない人でした。
「T(テンポ)やV(ボリューム)、S・M(エンベロープ)はゲーム開始前に設定しておけば良い。」=「演奏中に変更する必要はない。」という考えでした。
まぁ、今でもそう考えています。
と言うか、私はそんな大層な曲を作曲できません。
ゲーム開発後半でも簡易版で十分でしたが、一緒にゲーム制作していた仲間からASCIIの「MuSICA」を使うよう依頼され使い始めた経緯があります。
しかし、プログラムもBGMデータも膨大で、メモリ制約のあるなか苦労した記憶があります。

簡易BGM演奏ルーチンです。
サンプル曲として「かえるの合唱」が鳴ります。
変数を利用しているので、サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。

「BGMSMPL.BAS」【 ダウンロード

7_13_2.png
サンプルは、私が通常やっている通りルーチンを2つ並べて2重和音でBGMを鳴らし(B、Cチャンネル)、残りの1チャンネル(Aチャンネル)は効果音用です。
250行の変数U1にBチャンネルのBGMデータ先頭アドレス上位8ビット、D1にBチャンネルのBGMデータ先頭アドレス下位8ビット、U2にCチャンネルのBGMデータ先頭アドレス上位8ビット、D2にCチャンネルのBGMデータ先頭アドレス下位8ビットを代入して下さい。
因みに、処理が早すぎるので430行〜450行で時間稼ぎの無駄ループをしています。

「Bチャンネル」
460行〜520行(&HC028〜&HC057)



変数アドレス

内容


BF02

演奏中アドレスカウンタ



BF03


BF04

音長カウンタ



BF05

BGMデータ先頭アドレス



BF06



「Cチャンネル」
530行〜590行(&HC058〜&HC087)



変数アドレス

内容


BF07

演奏中アドレスカウンタ



BF08


BF09

音長カウンタ



BF0A

BGMデータ先頭アドレス



BF0B



3つ並べて3重和音もできますが、効果音を鳴らす際、効果音のチャンネルが鳴っている間フラグを立てて、フラグが立っている時はデータは読んでアドレスは先に進めるが、PSGは触らないと言った工夫が必要です。

では、次回はLaboratoryテーマ??15「任意サイズのFONTキャラクタを指定座標に表示させたい」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/12064234
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: