2013年04月01日

動画再生(6)

  動画再生の続き。


  PCM音声出力について、とりあえず1回の出力を短くする努力をしてみました。

  1回のPCM音声出力は、AY-3-8910 のチャネルA/B/Cの音量設定する事で実現しています。
  具体的には、以下のようなプログラムになります。


LD A,08H :7
OUT (0A0H),A :11+1  ←AY-3-8910 に設定するポートをR8に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR8にチャネルAの音量を設定する
LD A,09H :7
OUT (0A0H),A :11+1  ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR9にチャネルBの音量を設定する
LD A,0AH :7
OUT (0A0H),A :11+1  ←AY-3-8910 に設定するポートをR10に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR10にチャネルCの音量を設定する

  合計:114クロック


  これを1秒間に11025回する事になります(11025Hzの場合)。
  本来は、さらに全部の命令に 1WAIT 掛かりますが、これは縮める事が出来るとしています。ポート0xA0/A1に対する 1WAIT は減らす事ができません。

  いろいろと考えて、今の所最短なのは、以下の通り。

LD C,0A0H
LD B,08H
LD D,09H
LD E,0AH
OUT (C),B
↑あらかじめ設定しておく。


LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR8にチャネルAの音量を設定する
OUT (C),D :12+1  ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR9にチャネルBの音量を設定する
OUT (C),E :12+1  ←AY-3-8910 に設定するポートをR10に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR10にチャネルCの音量を設定する

 :

LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR10にチャネルCの音量を設定する
OUT (C),D :12+1  ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR9にチャネルBの音量を設定する
OUT (C),B :12+1  ←AY-3-8910 に設定するポートをR8に設定する
LD A,XX :7
OUT (0A1H),A :11+1  ←AY-3-8910 のR8にチャネルAの音量を設定する

  合計:83クロック


  最初は、チャネルA、B、Cの順で設定し、次はチャネルC、B、Cの順で設定する。
  というのを交互に行うと、どのレジスタを変更するかを設定するのを1回分浮かせる事ができます。


  もう少し速くしたいのですが、これが限界っぽいです。


  後は、

  設定チャネルをAとBの2つにする → PCMのサンプリングレートが落ちる事に相当
  サンプリングレートを落とす

  ぐらいしかなく、両方とも音質に関わるので、悩ましい所です。


posted by えすび at 18:11| Comment(0) | HW:動画再生 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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