2011年10月25日

音声出力の設計(1)

 次は音声出力だー、という事で、AY-3-8910 の実装をしました。

 AY-3-8910 のデータシートは、いろいろ探すとありますが、細かい情報がここにありました。

 http://d4.princess.ne.jp/msx/psg/


 YM2149 の情報ですが、基本的にコンパチのPSG です(MSX で使われていたようです)。


 音声のデジタルデータまでは作れますが、ここからスピーカーを鳴らすのは D/A 変換が必要になります。
 Xilinx の評価ボードで、オーディオ出力をしているものがありましたので、それを参考にしました。

 D/A は、デルタシグマD/A を使います(Xilinx の xapp154.pdf を参照)。また、外部にローパスフィルタを接続しました。

フィルタ回路


 xapp154.pdf には、違う値が書いているんですが、手持ちの部品がなかったため、適当に変えてしまいました(^^;

 一応、値の選定として、フィルタの計算は、以下のHPを使いました。

 http://sim.okawa-denshi.jp/Fkeisan.htm

 カットオフ周波数は 7KHz ほどなので、このくらいでいいかと。
 また、直列の抵抗値は、ベタHになった時にも問題がないかなー、ということで。


 実際に作った回路です。

音声出力回路

 DE0 のボードの上に乗っている小さな基板がそれです(奥の赤いのが、PC-6601SR本体です)。


 外付け回路が出来たので、後はAY-3-8910 を実装するだけです。


 AY-3-8910 のデータシートにかなり詳しく動作が書かれているので、その通りに実装するだけで、あっけなく音声が出力されました。
 データシートに書かれていない内容(実際に出力する電圧だとか、ノイズの生成多項式など)に関しては、上のHP を参考にしました。


 それぞれ個々の音声に関しては実装が簡単に出来るのですが、それを同時に出力する時の事がよく分からなかったので、実機を参考にしました。

 実機を参考にした結果、分かったのは次の通りです。

・1チャネルで、音声とノイズを両方発生させると、個々の音量が減る。
 例えば、SOUND 0,0:SOUND 1,0:SOUND 6,0 としておいて、TONE-A を発生、ノイズを最高周波数(殆ど聞こえない)としておく。
 それからSOUND 7,&HFE とすると、TONE-A だけが鳴るが、その後にSOUND 7,&HF6 とすると、TONE-A の音量が小さくなる。

 → 多分、TONE とノイズの合計値が、最大値になっているようだ。

・1チャネルを鳴らした時と、3チャネルを同時に鳴らした時の、それぞれのチャネルの音量は変わらない。

 → これは、AY-3-8910 で出力信号を直結していることからも、この結果は正しそうである。



 実際の音声はここには載せませんが、動かしたソフトは実機と同じような音が鳴っています(ちょっとびっくりです)。


 いろいろと試しましたが、今の所、問題があるのはポリス&ギャングだけです。

 ポリス&ギャングは、主メロディーと効果音のバランスが、実機とかなり違います。何となく原因に心当たりはありますが。


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

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

この広告は90日以上新しい記事の投稿がないブログに表示されております。