悦楽舎 © 2002 hoshi
2022/08/13 (2022/10/08加筆)

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

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

(10/8追記) 紅楼夢18で プリズムデモ(V2)、chiptusion(DEMO) 頒布。MusicROM共通の操作方法あとがきも追記

ちなみに……CD(-DA)は両方「プリズムデモ(仮」(中身も同じ)で、おまけを「プリズムデモ」(=プリズムデモ(V1))から「プリズムデモ(V2)」に更新した、って感じです……。ややこしすぎんじゃボケェ!!!次からMusicROMで統一します……


何を頒布するの?

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

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


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

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

nostos algos hallucinate


で、こっちの新譜情報↓

CDの収録内容

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

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


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

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


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

試聴

C100に台風が来ると聞いて

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

というわけで自家通販します。デモなのでたぶん期間限定こっそりV2に差し替えてまた期間限定


(価格 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)

プリズムデモ(V1)の操作

トップ画面の操作

  • A: 進む

曲画面の操作

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

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


オプションエリア

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

ソフト仕様

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

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


開発環境

プリズムデモ(V1)版の仕様
  • DMG/CGB共通
  • MBC5(ROM 1MB + SRAM 8KB)

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


開発環境

OSS

既知の問題など

v2 (サウンドエンジン v1.0.0)

  • 発見や報告がないのでバグは存在しません! (CGB/DMG)
  • LSDjでも発生するAGB固有の現象 (Kitの音が変、マスターボリュームを小さくした時にノイズが鳴り続けるなど)


v1

  • [バグ] 自動曲送りで稀に発生、画像が壊れる
  • [バグ] 自動曲送りで稀に発生、曲再生前にノイズが入る
  • [未実装] ループ再生にゲーム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. 前者のrawdumpモードが未完成だったので、Forkして“変換前”の生データの出力機能を実装(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 (参考: 全体で256KBの初代カービィは12曲収録)

とりあえず曲データは全部1Bank(16KB)に収まってるな……ヨシ!(


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

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

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


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

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

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


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


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


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

(ただ曲の都合でchiptusionDemo用)

オススメの聞き方

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

A. CDプレイヤー


Q. そうじゃなくて

A. 再現度で言うならCD、オススメは制作と同じ(ProSound化してない)DMG & 開放型ヘッドホン

ま、実機は個体差があるし何なら電池残量で音が変わるし……(寿命?)適t自分が持ってる環境でおk!(


Q. ……。

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

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

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


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

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


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


(10/8追記)


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


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

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


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


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

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