@weather 晴時々曇 @title あさ〜 @category 生活 @s 0630充電開始、1300再起動。 @title GAMDX -Android MXDRV Player @category Android @s エイプリルフールまでにGUI作るとか言っておきながら、やっぱりできなかった・・・(苦笑)。 @ul GAMDX - Android MXDRV Player @s 以下は技術解説。 @ul
  • 15:20:37 #GAMDX について技術解説
  • 15:22:36 #GAMDX Win版のMXDRVg(以下MXDRVg)はFM音源コアをX68sound.dllに頼っていたが、GAMDXではfmgenを使用。単純な技術的興味が理由
  • 15:24:07 #GAMDX MSM6258/PCM8エンジンはX68sound.dllのソースを解体して持ってきている。なおX68sound.dllのソースは事実上制限のないライセンスで使えると判断
  • 15:27:24 #GAMDX 22kHzモードで起動したときはfmgenを22kHzで駆動させているが、44kHz以上のときは「常に62500Hzで駆動して得た波形を、GAMDX側でダウンサンプリング」して目的のレートにしている
  • 15:30:19 #GAMDX X68sound.dllが持っていたLPFも移植しており、「fmgenで生成した音の過剰な高域を抑える」ことができるようになっている。環境設定でON/OFFが可能
  • 15:31:24 #GAMDX LPFをONにすると多少こもって聞こえるが、X68000本来のアナログ音声出力はこんなもん
  • 15:32:36 #GAMDX MXDRVコアはMXDRGgそのまま。演奏できるデータが多少限られるのもMXDRVgそのまま
  • 15:36:32 #GAMDX 以上をNDK(AndroidのネイティブC++環境)で使うためにI/Fを整理したものが、GAMDXのMXDRVエンジンになっている
  • 15:36:48 #GAMDX Winで動く同等の(X68sound.dllを使わない)エンジンも作ってあるが、出すことがあるかどうかは未定
  • 15:38:50 #GAMDX NDK側で生成した波形をそのままNDK内で鳴らせるかどうかを調べなかったので、波形は一旦java側に上げてそちらから鳴らしている
  • 15:40:30 #GAMDX この部分のオーバーヘッドが結構でかい&割り込み制御の問題からか、手持ちの環境だとGALAXY Tabではときどき音声が途切れる現象がある
  • 15:41:34 #GAMDX javaレベルでスレッド優先順位を上げても途切れはなくならないので、実用レベルにするにはやはりNDK内でサウンドデバイスを叩く必要がある気がする
  • 15:42:41 #GAMDX ただ、IS01は同じコードでもほとんど音声の途切れが出ない。やはりこのへんは優秀なのかもというか、メモリが少ないのだけが残念というか(苦笑
  • 15:44:50 #GAMDX 少なくともエミュレータで正常に鳴らないことは確認済みだが、どれくらいのスペックがあればそこそこ鳴るのかはわりと興味あり。webのコメント欄で報告あれば嬉しい
  • 15:47:55 #GAMDX アプリとしての構造はAiCiAから流用しまくりだったりする。非常駐のUI部と常駐のプレイヤーサービス部に分かれた構造とかはそのまんま
  • 15:48:47 #GAMDX とりあえずこれくらいかな…