アフィリエイト広告を利用しています
 

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

【音階・周波数対応表】







































































































































オクターブ
12345678
音階CD5D6AF3571ACD66B351B
C#C9C64E327194CA653219
DBE75F42FA17DBE5F3018
D#B3C59E2CF168B45A2D16
EA9B54E2A7153AA552A15
FA02501281140A0502814
F#9734BA25D12E974C2613
G8EB47623B11D8F472412
G#86B43621B10D87432211
A7F23F91FDFE7F402010
A#7803C01E0F0783C1EF
B71438A1C5E371391CE

【長さ】


































音符長さ
全音符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音長カウンタ
BF05BGMデータ先頭アドレス
BF06

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






















変数アドレス内容
BF07演奏中アドレスカウンタ
BF08
BF09音長カウンタ
BF0ABGMデータ先頭アドレス
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
※ブログオーナーが承認したトラックバックのみ表示されます。

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