« プリフェッチキュー | トップページ | RAMの節約 »

2016年1月 8日 (金)

オカマバー

処理がタイトになっているのは、おそらく音階データではない。音色の切り替え処理だ。
音色データはシーケンシャルに並んでいない。そういった処理の直前に、音色データはキャッシュに入っていない。
だったらプリフェッチキューなんぞ作らず、音色だけキャッシュに入れるという手が考えられる。
音色データは、おそらくファイルの前方に配置され、1音色あたり27バイトある。
ファイルの前方をアバウトにキャッシュに入れれば、簡単に高速化が期待できる。
だがキャッシュを配置するべきRAMは、すでに残り512bytesを切っていて、ヒープの確保さえ危ぶまれる始末だ。
よってこの方法は不可能である。
音色データだけをキャッシュする方法について考える。

(1)音色を次々にキャッシュに入れ、古い音色に上書きする。いわゆるFIFOバッファで、キャッシュのお手本のような作り方だ。
→ただでさえ遅いのにリアルタイムでキャッシュに入れる作業が必要になる。遅れるのは初回だけで、次からは速い。

(2)MDXファイルをROM化前に変換し、キャッシュが必要な音色ほど若い番号になるように変換しておく。これなら若い音色番号だけをキャッシュに入れればよい。
→仕事であればならこの方法がいい。ただし、生MDXをそのまま演奏していないのでMDXプレイヤとは言えない。

(3)MDXを演奏前に解析し、よく登場する音色だけをキャッシュする方法。
→解析に時間がかかるが万能かもしれない。

(1)は、演奏開始からいきなりつまづく曲がある。初回のキャッシュが遅くては使えない。
(2)の方法は、元データを加工するのが反則。では、音色番号の再編だけをリアルタイムに行なうのはどうか。
EEPROMに格納されている曲データを書き換えてやろうというわけだ。反則かどうかなんて、もはや気分の問題(※1)である。
そんなわけで(3)の方法を試してみる。

演奏が間に合わない曲はそんなに多くはないのだが、凝った曲ほど苦しい。
たとえば地元ソフトハウスが作ったとあるゲームのオープニング曲を試してみた。
新田君が作って、DENさんが移植して、DISさんがMDX化した曲だと思うが、元がPC88で演奏されていた曲なので、PCMパート抜きでもわりと聴ける。
Windows上でMDX(曲データ)を解析するプログラムを書いてみた。

音色 = 回数 ->
  Timbre[2] = 16
  Timbre[3] = 48
  Timbre[5] = 280
  Timbre[8] = 21
  Timbre[9] = 15
  Timbre[15] = 65
  Timbre[16] = 8
  Timbre[17] = 48
  Timbre[21] = 37
  Timbre[22] = 204
  Timbre[29] = 8
  Timbre[35] = 6
  Timbre[49] = 8
  Timbre[51] = 8
  Timbre[52] = 48
  Timbre[57] = 5
  Timbre[103] = 11
  Timbre[108] = 6
  Timbre[109] = 43
  Timbre[110] = 36
使用音色 = 20個
音色設定回数 = 921回

んー、20音色かあ。キャッシュが27bytes×20=540byteなんてとても無理だ。
どうみてもRAMが足りない。どうしようかな。まあ、明日、電車の中で考えよう。

※1. 今回作っているサウンドボードをオカマバーとして考える。
曲データは客に相当する。男女どちらの客でも入れるオカマバーを作ろうとしているわけだ。
演奏できないデータは女に相当する。女だから入れない。だからといって店に入る前に性転換するのは反則だと言いたいのだ。
いやいや、男女どっちだって来てください。女だったら店の中で性転換するけどねっていうのはアリなのかナシなのか。
いずれの方法でも反則だと思うのだが、どうだろう。

« プリフェッチキュー | トップページ | RAMの節約 »

お仕事」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63394517

この記事へのトラックバック一覧です: オカマバー:

« プリフェッチキュー | トップページ | RAMの節約 »

最近のトラックバック