AT2で曲作り:作った音を自分のプログラムに取り込む
前回までの記事でArkos Tracker2(AT2)で曲が作れるようになったと思います。今回の記事ではその曲を自分のプログラムに取り込む方法について説明します。と、とりあえず今回はサンプルコードもついてますのでそちらを先にゲットしてください
https://github.com/sailorman-msx/games/tree/main/src/at2study
サブソングをまとめたやつがファイルとして出力される
Song propertiesの一番上に表示されているSong Titleはいわば「アルバムのタイトル」です。アルバムの中にサブソング(曲)がたくさんある。というイメージですね。
ソースファイルを出力するとこの「タイトル」のレベルで全てのソングデータを出力することができます。(もちろん、出力時に出力したいソングだけを選ぶことも可能です)
そのため、このSong Titleはできるだけわかりやすい名前をつけておくようにしましょう。
ExportではExport as generic(AKG)を選ぼう
前の記事でさらっと説明しているようにAT2ではいろんな形式のプレイヤーを持っていて、それぞれのプレイヤーにあわせた形式でExportする仕組みになっています。今回はAKGで出力します。
「Export as generic(AKG)」を選択すると次のような画面が出てきます。
Export as のASM labels prefix がソングタイトルになっていることを確認しましょう。ここを変な文字列にするとあとで後悔します。
他は何も考えずにOKボタンをクリックしてください。
出力されたファイルを確認
エクスポートが行われると所定の場所に、次のようなファイルができあがります。
今回の例だと、TRAINING_BGM.asm、TRAINING_BGM_playerconfig.asmというファイルが出力されます。
RASMを使ってプレイヤーをアセンブルする
次に、rasmアセンブラを使ってプレイヤーをアセンブルする必要があります。アセンブル以降の手順は次のとおりです。
エクスポートされたasmファイルが存在しているディレクトリに行き、以下のようにCompileAT2Files.asmというファイルを作成してください。
PLY_AKG_HARDWARE_MSX = 1 ← MSXの場合は必須
PLY_AKG_MANAGE_SOUND_EFFECTS = 1 ← SFXを使う場合は必須
PLY_AKG_Rom = 1 ← ROMにプレイヤーを埋め込む場合は必須
PLY_AKG_ROM_Buffer = #d900 (※)
AT2ではPLY_AKG_ROM_Bufferで指し示すアドレスから256バイトをワークエリアとして使います。今回の例だとD900Hからをワークエリアとして使う。という意味になります。
SFXを使う場合、エクスポートされたファイルと同じディレクトリにPlayerAkg_SoundEffect.asmというファイルが必要になります。
設定ファイルができたら、rasmでアセンブルします。
rasm CompileAT2Files.asm -o CompileAT2Files -s -sl -sq
アセンブルに成功すると、CompileAT2Files.bin, CompileAT2Files.sym というファイルが出来上がります。
できあがったバイナリを逆アセンブルする
今度はZ80ASM用のソースファイルに逆アセンブルしていきます。AT2では逆アセンブルのツールとしてDisarkというツールが用意されています。
Disark CompileAT2Files.bin temp.asm --symbolFile CompileAT2Files.sym
逆アセンブルに成功すると temp.asm というファイルが出来上がります。
ですが、temp.asm は次のような構文になっていてZ88DKのZ80ASMでは構文エラーになっていまいます。
そのため、筆者が作成したツールでZ80ASM形式のソースに変換しましょう。(このツールはPythonで出来てますのでWindowsでも使えるはずです)
./arkos2z80asm temp.asm > AKGPlay.asm
実行すると AKGPlay.asm というファイルが出来上がり次のようにZ80ASMの構文形式に加工されていることがわかります。
ここまでで、AKGPlay.asmというファイルにプレイヤーとソングデータがASM形式のソースとして出力できたことになります。
自分のプログラムに取り込む
最後にAKGPlayer.asmを自分のプログラム内にincludeしましょう。
こんな感じですね。
AT2で作成した音楽を鳴らす方法
次にAT2で作成した音楽を鳴らす方法です。
BGMの鳴らしかたは簡単です。最初にPLY_AKG_INITをCALLします。
HLレジスタにソングスタートアドレスのラベル(今回のサンプルだとTRAINING_BGM_START)を
Aレジスタにサブソング番号をそれぞれセットして呼び出します。
これでこの後に、PLY_AKG_PLAYが呼び出されると曲を再生します。
これだけです!!
今回のサンプルではAT2で作成した曲をBGMにしたデモ用のプログラムを付けてます。
デモを動かすとわかるのですが、AT2で聴く音やリズムとプログラムで鳴らしたときの音やリズムとは絶妙に異なります。
自分で一番好きな音やリズムに変えたりして、より深くAT2を体験してくださいね。
AT2ではBGMは複数チャンネル、効果音(SFX)は1チャンネルで鳴らすのが王道のようです。次回は、AT2での効果音の作り方・使いかたとちょっとしたテクニックを紹介します。
では、また!ノシ
セーラー服が似合うおじさんです。猫好き、酒好き、ガジェット好き、楽しいことならなんでも好き。そんな「好き」をつらつらと書き留めていきます。