FMP7_SDK メモ

///////////////////////////////////////////////////////////////////////////////

SDK を修正しないと 64bit 版でビルドしても動作しない

fmp7_api.h

struct APIINFO {
    int size;
    DWORD pid;
    BYTE* data;//おそらくここが原因
};

64bit版だと data が 64bit になり、値も 32bit より大きくなって 32bit の FMP7.exe
が ReadProcessMemory/WriteProcessMemory に失敗すると思われる

本体のリンカオプションで「高エントロピー64ビットアドレス空間のランダム化(ASLR)
のサポート」を false にすれば動作するようになる(data が 32bit の範囲の値になる)

プラグインのリンカオプションでそれに相当することをしても効果がない

data を VirtualAllocEx で FMP7.exe のプロセス内でメモリ確保するようにすることで
64bit 版でも動作するように対応(fmp7_api.cpp)

///////////////////////////////////////////////////////////////////////////////

FMP7API::MusicLoad 後、MusicPlay するまでグローバルワークが更新されない

曲長(FMP32_GLOBALWORK::Count)を取得するためには一度 MusicPlay を呼び出して直ち
に MusicStop する必要がある

そうするとしばらく待ってからでないと MusicPlay に失敗する
その場合に必要な待ち時間は環境やタイミングにより異なる可能性がある
本プラグインでは 200ms としたが、設定出来るようにした方が良いかもしれない

///////////////////////////////////////////////////////////////////////////////

曲長の取得法が不明

FMP32_GLOBALWORK::Count の10倍がミリ秒単位の曲長に近いことが多いので曲長として
扱うことにしたが、最後まで再生すると1分以上誤差があるデータもある

SetSeek に渡す Count 値とミリ秒単位の位置との関係性も不明
FMP32_GLOBALWORK::CountNow と PlayTime の値も微妙に違う
CountNow はループポイントに戻ると値も戻るが PlayTime との違いはそれだけではない

///////////////////////////////////////////////////////////////////////////////

ループ曲

FMP32_GLOBALWORK::Loop の値が 0 以外になるか Status に FMP32_STAT_LOOP のフラグ
が立ったら2周目以降に入ったことになる

FMP7.exe にループさせない方法がないので GetPosition/GetStatus でループを検知し
たら MusicFadeOut を呼び出して演奏終了(SetRepeat(TRUE) が呼ばれてる場合は除く)

///////////////////////////////////////////////////////////////////////////////

複数曲データの扱い

FMP7.exe は一度に複数の曲データを読み込ませることが出来ない為、再生中に別の曲デ
ータを開くと元データを閉じてしまう
かといって FMP7.exe を複数起動することは出来ない

グローバルな共有メモリにインスタンス数を保存しておき、再生中に別の曲データを
開こうとしたらその時刻と直前の再生位置を共有メモリに書き込んでおく
グローバルな共有メモリにするのは kbrunkpi.exe 経由でプラグインを使っても機能す
るようにする為

再生中のインスタンスは GetStatus でそれを検知したら KPI_STATUS_STOP ではなく
KPI_STATUS_PAUSE を返すことで本体が曲を切り替えないようにする

インスタンスが自身だけになったら最後の情報取得から一定時間経過後、曲データを開
き直して再生を再開する

この場合の「一定時間経過後」というのもどのくらいの時間にすべきかは環境やタイミ
ングによって期待通り動作したりしなかったりするが、期待通り行かなかったとしても
先頭から再開されてしまうか再生に失敗して直ぐに曲が切り替わってしまう程度

///////////////////////////////////////////////////////////////////////////////
