悦楽舎 © 2002 hoshi
2022/08/13 (2023/11/29加筆)

C100頒布「プリズムデモ(仮」のトリセツ

プリズムリバー三姉妹にフィーチャーした(?)クラシック3曲+妖々夢1曲の謎CD、曲が再生できる自作ソフト(MusicROM)がおまけ

(23/10/19追記) 4回目の更新、情報の継ぎ足しでカオスになりかけていたので整頓

記事を更新しすぎたが故の概要

MusicROMは悦楽舎が開発中のGB用自作ソフトのシリーズで、エミュや実機で音楽が楽しめる物ですが、

これは開発初期の日記みたいな記事で……あらゆるソフトを改造しているのできっと役に立ちません(


  1. 22/08/13 C100を記念して自作ソフト「プリズムデモ」付きのCD頒布
  2. 22/10/08 紅楼夢18にてMusicROM「プリズムデモ(V2)」「chiptusion(DEMO)」が付いたCD頒布 ※1 ※2
  3. 23/08/12 C102にてカービィの曲が入ったMusicROM「タワーデモ」付きCDを急に頒布 ※3
  4. 23/10/15 紅楼夢19にてMusicROM付きの、蓬莱人形チップチューンCD「chiptusion」頒布 ※4


※1 CDは両方「プリズムデモ(仮」(音楽は全く同じ)で、C100でおまけと呼んでいた「プリズムデモ」(=プリズムデモ(V1))を「プリズムデモ(V2)」に更新……ややこしすぎんじゃボケェ!!!ってことでソフトにMusicROMと名前をつけました

※2 V2はサウンドエンジンを実装して大きく仕様変更。MusicROM共通の操作方法、開発のあとがきを記事に追記

※3 これもエンジンは同じ。操作方法も同じ。ジャンルが違うにあとがきを追記

※4 ここでやっと使い方を説明する記事を書いた。ドタバタ開発日記より、まずはトリセツが読みたいって方はまずはそっちへ



何を頒布するの? (C100)

普段「チップチューンで、いつも通りです」など、雑な告知してる雑なサークルですが、

記念すべき C100 なのでちょっと変わった物が出ます!


場所は2日目 東ハ05aで、となり(ハ05b)Xenoglossyと合体配置です!

あっちもチップチューンの新譜あります!今時珍しいバナーリンクの有効活用例!(これがやりたかった)

nostos algos hallucinate


で、こっちの新譜情報↓

CDの収録内容

  • ピアノ曲 ジ・エンターテイナー
  • バイオリン曲 チャールダーシュ
  • トランペット曲 トランペット吹きの休日
  • 東方妖々夢 幽霊楽団 ~ Phantom Ensemble

の4曲入り、そして……今回は音楽以外にデータも含まれるCD EXTRAです!


つまり、曲が聞ける自作ソフト(MusicROM)が、うっかり出来たのでCDに付きます!!

で、“無保証で自己責任のおまけ”で放置するのはあんまりな気がして記事書きました(謎のクラシック選曲理由はあとがきで)


CD EXTRAはディスクドライブが接続されたPCなどで開くと中のデータが見れます。音楽CDとしてCDプレイヤーで聞くことも可能です……たぶん。おい!俺のfoobar2000で再生できないぞ!

試聴

C100に台風が来ると聞いて

備えあれば憂いなし!!~ 蘇る2019年紅楼夢の記憶 ~

というわけで「プリズムデモ(仮」の自家通販します。期間限定と言いながらもう1年なので、そろそろ終了


(価格 300円+税+送料)

C102にも台風が来ると聞いて (23/8/12追記)

備えあれば嬉しいな!!~ 再び蘇る2019年紅楼夢の記憶 ~

というわけで「タワーデモ(仮」の自家通販します。期間限定です、恐らく……


(価格 300円+税+送料)


「タワーデモ(仮」の収録曲などは最後にまとめてあります。

タワーデモ

おまけの自作ソフト「プリズムデモ」

おやくそく

自作ソフトを実行するにはエミュレータ導入や、ゲーム機の改造などが必要な場合があります。

発生した事象について作者は責任を負いません。全て自己責任で行ってください。

エミュレータの再現度はソフトによって様々です。どうせなら評判がいいものをオススメします。

(bgb、Gambatte、SameBoyなど。ちなみに開発はbgbとDMG/CGB実機、曲制作はDMG実機です。参考にどうぞ)

操作

基本操作

  • START: 再生/一時停止
  • A: メニューを開く
  • B: 停止


メニュー操作

  • LEFT/RIGHT: 項目を選ぶ
  • UP/DOWN: 内容を選ぶ
  • A: 変更を適用(メニューを閉じる)
  • B: 変更を破棄(メニューを閉じる)
  • SELECT: 項目の説明やトラックの曲名を表示(ON/OFF)


メニュー項目

  • Track: 曲番号
  • Loop: ループ再生(ON/OFF)
  • Fade: 曲切り替え時の色変化
  • Color: カラーパレット設定 (現在 1色のみ/DMGは変更不可)


 (載せてない操作が若干あります。デバッグ用です、困ったらB)

ソフト仕様

  • DMG/CGB共通
  • MBC5(ROM 128KB + SRAM 8KB)

 ※ 今のところセーブ機能はありません。


開発環境

既知の問題など

サウンドエンジン v1.0.0

  • 見つけてない/報告されてないので現在バグはありません!
  • ループ時点より後(フェードアウト中)にLoopをONにしてループした場合、曲データがマズいと前の音が鳴り続ける (共通)
  • LSDjでも発生するAGB固有の問題 (波形メモリサンプルの音が変、マスターボリュームを小さくした時に大きめのノイズなど)


プリズムデモ(V1)版の情報

操作

トップ画面の操作

  • A: 進む

曲画面の操作

  • START: 再生/停止
  • LEFT/RIGHT: 選ぶ
  • A: メニューを開く/閉じる(閉じる時に別の曲を選んでいたらその曲を再生)
  • SELECT: オプション切り替え(Track → Loop → Dark → Track)
  • B+DOWN: 絵のスクロール

 (載せてない操作が若干あります)


オプションエリア

  • Track: 再生する曲の変更
  • Loop: ループON/OFF
  • Dark: フェードアウトの色反転

ソフト仕様

  • DMG/CGB共通
  • MBC5(ROM 1MB + SRAM 8KB)

 ※ RAMはオプション状態を保存するつもりで有効化しただけでまだ使ってません


開発環境

OSS

既知の問題など

  • [バグ] 自動曲送りで稀に発生、画像が壊れる
  • [バグ] 自動曲送りで稀に発生、曲再生前にノイズが入る
  • [未実装] ループ再生にゲームBGMモード(イントロカットのループ)


「プリズムデモ(仮」のあとがき

各種情報終わり!それでは、今回はソフト内に埋め込んだりしなかった“あとがき”です。


謎の選曲

コミケなので発作的に聞きたくなった曲を作り始めて“ピアノ”と“トランペット”の騒がしい曲が出来たので……

“バイオリン”のも作ったら……おぉ!プリズムリバー三姉妹じゃん!(??)


…………意味不明すぎるけど真実です(

情報の空白や謎があっても考察が無意味なほどにスッカラカンなこともあるぞい(

絵作り

いつもの(CDジャケ)の解像度が3x3倍くらいなので、三姉妹感があるプリティリメイク衣装アレンジしました。

暑いのでノースリーブ。次女の髪型が分からん過ぎたのでヘアアレンジも加えてアイドル衣装です(


コーデ

てかがキャラ判別の大きな材料なのにDMG(初代GB)はグレー4階調だから……なるべくしてなったというか(

色作り(とカラーマネジメント)

研究中の“CGBでも綺麗にモノクロ表示できるカラーパレット”が1種類入ってます。なのでCGBでも4色は仕様。

三姉妹のカラー設定は出来てて(PCの色をCGB向けに)色補正するツールも作ったけど機能実装は時間切れでした(

いっそ開き直って髪色が同じな方が三姉妹感あって良くね?みたいな(


色再現なしエミュ バックライト無し液晶

 左: 色再現なしに設定したエミュでの表示 右: バックライトなしCGB液晶での表示


と、どんな環境でもそれなりに綺麗に見えるパレットを研究中です。(黄ばんだ背景は必要があって黄ばんでます)

音作り

いつもの“ゲームっぽさを残す”的な方針を今回は忘れて色々開拓しました。

結果的に楽器にフィーチャーした選曲になったので、今までやらなかったような音作りを片っ端から試して楽器っぽくならんかなって感じで作りました。


唯一「あっ、これかぁ!」ってならなさそうなチャールダーシュですが、前からやりたかった2音だけで構成された曲です。突き抜けたスルメ曲なのでオススメです。

2音でバイオリンが波形メモリじゃないのは、最後が音色大集合の幽霊楽団と決めた後だったので(

LSDjのMod

いつもの(LSDj v405)基音をA=439.99(実際は439.839)HzからA=439.45(438.367)Hzに変えてます。


“実際は”と書いたように正確にA=440Hzが出せるハードじゃないので全部ズレてます。まぁ計算したらズレててチューナーで測定したらほぁ!?マヂじゃん!!ってなったので恐らく人間の耳にはわかりません(

LSDj v516で音が変わった!って言ってた人いないし、たぶん……


ここの詳細は寝るほど数字が出てくるので省略して……変えた理由はユニゾンやオクターブが綺麗に鳴ったから。検証不足だけど、まぁデモ(ry


A=453Hzで作った紅魔郷の曲も入れようとしてたけど……お察しください。(追記 → chiptusionは全曲A=449Hzの予定です)

lsdpackとlsdpack-kitの紹介(V1で使用)

LSDjで作った曲を変換してくれるlsdpackありきな自作ソフトなのでハイパー感謝してます。

ちなみに仕組みは内部にエミュが入っててLSDjを動かしてレジスタへの入力を全部記録するという……その発想は無かったやつです。


ただ、出力されるデータは大きいのでROM容量に注意が必要かも

lsdpackで変換した曲データ(kit未使用)
Song 1: 41932 bytes Song 2: 56252 bytes Song 3: 144284 bytes (テーブル多用すると増える) Song 4: 242561 bytes (ループ部分も重複して記録される) (参考: カービィ2が全体で512KB)


そして、lsdpack-kitは画像を用意してコマンドを叩くだけで1枚絵付きで曲が流れるROMが出てきます!

(lsdpack同梱のplayer.sは最低限の実装だけで、拡張するにはアセンブリを理解して自力で開発する必要がありました)


git cloneしてLSDj v888(※)を入れてmakeするだけでROMが出てきてビックリです。お試しあれ!!

(※ 最新版だと正常に再生されないので、sav作者が使ってたかもしれないバージョン)

メニュー拡張(V1の仕様)

で、素晴らしいテンプレートですが「ボタンを押すと次の曲」しか無いので結局アセンブリを雑に理解してUIを拡張しました。


  • HUD
  • 停止
  • 選曲
  • 曲名表示
  • ループ機能

など、あると間違いなく便利な機能や


  • 1枚絵のスクロール(最大32タイル)
  • 再生中の曲のBank数表示
  • フェードアウトの色反転
  • カラーパレット適用

など、別になくてもいい機能が増えました(技術デモな側面)

Bank数表示

Play/Stopの左の数値がBank数表示です(最大0x1FF)。曲名を確認しながら選曲できて便利~!(手前味噌)

(10/8追記) lsdpack forked & 自作サウンドエンジン化

で、2ヶ月(C100~紅楼夢18)の間に中身が丸っきり100%別のコードに置き換わりました(


色々解説したいけど即売会直前過ぎて書ききれないので概要だけにしとくと……V1は「エミュを実行して出力したデータの変換をする(C++)」、「変換データのGB用再生プログラム(ASM)」はlsdpackのを借りていました。


それを、

  1. lsdpackのrawdumpモードが未完成だったので、“変換前”の生データのまま出力する機能を実装(C++)
  2. エミュのTick(割り込み)判定がズレるので、LSDjにTickを送信させエミュが受け取るようMod(C++、ASM)
  3. 規則的になった生データから共通部分(レジスタに送るデータや曲の繰り返し)変換スクリプトを開発(Python)
  4. 変換して独自コマンドになった曲データを再生する機能を1から実装(=サウンドエンジン完成)(ASM)

という感じで容量削減しました。ね、簡単でしょ?

独自コマンドに変換した曲データ
プリズムデモ(V2) Song 1: 6176 bytes <- (V1: 41932 bytes) Song 2: 7984 bytes <- (V1: 56252 bytes) Song 3: 10916 bytes <- (V1: 144284 bytes) Song 4: 10855 bytes <- (V1: 242561 bytes) chiptusion -DemoVersion- Song 1: 14122 bytes (Kit 1536 bytesを含む) Song 2: 12634 bytes Song 3: 8748 bytes タワーデモ Song 1: 5278 bytes Song 2: 13571 bytes (Kit 3104 bytesを含む) Song 3: 6577 bytes (参考: 全体で256KBの初代カービィは12曲収録)

とりあえずどの曲も1Bank(16KB)内に収まってるな……ヨシ!(


いつかちゃんと解説します……

(10/8追記) メニュー刷新(V2の仕様)

全部作り直してるのでメニューも一新しました。


メニュー閉じたときのアイコン メニューを開いた時

  メニューを閉じている時(左)、メニューを開いた時(右……履いてないように見える)

ボタンアイコン付けたり項目を1画面に収めたりしたので分かりやすくなったはず。


幽霊楽団 〜 Phantom Ensemble U.N.オーエンは彼女なのか?


曲名はそれとなく漢字で出るようになりました。スプライト横並び上限10がキツい


ついでにループ機能もイントロアウトロなしのゲームBGMモードとして動くようになりました。

(そんな機能が増えることを想定してなかったプリズムデモは未対応です)

オススメの聞き方

Q. それで、一番オススメの(再現度が高い)再生環境は?

A. CDプレイヤー


Q. そうじゃなくて

A. 真面目に答えるなら制作環境と同じ(ProSound化してない)DMG & 開放型ヘッドホン(AKG K240MK2)

でも、実機には個体差があるし、使うeneloopでも音が変わるし……(寿命?)

まぁ適t自分が持ってる環境でおk!(


Q. ……

A. もう一つのオススメは90年代のPanasonic製ポータブルCDプレイヤー(別の沼)

(C100 完成直後)


(色々な意味で)デモですが、いつもと違うこと尽くしなプリズムデモを楽しんでもらえれば嬉しいです。

サウンド周りの調査しながら作ったデモなのでバグはたくさんあります(断言)。


言ってしまえばゲーム開発の寄り道で出来たおまけです。が、需要がありそうなら開発の途中経過みたいな感じで続けるかも(本来のデモ的な側面)(けどドット/音/プログラムの締切が同時に来てCDも作るのマゾい)

さて今回の曲データのまま容量削減とか……幻の5thチャンネルとか……間に合わなかった画像圧縮の(ry


てか、よく考えると当時のゲームはそれぞれ独自のサウンドエンジンを中に持ってるってすごない?


(10/8追記) サウンドエンジン完成直後


無事、自分もソフトの中に独自のサウンドエンジンを持つに至りました(


(気を使って打ち込む必要がある部分がまだあるけど)LSDjのパワフルな音作り機能やKit再生が使えて、BGMとして許容できそうなCPU負荷と現実的なデータサイズに収まったので、道が拓けたような気がします。

10/9はサイト開設から20年なのでこういう出来事と一緒に覚えておけるのは良いことなんじゃないかなたぶん。


あと1から作り直してデータやコードのブロック化が一気に進んだのでちゃぶ台返しメソッドはこういうことなんだと実感しました、勝手に。


……次はグラフィックエンジンと、かなり大掛かりになる予感がする画像変換ツール開発ですね!(

その前にちょっと弄ってSFX鳴らす仕組みを入れる(メモ) 波形をちまちま編集しないといけないのも効率化する(メモ)


(23/8/12追記) タワーデモ完成直後


あれは!ウイングデデデ!

???「すっげぇキモいデザインだな!」

……いっそ、前情報ゼロで行くか?などと考えたけどやめました(

即売会は当日しかやってないし……自家通販をしてはいるけど……


で、今回は発作的に打ち込み始めた「カービィの曲」が、登るステージばかりだったのでタワーデモです。

クライムデモではありません


曲は、

  • めざせ! でっかいスター(スーパーレインボーの「カービィ2 タイトル」アレンジ)
  • リップルスター(ステージ3)
  • スカイタワー

の3曲で、今回もおまけのMusicROMが入ってます!

選曲がニッチ?そういうサークルです


このWebサイトは元々カービィのイラストサイトとして始まったアレで、これまで何度かカービィの曲を打ち込んだこともあったけど納得できず全部没にしてきたりしたので、自作ソフト開発で音源のことがだんだんわかってきて……やっとか、みたいな感慨的なアレも若干あります(クソ早口)

自分のチップチューンの試行錯誤の歴史とカービィの曲で色々書けそうなのに雑にぶっこんでしまった。時間が無い、いつもそう



しめきりまであと1しゅうかんすらない!!