tsutsuiの作業記録置き場

NetBSDとかPC-6001とかの作業記録のうち、Twitterの140字では収まらない内容や記事としてまとめるべき内容をとりあえず置いてみる予定

「Tinyみずいろ」にBGMを追加するまで(4)

ちょっと間が空いてしまいましたが、 TinyみずいろBGMの記録も今回でようやく最終回で、 BGM採譜と組み込みまでです。


「ロードが長い テープ版」ということで 4:20 付近からが本編です

P6月間締切駆動

過去のエントリ で書いたような各種のデータ修正を経てオリジナルの「Tinyみずいろ」が実機で動くようになったのが 6月12日の週末で、よっしゅさんの PSGドライバをいじり始めたのが翌週末の 6月18日。

そして 前回のエントリ で書いた Exomizer 圧縮展開ルーチンの組み込み作業は 6月22日(水)の夜、 PSG音源ドライバの組み込みトライは 6月23日(木)の夜でした。

P6月間活動という名のもとに 6月中にデモ動画を投稿するとなると、撮影のセッティングやら編集やらを考えると平日は厳しくて週末作業は必須。一方で 6月に残されている土日は 25・26日のみ、ということは残る 24日(金)の夜と 25日(土) の2日弱で BGM データを完成させなければいけない、という状況でした。 もちろん、6月にそこまでこだわる必要もなかったのですが、こういう活動はノリと勢いが重要なので……

みずいろプロローグ BGM

配布版の「Tinyみずいろ」が動いた 6月12日の時点で「BGMがないと実機動画を撮ってもさびしすぎるなぁ」ということで BGMを付けることを考え始めたのですが、当然というかなんというか、検索してみても 21世紀のゲームの BGM を PSG (というか FM音源も含めた MML) で作っている人など見つかりませんでした。 MIDI音源のものはちらほら

とりあえず自分で何とかできるだろうか、ということでオリジナル(?)の PC版の CD を掘り出してきて Windows 10マシンにインストールしてみると、15年前のソフトにもかかわらず一応プレー可能のようだったので、早速プロローグ曲を確認してみました。
「例のバグ」は大丈夫か、という心配もあるかと思いますがパッチ当てたのでたぶん大丈夫??

「回想シーンはオルゴール曲」という法則(?)がいつの時代からのものなのかはわかりませんが、プロローグの曲はその名も「オルゴール」で、OPテーマ「みずいろ」のオルゴールアレンジバージョンです。ゲームの BGMデータは CD-DA なので、耳コピをするにあたってのデータの取り出しは問題ありません。思わずゲーム本編を進めてしまいそうになるのを抑えてオルゴール曲を一通り聞いてみると、以下のような感じです。

  • 主旋律のメロディーで 1音
  • 伴奏のアルペジオ(?)回しで 1音
  • 長さは約 3:30 で、おおむね同じメロディーを 2回ループする構成
  • 2回ループの後半のみ、弦楽器ハーモニー風(?)の伴奏が追加

「PSG 3和音」の BGM を採譜することを考えると、以下の通りハードルは低そうかな? と思えました。

  • メインの音数が少ないので「どの音を選ぶか」という迷いはない
  • 音源的には正弦波に近くて音程を取りやすそう
  • 途中で挫折しても、ループ1回分だけなんとかすれば「Tiny」の名のもとに許される?

とはいえ、大昔に「楽譜のある曲を MMLに落とす」という経験はあったものの、「耳で聞いてMML化する」という作業はやったことがなかったので、聞くに耐えうるような曲データを起こせるかどうかは未知数でした。

耳コピーお試し

6月21日の Exomizer 圧縮による画像データサイズ確認 の結果により「PSG音源ドライバ組み込みによる BGM 演奏」が現実味を帯びてきたところで、改めて耳コピを意識して曲を聞いてみました。

大昔にはピアノを習っていたこともあり、今でも気分転換のお遊び用として自室に安物の電子ピアノが置いてあったりもするのですが、サビの一部分だけを片手で弾くくらいならともかく、曲全体を通しで採譜するにはなかなか根気が要りそうだ、という感じでした。

とりあえず「原曲を聞いていきなり MML」はやっぱり無理か、ということであらためて採譜環境を考えてみます。

素人ピアノ弾きなので黒鍵がうまく弾けない→実際の音と聞き比べないと取れない というヘタレ

部屋に電子ピアノはあるとはいえ PCからは離れているし、そもそも発音にしろスロー再生にしろ今どきなら PC 上で全部できるんじゃないのと思いつつ、その日はそのまま本題であるアセンブラ実装を進めました。

採譜用ツール探索

