S98 Player for PC-8801 (test)


img
PC-8801 で音源ログファイル S98,GYM,VGM を OPNA を用いて再生します。
hoot,PC60,PC98,MD,SMS,GG 各エミュレータで出力した音源ログを PC88の実チップで演奏させるのが目的ですが
演奏できるファイルサイズの制限が厳しいので(test)としました。

音源エミュレータの精度も上がり、実チップで聞ける環境の選択肢も増えて来つつある今、
制限多めで再現性も難ありの本件は今ひとつ需要が不明ですが、エミュレータの生成したデータを
実機で再現(エミュレート)するというちょっとSFチックな感じが味わえるかもしれません。
偽の記憶を脳にインプットされるような…。




■ How to Play S98/GYM/VGM

・D88イメージとソースコード s98player_20110923.zip (2011.09.23版)

★動作要件
・OPNA 内蔵機種 (I/Oポート 0x44 〜 0x47)
・128KB 拡張 RAM 搭載機種
 ソースを少し手直しすれば OPNA 外付けや VRAM 等の空きメモリをストレージにして演奏することも可能.

★ディスク作成方法
1)同梱の makeS88.exe と s98play.d88 を同じディレクトリに配置します。
2)演奏したい S98/GYM/VGM ファイルを makeS88.exe にドラッグ&ドロップします。
3)同名の D88 ファイルが生成されたら成功です。エミュレータで動作確認するとよいでしょう。
4)ディスクからロード後、演奏開始。スペースキーを押すと最初から演奏し直します。

トラック19のセクタ1から書き込んでいるだけです。ファイルの中身やサイズ等は全くチェックしていないので注意。

::: 履歴 :::
2011.07.17 初版
2011.09.23 OPNA FM4-6 Enable を発行するようにした。(Thanks UME-3さん)

■ 問題点

・音源ログファイルのサイズ制限

 長い時間かけてロードして短時間で演奏終わり、という点が本件の一番の問題点。
 128KB だと、効果音的な短い曲くらいしか格納できません。
 圧縮すれば縮むことは縮むのですが、演奏しながら展開するのは CPU リソースや構造上(ループなど)厳しい所に加え、
 仮に圧縮したとしても 1枚のディスクに恐らく数曲しか入らないであろうことを考えると、その方向で努力するのは割に合わなさそうです。
 また、(AD)PCM を持つものは圧縮もあまり効かないでしょう。おまけに1曲毎にADPCM再定義とか無駄もいいところです。

 SN76489 をソースとするファイルであれば、128KB に収まる曲は色々あると思います。

・S98

 テンポのふらつきが気になるかもしれません。
 S98 は 32bit/32bitの1sync分解能を持つので、1/60秒に落としこむと各チャンネルの微妙なアタックのずれなど障害が出ます。

・GYM/VGM

 音痴です。音源への入力クロックが違うので当たり前ですが。
 出したい音程を逆算して再計算すれば大丈夫?
 音量バランスも違うでしょう。
 GYM はヘッダもループ設定も一切無いので垂れ流しです。終端が判定出来ないので放置しておくと異音が鳴るかもしれません。

・SN76489シミュレーション

 ノイズ音源を ADPCM で再現しています。第3チャンネルの周波数に連動する機能が未実装なので、その機能を使うものは正常に鳴りません。
 ADPCMも音階は付けられるので適当にサンプル取って間に合わせることも出来なくは無いでしょう。メモリが足りるかはさておき。

 ノイズは常にリピート再生にしてありますが、ループポイントはベタに手動調整なので特に短周期ノイズはまじまじと聞くと違和感があります。
 サンプルは本来は算術合成で1ループを用意すべきなのですが、面倒なので適当にwav吐かせてリサンプル、ADPCM変換したものを使っています。

 YM2608 の ADPCM の制御に自信が無いので、PC88 実機で同じように鳴るか不明。
 ものの資料によると ADPCM 部はウェイト不要と書いてあったので、色々削ってみたのですが激しく不安。
 プチノイズ出まくりでやらないほうがマシということになるとショックで寝込みそうです。

・速度ほか

 4MHzでも問題なく演奏できると思います。NSFより全然軽いとは思いますが余裕があるほどでは無い?
 PSGはやはりというか何か違いますね。独特のシャープさが出ていないというか。SNの波形の歪みに由来するのかも。
 全てのフォーマットの機能・コマンドを試したわけではないのでバグがあるかもしれません。
 同様の動作原理で SMS の OPLL モノ on MSX とか行けそうな気がします。

----------
いっそのこと 88 は子機に徹してホストマシンから垂れ流されてくるレジスタ・データを叩き込むだけという構造にした方が良かったかも、と思ったり。
しかし RS-232C で 19200bpsでも全然足りなさそうなのがネック。

うまい解決策を見つけた、あるいは見かねて改造してみたという方は教えていただけると幸いです。


▲ TOP