16bit PCM background player for X680x0/Human68k
.S44/.A44 データをハイメモリに抱えて常駐し、Mercury-UNITでバックグラウンド再生を行うプレーヤーです。 KMD歌詞の簡易表示にも対応しています。
本プログラムは Mercury-UNIT + ハイメモリ専用です。以下が必須になります。
Mercury-UNIT V3 以上 および PCM8PP ドライバ
16MB以上のハイメモリ および 下記いずれかのハイメモリドライバ
動作確認は以下でのみ行なっています。
- X68030 (25MHz) + 060turbo + ハイメモリ128MB + PCM8PP.X + Mercury-UNIT V3 (実機)
- XM6 Type G + X68030 (25MHz) + TS-6BE16ハイメモリ16MB + TS16DRVp.X + PCM8PP.X + Mercury-UNIT V3.5 (エミュレータ)
- XM6 Type G + X68030 (25MHz) + 060turbo互換ハイメモリ256MB + TS16DRVp.X + PCM8PP.X + Mercury-UNIT V3.5 (エミュレータ)
また、以下の実機での動作報告を頂いています。
- X68000XVI + Phantom-X 030モード + 060turbo互換ハイメモリ + TS16DRVp.X + PCM8PP.X + Mercury-UNIT V4 (満開版)
- X68000PRO + Phantom-X 040モード + 060turbo互換ハイメモリ + TS16DRVp.X + PCM8PP.X + Mercury-UNIT V4 (満開版)
S44BPxxx.ZIP をダウンロードして展開し、S44BGP.X をパスの通ったディレクトリに置きます。
PCM8PP.X および ハイメモリドライバが有効になっていることを確認してください。(有効になっていない場合はS44BGP.X起動時にエラーメッセージが出ます)
S44BGP.X は PCM8PP.X のチャンネル1を使用します(チャンネル0ではありません)。PCM8PP.X 常駐時の有効チャンネル数が2以上必要です。
S44BGP.X は OPMタイマ割り込みを使用します。FM音源ドライバーと同時に常駐しないようにしてください。 なお、バージョン 0.4.0未満は Timer-D割り込みを使用していました。
Mercury-UNIT やPCM8PPを利用するアプリケーションとは競合しますので同時に動作させないようにしてください。
テキストエディタでの文書編集などはokですが、既存のファイルビュワーでのスムーススクロールはPCM8PPが停止してしまうことがあります(後述)。
MPU主体のコンパイルやA44エンコード、MP3デコード、画像ビュワーの利用などはokです。
ディスクアクセスを多用するとDMACアクセスが競合してプチノイズが乗る場合があります。RS232Cはおそらく取りこぼします。
何らかの異常状態になった場合、最悪大音量でノイズが再生される可能性があります。ヘッドフォンの利用時は特にご注意ください。
高速ビュワー、ファイラ内蔵ビュワーなどの一部のアプリケーションで特定の操作(特にスムーススクロールの類)を行った際にPCM8PPの再生が停止されてしまう場合があります。
こうしたアプリケーションは低クロック機でも高速で滑らかなテキストスクロールを実現するために、割り込みをブロックしてHSYNCを見ながらCRTCを直接操作してラスタコピー...といった実装になっているものが多く、PCM8PPは処理が妨げられて追いつかないと判断した時に安全をとって自動停止しているのだと思います。
この場合 S44BGP.Xは外部要因でPCM8PPが停止されたと判断し、安全のためPCM8PPをS44BGP.Xからも停止させ、"ABORTED." のメッセージを出力します。
CTRL+XF5 を押すことで次の曲の先頭から再開できます。
なお、拙作のテキストファイルビュワー TXVIEW.X は PCM8PP.X / S44BGP.X の演奏を妨げないような設計と実装になっています。そこまでの高速性は求めないけど安心して PCM8PP.X / S44BGP.X を使いたいという場合はこちらをお勧めします。
S44BGP.X は最下段のファンクションキー表示行の一部にインフォメーションを表示します。ファンクションキー表示を使う他アプリケーションを動作させた場合は競合してそのアプリケーションの期待する正しい表示になりませんのでご注意ください。
これはオプションで無効にすることも可能です。
s44bgp [オプション] <PCMファイル名(.s44|.a44)> [PCMファイル名(.s44|.a44) ...]
-r ... 再生を停止してハイメモリエリアを開放すると共に常駐解除します
-h ... ヘルプメッセージを表示します
-i <file> ... インダイレクトファイルを使用します
-v<n> ... ボリューム指定(1-12, default:8)
-s ... シャッフルモード
-q ... インフォメーション表示・KMD歌詞表示を行いません
-2 ... 22.05kHz mode
-8 ... 8bit PCM mode
-m ... mono mode
コマンドラインで再生対象とするPCMファイル名を指定して起動します。複数指定可能です。ただしサポートしているのは .s44 (16bit big endian raw PCM 44.1kHz stereo)と .a44 (YM2608 ADPCM 44.1kHz stereo) 形式のみです。これら以外には対応していません。
必要に応じて NOZ氏の PCM3PCM.X などのツールで変換してください。
22.05kHzモードはハードウェアとして未対応のMercury-UNIT V3.5未満であってもPCM8PPがその差異を吸収してくれるので利用可能です。
インダイレクトファイルは、1行に1ファイル名を記述したテキストファイルです。長いコマンドラインで複数のPCMファイル名を与える代わりに利用できます。
G:\S44\HOGE1.S44
G:\S44\HOGE2.S44
さらにファイル名に続けてボリューム値も指定可能です。これはコマンドラインで与える -v<n>
と同じ意味になりますが、インダイレクトファイルの場合は曲ごとに細かく指定することができます。
H:\A44\FUGA1.A44,v8
H:\A44\FUGA2.A44,v7
なお、あまり大きいボリューム値を指定するとオーバーフローして音割れの原因になりますので気をつけてください。
常駐完了後再生がすぐに始まります。常駐している間は以下のキー操作に対応しています。
CTRL + XF4 ... 一時停止および再開
CTRL + XF5 ... 次の曲へ
完全に停止させるには常駐解除してください。
s44bgp -r
44.1kHz 16bit stereo 240秒のPCMデータサイズは
44100 * 2(16bit) * 2(stereo) * 240(秒) = 42,336,000
と計算でき、約42MBということになります。これはS44のデータサイズそのものになります。 ADPCM圧縮されたA44であっても、展開した状態でメモリに置くことになるのでフットプリントは変わりません。
そのまま060turboの128MBハイメモリに置くとなると、目一杯使っても3曲までです。
そこで再生周波数を半分の22.05kHz(-2
オプション)とすれば、必要サイズは半分で済むので最大6曲程度まではいけることになります。
PhantomXの384MBハイメモリであれば、アルバム丸ごとも可能かと思います。ただし最初のロード時間はその分掛かります。
TS-6BE16の16MBハイメモリには、これでは1曲すら収まりません。
さらにbit数を半分の8bit(-8
オプション)にすれば、サイズは約10MBとなるので、何とか1曲は置くことが可能です。
なお、RAMDISKに置くわけではないので、ハイメモリを既にRAMDISKとして使っている場合は、当然ながら利用可能な領域は減ります。 PCMデータロード時に利用可能なハイメモリエリアのサイズが表示されますので参考にしてください。
PCMファイルと同じ主ファイル名で、拡張子.kmdのKMD歌詞データファイルが存在した場合、それを自動的に読み込んで歌詞表示を行うことが可能です。
ただしあくまで簡易的な表示で以下のような制限があります。
- y位置は無視されすべて1行に表示される
- 歌詞の消去は行わない
- 曲の出だし500ms分の歌詞表示は行わない(S44BGPのファイル名表示のため)
KMDについて詳しくは KMDED.Xを参照してください。
- PCM8PP.X thanks to たにぃさん
- ADPCMLIB thanks to Otankonas さん
- 060turbo.sys thanks to M.Kamadaさん
- TS16DRVp.X thanks to M.Kamadaさん / はうさん / みゆ🌹ฅ^•ω•^ฅ さん
- XM6 TypeG thanks to PI.さん / GIMONSさん
- xdev68k thanks to ファミべのよっしんさん
- HAS060.X on run68mac thanks to YuNKさん / M.Kamadaさん / GOROmanさん
- HLK301.X on run68mac thanks to SALTさん / GOROmanさん
- 0.4.0 (2023/03/23) ... Timer-Dの代わりにOPMタイマを使うようにした
- 0.3.3 (2023/03/22) ... インダイレクトファイルでボリューム指定できるようにした 想定演奏時間の計算修正
- 0.3.2 (2023/03/21) ... 外部要因で停止された場合、メッセージを出力して自動的に次の曲に進まないようにした
- 0.3.1 (2023/03/21) ... PCM8PP の使用チャンネルを変更
- 0.3.0 (2023/03/20) ... 初版