PC-6001上のPSG(AY-3-8910)で音声を再生するプログラムを作成しました。
既に、marknさんがニコニコ動画などでアップされているものです。MSX などでも実現されています。
でも、まあ、試しに作ってみました。使い方の詳細も同梱しています。再生できるのは、11KHzサンプリング、8bit の WAVファイルです。
pcm.zip
やり方がいろいろありそうですが、参考にしたのは以下のサイトです。
http://www.markn.org/blog/2008/10/psgpcm.html
http://map.grauw.nl/articles/psg_sample.php
動作原理も書かれていますが、概略は以下の通りです。
1)チャネルA、B、C を MIXER(レジスタ7)で オフにする。
2)その後、チャネルA、B、C の音量を高速で変化させる。
MIXER で、それぞれのチャネルをオフにした場合、通常は音が出ない(合成の対象にならない)ようなイメージがあります。
しかし、実はトーンジェネレータの発振周波数を0にして、ベタHを出力するようです。
そのため、音量を高速で変化させると、それが音となって聞こえるわけです。
8bit のサンプリングは、1サンプル当たり 0〜255 の値があります。中心値(無音時)は、128です。このデータをチャネルA、B、C の音量に変換して、音声を再生します。
この変換テーブルをいろいろ試したんですが、結局今回のものに落ち着きました。
今回の変換テーブルは、音量が大きい所は同じ値になっていますので、大音量の再生には向いていません。
WAV ファイルの読み込みには、テープと RS-232C の両方対応しました。テープはあまり実用的ではありませんが、エミュレータを使う時には有効なので。
再生すると、エミュレータではかなりキレイな音声を再生できます。
実機では、LPF やスピーカの関係か、ちょっとイマイチです。
ちなみに今のPC-6001F では、上記の動作原理を再現できていないため、音声はなりません。
そのうちに改定するつもりです。
2012年11月07日
この記事へのコメント
コメントを書く

