同時再生テスト

  • 投稿日:
  • 更新日:2015/02/09
  • by
  • カテゴリ: ,

一応同時再生ができるようになったので、例によりニコニコ動画からムービーを適当に拾ってきて録画してみました。

TVで見ると色が付くのですが、キャプチャで録画したので本来の白黒になってしまっています。

動作環境は以下のようになっています。

  • 割り込みを禁止
  • AVRのクロックはPC本体からの15.9744MHz
  • 画像3バイトに音声1バイトを1組としてデータを構成
  • 処理速度を平均化するため、一切の圧縮なし。音声も1バイト中下位4ビットしか使ってない
  • 256x192ドット/10fpsで、1画像は6144バイト
  • 音声は1fpsあたり6144/3=2048バイト

以上から、音声は20480Hz/4ビットとなるのですが、DMAの関係で、やはり今のところ音質はどうにもなりません。 画面出力を切ると、10kHz程度でもかなりの音質になるのですが。

上記の条件から、転送レートは以下のようになります。

(6144(video) + 2048(audio)) * 10(fps) = 81920 = 80kB/s

やはり拡張スロットからAVRを介して直接入力しているだけのことはあり、かなりの転送レートが出ます。 しかも、バッファを持たない完全ストリーミングなので、PC側のメモリをほとんど消費しません。 プレイヤーのプログラムも、0.5kB程度の容量で実現できています。

以下が、プレイヤーの中心部です。

_play_loop:
	ld	hl, #0xe200	;11 (hl=VRAM position)
 	ld	d, #16		;8 -> 19 (d=counter)
_read:
	ld	a, #AVRSD_READ	;8
	out	(#0x00), a	;13
	nop			;5 -> 26
_read_command_loop:
	in	a, (#0x00)	;13
	cp	e		;5 (e=BUSY)
	jp	z, _read_command_loop ;11 -> 29/loop
	or	a		;5
	jr	nz, _terminate	;8/13
	in	a, (#0x00)	;13 (size L)
	in	a, (#0x00)	;13 (size H)
	ld	b, #0x80	;8 -> 47 (b=loop counter=dec x 384)
_render_loop:
	in	a, (#0x00)	;13
	out	(#0xa1), a	;13 (audio output)
	ini			;19
	ini			;19
	ini			;19
	jp	nz, _render_loop;11 -> 94*128=12032
	dec	d		;5
	jp	nz, _read	;11
	jp	_play_loop	;11
_terminate:

ご覧のとおり、ほとんどinしているだけです。

このセッティングだと、画像:音声=3:1固定のため、fpsを上げると同時に音声周波数も上がってしまいます。 しかし、512バイトセクタ単位で読み込んでいる関係で、他の比率はなかなか難しいものがあります。

それにしても、DMA ON時の音質は何とかならないものでしょうかね...。


こちらもよく読まれています