Programmable Sound Generator
Programmable Sound Generator(プログラマブル・サウンド・ジェネレーター、PSG)は、音を作り出す電子回路の一種。狭義には、ゼネラル・インスツルメンツ(GI)のAY-3-8910および相当品。広義には、それらと基本原理が同じ回路の総称。単一の音源チップないし、より多機能なチップの機能の一つとして供給される。
複数の基本波形(AY-3-8910では矩形波×3+ホワイトノイズ)を合成してさまざまな音色を出し、エンベロープ・ジェネレーターでADSR(立ち上がりや余韻などのパターン)を変化させる。
1980年代のアーケードゲームやパソコン、携帯用ゲーム機に採用された。
目次
概要
本来のPSGは、GI社(現在はモトローラが吸収合併)およびGIからスピンオフしたマイクロチップ・テクノロジーのAY-3-8910、およびその後継製品のAY-3-8912 / AY-3-8913相当品を指す。
テキサス・インスツルメンツ(TI)のSN76489も同様に扱われることが多い。しかし仕様は全く異なっており、本来は区別される。SN76489は厳密にはPSGではなくDigital Complex Sound Generator(DCSG)である。
また、ヤマハの一部のFM音源チップ(YM2203/YM2608など)には、Software-Controlled Sound Generator(SSG)と呼ばれるAY-3-8910互換機能が搭載されている。同社はこのSSG部分の単体チップであるYM2149を製品化しており、これはAY-3-8910相当機能に加え、AY-3-8910のTEST2端子(26番ピン)をSEL#(#はローアクティブを示す)に変更し、この端子をLowレベルにすることによって、発音基準周波数を外部入力周波数の2分周に設定できるように変更したものである。さらに内部的な音量が32段階(AY-3-8910は15段階)になっており、ハードウェアエンベロープが滑らかになっている。
東芝もSSG互換品をPSC(Programmable Sound Controller)という名称で設計しており、ゲートアレイなどの特定用途向けLSIに組み込まれて使用された。MSX-ENGINE、MSX-ENGINE2などがこれにあたり、ハードマクロセル名はSM7766A[1]である。ハードウェアエンベロープの周期などがAY-3-8910とは異なる。
広義では、矩形波の出る安価なチップ音源をまとめて「PSG」と呼ぶことがある。
AY-3-8910のサンプリングレート「111.86kHz」という数値は、今日の基準(音楽CDで44.1kHz)においても高い性能を誇る。
AY-3-8910の仕様
代表的なPSGチップであるAY-3-8910は次のような仕様である。
- 矩形波発生装置 3系統(音量16段階、周波数4096段階8オクターブ、デューティー比1:1固定)
- ノイズ発生装置 1系統(擬似乱数雑音 = 白色雑音)
- エンベロープ発生装置 1系統
- ミキサー
- 8bit汎用入出力ポート×2(ジョイスティック、タッチパネルなど)
- ATARI仕様の台形9ピン(D-Sub)インターフェース実装に用いられることが多かった。
- AY-3-8913では、この入出力ポートが省略されている。
- 備考
- チャンネルごとに、出力のモードを「ミュート」「矩形波を出力」「ノイズを出力」「矩形波とノイズをmix出力」から選べる。
- 出力系統は3系統しかないため、mix出力モードでは矩形波とノイズの音量は独立制御することはできず、同じ値がセットされる。
- また、MIXモードは合成されて出力されているわけではなく、内部的には高速にトーンとノイズが切り替わっているため、双方の出力音は濁ってしまう。
- チャンネルごとに、出力のモードを「ミュート」「矩形波を出力」「ノイズを出力」「矩形波とノイズをmix出力」から選べる。
AY-3-8910相当品を搭載した主なコンピューター
- PC-6001・PC-6001mkII
- PC-6601
- X1シリーズ(X1F以降のモデルからYM2149)
- FM-7(一部ロットはAY-3-8913(8bit汎用入出力ポートなし))
- FM-77(FM-77L2にはFM音源:YM2203(OPN)も搭載)
- MSX
- MZ-5500
SSGを搭載した主なコンピューター
FM音源:YM2203(OPN)/YM2608(OPNA)を搭載
- PC-6001mkIISR
- PC-6601SR
- PC-8001mkIISR
- PC-8801mkIISR以降のPC-8800シリーズ
- PC-9800シリーズ(オプション: PC-9801-14(PSG: TMS3631)、PC-9801-26K(OPN)、PC-9801-73・PC-9801-86(OPNA))
- MZ-2500
- MZ-2861
- FM-77L2
- FM77AVシリーズ
- MSX MSX2以降の多くのモデルでは統合チップMSX-SYSTEMやMSX-SYSTEMII、MSX-ENGINE2をコアとして使用しているため、[2]それ以外の実装の同機種と比較し、エンベロープ周期が異なり、出力される音が異なる。
AY-3-8910の互換チップ
SN76489の仕様
SN76489(DCSGとも呼ばれる)のPSGとの大きな違いは、矩形波チャンネル3つ+ノイズ発生チャンネル1の合計4チャンネルで構成されているところである。PSG(SSG)はその構造上ノイズの音量制御が3つのチャンネルのどれかに依存してしまうが、SN76489(やpAPU)にはこの制限はなく、独立したノイズチャンネル単体で自由に音量制御できる。また、ハードウェアエンベロープも持たない。
通常音色はデューティー比50/50のみであるが、3チャンネル目を同期ノイズ出力にすることでデューティー比6.25/93.75の音となる。トーン周波数に対し音程は半音ずれるが、ギターに似た音色となるため、若干弱い低音部をカバーする事が出来た。
SN76489を搭載した主なコンピューター
- MZ-1500(同時6音):SN76489×2
- 2つのチップは別々に出力され、左右の出力とすることでステレオと称していた。
- MZ-800:SN76489AN
- セガ(初代~マスターシステム、メガドライブ、ゲームギア):SN76489
- M5(ゲームパソコンM5):SN76489A
- パソピア7(同時6音):SN76489A×2
- SMC-777:SN76489
- IBM JX:SN76489A
ファミコン音源(pAPU)の仕様
ファミリーコンピュータに搭載されている音源は次のような仕様である。
- パルス波(矩形波)発生装置 2系統(デューティー比3:1、1:1、1:3、1:7切り替え)
- 三角波発生装置 1系統(4bit波形、音量は仕様上固定だが、DPCMと絡んだバグに近い挙動が存在し、これを利用するといじることが出来る)
- ノイズ発生装置 1系統(擬似乱数雑音・短周期ノイズ切り替え、周波数変更が可能。ただし、最初期型(コントローラのボタンが四角いゴム)のファミコンでは短周期ノイズは出せない)
- DPCM 1系統
- ミキサー
この音源はファミコンのCPU RP2A03(6502カスタム)に組み込まれた機能の一つであり、pAPU(pseudo Audio Processing Unit)と呼ばれている。
pAPUのパルス波発生装置はゲームボーイ、ゲームボーイアドバンスにも搭載され、矩形波だけでなくデューティー比1:7パルス波などの独特な音色も出せる表情の豊かさがPSGの矩形波との大きな違いである。
PSGと誤解されやすいその他の音源
日本電気ホームエレクトロニクスから発売された家庭用ゲーム機PCエンジンではスペック表にPSGとの記載されることがあるが、実際に使われているのは波形メモリ音源(変調機能つき)であり、一般的に言われる本項で説明のPSGとは異なるものである。
また、ナムコの初期アーケード作品で使われている音源も「ナムコPSG」という俗称が広まっているが、これも正しくは波形メモリ音源であるため、PSGではない。
PSGによるPCM再生
PSGによってPCMを再生する技法が存在し、PSGPCMやSSGPCM等と呼ぶ。DACを持たないパソコン向けのソフトウェアで使われることがあった。
ただし、ボリューム調節機能を使っているためDACとしては非線形(指数的)であることなどから、再生音声の品質は悪く、「無線による交信を演出する」といった演出など、用途は限定されていた。
1Chのみを用いた出力は解像度の低いものであったが、実際の出力を計測し、そのテーブルとPSG 3Ch各々のアッテネータを組み合わせて利用することで、音質の改善を試みるほうが生み出された。ソフトウェアメーカーによる実装もいくつか見られたが、個人が作成した同様のプログラムでは、Oh!FM 1990年4月号に掲載された戸田浩による「しゃべるんどすえ」のドキュメントと音量テーブルは、その後、同様のプログラムの作成の参考にされた。[4]
現在では、上記の方法に加え、出力特性に合わせて再生するデータを変換することで、よりよい出力にする技法も開発され、S/N比が比較的高い再生を可能にしているソフトウェアも存在している。指数性のために音量域によって解像度にばらつきが出るが、平均すると、9bit程度の解像度を持つ出力を行うことが可能である。
PSGPCMの原理
PSGで発声されるのは矩形波である。これはロー(=0)とハイ(=1)の2値しかとらない。これに音量レジスタ(4bit)の値を掛けたものが1チャンネル分の出力である。
AY-3-8910相当品では、あるチャンネルの発声を停止すると矩形波出力はハイ(=1)で固定される。従って、そのチャンネルの出力は、音量レジスタそのものとなる(1×音量レジスタ=音量レジスタ)。
この仕様を利用し、発声を停止した状態でそのチャンネルの音量を操作することで、PSGをDACとして利用するというのが大まかな原理である。
エンベロープ
一般的なPSGチップではエンベロープ機能により、時間的な音量変化をハードウェアレベルで自動的に行える。エンベロープパターンには一般的な減衰波や、周期的な鋸波、三角波など、8種類が用意されており、周期も自由に設定できる。しかし、エンベロープジェネレータは1系統しか用意されていないため、3チャンネルで楽曲を演奏しようものなら、エンベロープが同期してしまい、まったく聞くに堪えない物になってしまう上、音量の調節も不可能である。そのため、ソフトウェアの側でこまめにPSGの各チャンネルの音量レジスタを変更して、ソフトウェアレベルでエンベロープを再現する技術があった。この手法は「ソフトウェアエンベロープ」と呼ばれることがある。
ハードウェアエンベロープ機能の応用として、周期的なタイプのエンベロープパターンを「音量変化としてではなく楽音の波形として」選択し、エンベロープ速度(周期)をその楽音の音程とみなして設定することで、PSGの通常の発音方法では出せない鋸波や三角波を出すことができる。ただしエンベロープ周期を設定するレジスタ幅は狭く、楽音の音程を表現するには精度が低いため「音痴」になりやすい。また原理上、こうして発音した音の音量制御はできない。この手法はYM2203やYM2608のSSG音源部でも使用が可能である。
脚注
- ↑ 東芝データブック「スーパーインテグレーション(S.I.)スーパーマクロセルライブラリ1992(非売品)462D1AA」より
- ↑ 前述のとおり、正しくはPSC、ハードマクロセル名はSM7766A。
- ↑ [1]
- ↑ Oh!X 1995年12月号 BREEZEには参考文献として明示されている。