libcaca

MZ-700でアイマスMADを再生してみよう、の実験報告をみて最近のCPUパワーならリアルタイムに全部できるに違いないってことで、Java+JMFかQTで頑張ろうとしたらどっちも最近のコーデック読めなかった。

気を取り直して調べてたらまんまcacaxineというのがあったので試してみると中間色がくすんで見える。
mpgのデコードがxine、テキスト化がlibcacaという構成らしい。

ソースを調べた限りでは

  • ANSI色の実際のRGB値は端末依存なのにソースに値が埋まってる。
  • 文字' ', '.', ':', ';', 't', '%', 'S', 'X', '@', '8'の10文字の面積が0%,5%,…,50%と仮定。
  • 中間色を文字色と背景色に分解する時、背景色が最近傍色に固定。

って感じ。

  • PuTTYの色設定をlibcacaの設定にあわせる
  • UTF-8を使って表示する文字数増やして10階調→34階調に
  • 使ってるフォントでの各文字の面積をソースに埋め込む
  • 16x16色の全組み合わせから最適な色を選択

で色はそこそこまともに。
libcacaは普通に空間方向に誤差拡散してたのを、MZ-700にならって時間方向に誤差拡散するようにしてみたけどフレームレートを十分確保できてないせいか画質落ちた気がする。全探索止めて速度稼いでからじゃないと駄目そう。

水平同期中の書き換えとか音声再生はどうやっても無理かな〜