じぇみに広野氏が語るレトロゲーム機のPCM再生技術

元コンパイルの開発者、じぇみに広野氏(@jeminilog/@kopandacco)が語る各種レトロゲーム機のPCM再生技術に関するツイートをまとめました。 (1)メガドライブのPCM再生技術 (2)ゲームボーイのPCM再生技術 (3)スーパーファミコンのPCM再生技術 (4)ファミコンのPCM再生技術 続きを読む
49
ぱんどら @kopandacco

SFCのゲームって、ROMベースなのに起動が遅いなーと思った人はいませんか?実はその主原因は多分これ。サウンドのロード時間ですね。遅いんだこれ。

2014-02-07 20:19:14
ぱんどら @kopandacco

また64kbytesのメモリ空間で、プログラムとワークとデータ全部を突っ込むので、けっこう狭い。だからゲームで場面が変わったらサウンドの読み替えは普通にやってると思われます。曲とか音色とか。

2014-02-07 20:19:22
ぱんどら @kopandacco

で、当時のゲームでメモリ大食いの候補だったサンプリング音声データ。こんなの当然、サブCPUのメモリ空間に常駐できるわきゃない。でもカートリッジに入っててもサブCPUからは手が届かない。

2014-02-07 20:19:30
ぱんどら @kopandacco

つまり、使うたびにサブCPUにせっせこ転送してたはずです。ううん知らないけどきっとそう。じゃない、実際私もそうしてたし。

2014-02-07 20:19:40
ぱんどら @kopandacco

さっき言った様にサブCPU空間は余裕なんて言葉に縁のない世界。サンプリングボイスのサイズ分をまるっと確保なんて贅沢はできない。

2014-02-07 20:19:48
ぱんどら @kopandacco

だもんで私の場合は、サウンプリングデータ長を512くらいにでリピート再生を設定し、まず256転送して再生開始。再生が始まったら後半256に続きを書き込み。

2014-02-07 20:19:56
ぱんどら @kopandacco

再生が後半に差し替わったタイミングで今度は前半を書き換え。以後、そろそろ使い終わったかなって頃にそっちのデータを書き換え続ける。実はどこまで再生したのかを知る手段がなかったので、時間管理が命。

2014-02-07 20:20:05
ぱんどら @kopandacco

割と長いセリフでも破綻しなかったので、まあうまくいってたんでしょう。でもこれ、他社はどーやってたのかねえ。某おしゃべりなんちゃらとか、相当長いセリフ喋ってるし。切れ目でリセットしてたのか。

2014-02-07 20:20:14
ぱんどら @kopandacco

てかサブCPUへのアクセス手段はもうちょい何とかしてくれと思った、当時。

2014-02-07 20:20:21

ファミコンのPCM再生技術

ゾルゲ市蔵 @zolge1

アイドルとか声優がファミコンでしゃべる。その一点だけで売るソフトがあっても良さそうなものだが意外にない。普通にデータを作るとガビガビになるとかがネックだったろうか。あるいは、当時は普通にファミコンが売れていたので、あえて飛び道具にリソースを振る必要がなかったためだろうか。

2014-08-23 23:12:17
ぱんどら @kopandacco

@zolge1 前にちょっと触れたようにPCMは配置アドレスの制限が厳しくて、メガロムの恩恵が得にくかった(というかほぼ得られない)のも原因かも。

2014-08-23 23:20:32
ゾルゲ市蔵 @zolge1

@kopandacco やはりそういうことですかね。当の任天堂がマリオ3とかに至るまであんまり活用していないのが不思議でなりません。実はしれっと使ってた方は相当スキルが高かったとかなのかもしれません。

2014-08-23 23:22:51
ぱんどら @kopandacco

需要があるかどうか不明ですがファミコンのサンプリング機能について。手元に資料があるわけじゃないので、ちまちま間違えるかもしれませんが、そこはご容赦を。

2014-08-24 00:27:49
ぱんどら @kopandacco

まずファミコンじゃなくて、サンプリング一般の話。基本は音量を時系列にしたがって記録しています。だから昔の基準だと、結構容量面でハードでした。なおCDは確か16bitを左右別々、頻度を44.1kHzで記録してます。

2014-08-24 00:27:59
ぱんどら @kopandacco

さてデータ量を減らすには3つくらい方法がありまして、頻度(サンプリングレート)を下げるか、記録に使うbit数を減らすか、何らかの圧縮をかけるか。

2014-08-24 00:28:10
ぱんどら @kopandacco

たとえばデータを1bitにしたのがMSXのレイドック。いわゆるガラガラ声。4bitで持ってるのが魔導物語。前回との差分で記録するのがDPCMとすると、それに一工夫してるのがADPCM。アーケードにはよくADPCM処理用チップが積まれていたと思われます。(アーケードぷよ通とかそれ)

2014-08-24 00:28:21
ぱんどら @kopandacco

ファミコンはちと変わってて、波形が上がるか下がるかを1bitで表現する方法で、差分方式の一種です。結構複雑な波形を再現できるので、1bitなのに割と音質がいい。音量小さめになるけど。

2014-08-24 00:28:35
ぱんどら @kopandacco

ところがファミコンでPCMデータを配置できるのって何故か$C000番地以降だけ。メガロムは普通、$8000から$BFFFまでの16KBytesを切り替え、$C000以降は固定で使うので、相性よくありません。別のアドレスを切り替えるメガロムもあるにはあるんですが。

2014-08-24 00:28:46
ぱんどら @kopandacco

だから普通は$C000以降に固定のPCMデータを常駐させる使い方になる。そして大事なプログラムを入れる領域でもあるので、そんなに大量にはPCMで占有できない。実はそのあたりを回避できるカートリッジが存在した可能性はあるけど、あったとしても一般的じゃなさそう。

2014-08-24 00:28:57
ぱんどら @kopandacco

専用でよければ別の音源をカートリッジにのっけた方が話が単純だし。そういうわけでファミコンではあまり長尺のPCMは使われていないのではと。(グラ2のラスボスも専用ボイスはなさそうなので、他のボイスの再生レート下げて流用してるんじゃないかな?と)

2014-08-24 00:29:07
ぱんどら @kopandacco

@zolge1 私の知ってるファミコンでのサンプリングの制約(に至る理由)まとめてみました。何かのハード支援がないと乗り越えられない壁があると思っています。

2014-08-24 00:35:49

(5)PC-9801(BEEP)のPCM再生技術

じぇみに @jeminilog

リクエストがあったので言うけれど、PC-9801のBEEP音でサンプリングをする手法はうちの発明ではなく先行例がある。BEEP音自体は矩形波で、しかも音量が代えられないという性質があり、そのままでは大したことができない。

2014-12-10 20:33:30