と、ここまでが事前検討で、 6月24日に「後は BGMデータを作るだけ」という状態になってからようやく泥縄式にツールを探し始めました。とりあえず「PC上で楽器代わりに音を鳴らす」というのはどこにでもあるだろうということで後回しにして、「ピッチそのままでスロー再生」および「指定区間のリピート再生」ができるものを適当に検索で探してみます。

まずは「Windows Media Player でもスロー再生可能」という検索結果が出てきました。

が、手元の Windows10 Pro で確認してみると、どうも今のバージョンでは 1/2倍および倍速再生しか設定がないようです。 まあ、あまり需要はありませんよね

任意スロー再生・任意区間リピートができるツールもあったのですが、数小節聞いてみると現実はなかなかに厳しい感じでした。


「別の音と重なっている上に音量が小さくてかつ長さの短い音」を取ろうとすると、「低速再生で区間リピート再生しつつ、基準の音を出しながら聴き比べる」という操作が必要になってきます。今回の曲の中で発声すべき音の数がどれくらいあるのかは数えていませんが、仮に数百の音があってそのうち 1割が聞き取りづらいとすると、数十回はそういう操作が発生することになります。

さすがにこれはつらそうだ、ということでさらに適当に検索してみると……

採譜支援ソフト WaveTone

上記のツイートのとおり「まさに求めていたものがそこにある」という感じだったのですが、詳しくは以下の紹介動画をご覧ください。


機能として

  • FFTによる周波数解析結果のピアノロールによる音程表示
  • 再生速度変更・任意区間リピート再生
  • ピアノロール上のマウスクリックによる当該音階の発声
  • イコライザによる周波数別の音量調整

と、まさに採譜に特化していて、 GUI 操作も申し分ありません。

WaveToneデモ動画のように普通(?)の楽曲だとごちゃごちゃしてしまうようですが、実際に「オルゴール」の曲を開いてみると、当初の目論見(?)どおり、わりとはっきりと各音程が分かれた状態で表示されています!


まさに「これなら見えてる通り拾うだけで MML 化するも楽勝かな?」という感じです。

期限まで残された時間も少ないので、とりあえず「見たとおりの音を拾ってMMLにする」という手順でしばらく進めてみました。が、数小節分を採譜して実際に鳴らしてみると、圧倒的な経験値不足が故に、いろいろと問題が……。

具体的には、以下のような問題です。

  • MML入力→コンパイル→エミュ上での試奏 の手順が煩雑で、入力中の音確認がやりづらい
    (そのせいでつい一気に入力してしまい、聞いた後でのやり直しが発生する)
  • 主旋律と伴奏の2音が近づくと表示が錯綜して実際の曲を聞かないと判別できない
  • オルゴール特有の「ポロロン」という高速アルペジオ的和音があると表示がごちゃごちゃする
  • 和音的表現があった場合に、それらの音のどこまでを採用するかという迷いが生じる
  • WaveToneのマニュアルにあるとおり、倍音成分の表示も結構大きいので惑わされる

結局、締切まで残り 2日のうちの 1日目の深夜作業では、全体の 2割程度しか進みませんでした。

採譜手順見直し

試行錯誤を始めてしまうといくら時間があっても終わらないので、採譜については以下の方針を決めて作業することにしました。

  • まずは主旋律と伴奏の 2音だけを取る (聞いて不自然でなければ和音は捨てる)
  • WaveToneの小節番号を参照して「4小節ごとに採譜・コンパイル・試奏」の単位で進める
  • 採譜時は表示をベースに機械的に入力するが、少しでも迷いがあれば演奏と発音とで照合

採譜結果入力→コンパイルについては以下の手順です。

  • MML2P6PSGDRV の編集画面で小節番号のコメントとともに3音ずつ記載
  • 行番号については、BASIC実行を考慮せず参考程度に適当に入力
  • MMLの更新入力後に「アップデート」ボタンでバイナリ更新


画面キャプチャはブログエントリ作成時の再現映像です

試奏のための PC6001VWのエミュでは、以下のような設定で演奏手順を固定させました。

  • BGM付きTinyみずいろのトライアル版 (YS2OP版) をスタートさせたところで STOPキーで中断
  • EXEC &HD103 でいったん演奏停止 (PSG音源ドライバは D000h にロードされている)
  • 上記で PSGドライバが演奏できる状態なので、いったん「どこでもセーブ」しておく
  • PC6001VW の「モニタモード」の「setbin」コマンドでコンパイルした曲データを D800h にロード
  • モニタモードから抜けて EXEC &HD100 で演奏開始
  • 後は以下の繰り返し
    EXEC &HD103 で停止
    → モニタモードの setbin コマンドで演奏データロード
    EXEC &HD100 で演奏


画面キャプチャはブログエントリ作成時の再現映像です

