2012年11月07日

PCM再生

  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 では、上記の動作原理を再現できていないため、音声はなりません。
  そのうちに改定するつもりです。

posted by えすび at 20:38| Comment(0) | P6解析:音声周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。