@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 とりあえずこれくらいかな…