なお、採譜が進むと曲の先頭から演奏していると入力検証する試奏部分までたどり着くまででも時間がかかる (そしてつい聞いてしまう) ので、 MML の Xコマンドを使用して途中の演奏を適宜スキップさせる必要があります。その際は Vコマンド (ボリューム) や Oコマンド (オクターブ) についてズレないよう、相対設定が長く続かないように記述を考慮する必要があります。

採譜作業進行

作業手順を割り切って決めてしまった後は、たまに取りづらい音で手こずるくらいで、黙々とMML化作業を続けました。

AM 1:38


AM 3:02


なお、採譜・試奏手順を決める際に、 MMLのテキスト編集がどうにもしっくりいかなかったので、以下のようなことを Twitter上でつぶやいていたのですが


なんと、作業進行中に Tiny野郎さんが早速改良版を作成してリリースしてくれました!

というわけでさらに作業を加速させました。

ここからの作業はふたたび Togetter まとめ状態ですが

というわけで、無事(?)に期限当日の 6月26日(日) の朝には BGMデータ作成を完了させることができました。

BGMデータ組み込み後作業

BGMデータの作成・組み込みまでは完了しましたが、実機でのデモ動画撮影に向けてはさらに以下の作業が必要でした。

画面描画とBGMとの同期

PSG音源ドライバは割り込み駆動なので、画面表示およびテキスト表示を行う BASIC プログラムとは完全に非同期で動作します。一方、「店頭デモ版」を名乗るタイトルである以上は BGMが途中でブチ切れたら台無しで、デモの一周と BGMの周期をある程度同期させてやる必要があります。

作成した BGM の一周は 3:30 くらい。一方で、 BASIC 側のデモ一周の時間については事前にまったく確認していなかったのですが、とりあえず BGM を組み込んだ Tinyみずいろを動かしてみると、 BGMの2周目の残り20秒くらいのところで最後の "−ねニねニリフト 2001−" の発売日表示画面にたどり着いていました。

BGM 一周目の区切りも雪希さんがはがきを書き始める手前くらいで特に不自然でも無かったので、 BASIC側の制御プログラムで以下の制御を追加するだけにしました。

  • 開始時は "PUSH ANY KEY" の後の CLS および SCREEN 設定後に EXEC &HD100 で演奏開始
  • BGM MML データで Iコマンドを使って D00Dh の同期データが曲の最後で 0→1 になるよう設定
  • 最後の発売日画面表示処理で上記ワークを見て BGM終了待ちを追加

「5分」というのは当時の勘違いで、実際は7分強です

実機確認

エミュで動作確認ができたら、次は P6実機での確認です。 P6ファイルを wav 化してテープに投入するだけといえばそうなのですが、微妙に問題がありました。

というわけで、エミュでは20秒以上 BGM終了を待つタイミングだったのが、実機だと「最後の画面でちょうど曲の最後のフレーズが鳴る」というタイミングになってくれました。

撮影・編集・公開

BGM組み込み完了の時間は上記ツイートの通りで P6月間最後の日曜の朝 8時半過ぎ。とにかく動画だけは撮ってしまえ、と仮眠も取らずにセッティングを続けました。

動画撮影のノウハウについては私なんかが書くよりも詳しいページがたくさんあるので別の機会にまわしますが、今回は一応 BGMがメインだったので、

  • P6のスピーカーの音を効率よくマイクで拾うにはどうするか (レフ板でも付ける?)
  • データレコーダーの音とのバランスをどうするか (試し撮りするしかない?)

といったところが手間がかかったところです。

あまり細かいところにこだわるとエンドレスなので、撮影は Take 4 くらいで切り上げ。編集についても、途中のテープロード部分のカットはしないことにしたので、 AviUtil + 拡張 x264出力プラグイン を使って先頭と終わりでカットとフェード入れたくらいで、ちゃちゃっとエンコードまで済ませました。

動画投稿まで目途が付いたところでいったん仮眠をとって、その後の公開投稿が以下のツイートで、無事 P6月間活動として完結させることができました。

自己満足のために始めた作業でしたが、そこそこ反響をいただけたようです。

なお、上記の @Hashi6001 さんのツイートを見るまでは Tinyみずいろの作者の方について存じ上げなかったのですが、ニコニコに Tiny野郎さんのYS2OP実機動画 を含む P6動画を投稿されている JOTさんであるということを初めて知ることになりました。


その JOT さんからも、以下のように反応をいただけました。

JOTさん、楽しいエイプリルフールネタの公開、どうもありがとうございました!

終わりに

だらだらと書き続けてきた Tinyみずいろ記事も、今回で一通り書き終わったことになります。今までお付き合いいただきありがとうございます。

曲の MML データおよび演奏曲の MP3 データについては追ってどこかで公開しようと思っていますのでもうしばらくお待ちください。