よもやもダンプ

気が向いた時にアウトプットしておくところ

YM2608のPSGでAtari STの曲みたいなのをしたい

Atari STのPSG(YM2149)とYM2608(OPNA)のPSG部分がほぼ同じなら、同じこともできるはずでしょ、ということでテクニックを1カ月ほど調べてみたのでメモ。
実チップで再現するには知識が足らなすぎるので、作ったVGMファイルをVGMPlayで再生する方法で試した。
未確認情報あり。

Buzzer Effect

矩形波しか出せないPSGで三角波やノコギリ波に近い波形を出す。

YM2149などのPSGはduty比0.5の矩形波を出力する。これはトーンジェネレータで1と0を等間隔で繰り返したものにボリュームレジスタの値を掛け合わせたもの。
更に調べるとWikipediaのPSGの項目にも書いている通り(PSGPCMの原理)、$07ミキサーでトーン発声をoff(1)にすると消音してるように聞こえるけど、実際にはトーンジェネレータで常に1を出力した状態になる。

さらにここでハードウェアエンベロープをかけると($08~0Aの第4ビットを1、$0Dでエンベロープ波形指定)、出力波形がエンベロープ波形そのまま(これもWikipediaエンベロープより)。あとは鳴らす音の周期に合わせて$0B,0Cでエンベロープ周期を設定。

PSGの音量値は対数的に変化するので綺麗な三角形にはならず若干とがった形になる。
エンベロープ周期は細かく設定できないので、低音だけで使うのが多いかんじ?例えばベースとか。
また、ミキサーをoffにせずエンベロープを実行させて、歯抜けみたいな波形を作ることもできる。このときエンベロープの周波数を矩形波のn倍にすることで歪んだ音色ができる。(矩形波の周波数をエンベロープのn倍にする方法もあるけど、こっちはあまり多用されない?)

Buzzer effectを使用している間はPSGの音量は変化できない。ただし矩形波を周波数を$002, $003などの低い数値にセットし同時に鳴らすことによって音量を下げることができる(下がっているように聞こえる)。

Sync-Buzzer

エンベローブ実行中に$0Dのエンベロープ波形を再設定すると、ハードウェアエンベロープがリセットされて新たに実行開始した。
つまりエンベロープを周期的にリセットすると、通常から切り詰められた形のエンベロープを生成され、より複雑な波形を作ることができる。
これがSync-Buzzer。
Taoさんの曲を解析してみると分かりやすい。

Digidrum

ミキサーをoffにしたのち割り込みタイマーによって音量を変化させると、任意の波形を生成することができる。
これでドラム音声のPCMを再生したものをDigidrumという。
つまりMML界隈でいうところのSSGPCM。

SID voice

PSGのduty比を0.5以外に無理やり変化させる。パルス幅変調(PWM)させてSIDのパルス波っぽい音を鳴らす。

$07ミキサーでは普通にトーン発音(0)させる。普通の矩形波の上から音量を0-maxに切り替える音量マスクをかぶせる。
音量マスクは矩形波と同じ周期にする。周期/2で音量を切り替える。初期音量マスク値は0。
矩形波をキーオンしてからduty比分だけ経ってから音量マスクを開始させる。

f:id:RerrahKR:20171213200620p:plain

実際の音量マスクの動きは図の赤丸のみたいに変化する地点で$08~0Aで音量指定をするだけでok。
音量マスクの切り替え時間を変化させるとマスクがずれていってPWMができる。
もっとも、Atari STなどでは切り替えに使う外部タイマーの精度があまり良くなくて、勝手にマスクがずれていくようだ。

逆に実機ではタイマーの精度の問題により、この方法ではduty比を固定できない。 そのため、Buzzer EffectやDigidrumと同じ要領でミキサーをoffにしたのち、タイマーによる音量のon/off操作を行って新たにduty比固定の矩形波を作るらしい。

たぶんSID voiceが一番実装し辛そう。でも一番やってみたいのはこれだったりする。
これができるようになったらFM+SIDみたいな曲が作れそうで面白そうなんだけどなぁ。

レゾナンスフィルタ効果

キーオン直後にBuzzer Effectを一瞬だけ入れて、そのあとパルス波を発生する?
JessさんのMy First Resonant Burpにこの音があるけど、よくわからない。

フィルタ効果?

まだ試してない。
Buzzer Effectで三角波の波形を出力するときに、波形の山の高さが最大になるあたりだけ発音するようにし、それ以外の部分は音量を0にする。
発音する幅を変化させることでフィルタ効果(?)がでる。
TaoさんのAliveのBirth-part2で使っているのを確認。


VGMファイルを一つずつ作って確認するのはつらい。
やっぱり編集ソフトみたいなのが欲しい。

Taoさんが色んなテクニックを編み出したみたいなことを見たので、本人が作った色々エフェクトが掛けれるトラッカーMagic Synthを試しに使ってみようと思ったけれど、マニュアルがなくて使い方が分からず挫折した。
まあ、いきなりなんでもかんでも突っ込まない方がいいのかもしれないけど...

(2019/03/30)
Arkos Tracker 2のおかげでBuzzer effectの使いどころがやっとわかりました。ありがとうございます!

(2021/05/09)
The info from you has been very helpful. Thanks, Zlew!

参考


(2019/03/30: Buzzer effectのトーン+エンベロープの周波数や音量について加筆) (2021/05/09: Sync-Buzzer、SID voiceの修正とDigidrumを加筆)