-------------------------------------------------------------------------------
【  名  称  】 SNESAPU SPC Decoder
【ファイル名】 kbsnesapu.kpi
【バージョン】 4.24
【対応拡張子】 spc
【 Platform 】 x86(32bit) のみ / x64(64bit) なし
【 公 開 日 】 2024/03/16
-------------------------------------------------------------------------------

【概要】

degrade-factory(sunburst 氏) 制作の改良版 SNESAPU.DLL の再生コアを用いた
SPC 再生プラグインです。対応拡張子は SPC です。

改良版 SNESAPU.DLL については

    http://dgrfactory.jp/

を参照して下さい。SNESAPU.DLL の最新版も公開されています。
kbsnesapu.kpi に同梱している SNESAPU.DLL は本プラグイン公開時点での最新版です。

【Script700】

Script700 に対応しています。
Script700 ファイルの検索順序は SNES SPC700 Player と同じとなっています。

SPC ファイル名.700 => SPC ファイル名.7se => 65816.700 => 65816.7se

の順に検索します。

コマンド(#i/#it/#ib) による外部スクリプトファイルにも対応しています。
スクリプトファイルを使用した SPC ファイル群をアーカイブしたものの再生にも完全
対応しています。

【XID6】

XID6 のタグ取得に対応しています。XID6 と ID666 の両方に情報が書き込まれている
場合、XID6 の方が優先されます。

イントロ、ループ、フェード、終了時間、ループ回数も実際の演奏に反映されます。
ループに有効な値が書き込まれていてループ回数が書き込まれていない場合、本体の
「デフォルトのループ回数」が適用されます。

なお、KbMedia Player における「ループ回数」は

・イントロを含めて1通り再生し終わるまで再生した場合をループ１回
  =(XID6 におけるイントロ時間)

として数えます。XID6 のループ回数は上記を回数に含めませんので、本体への通知は
XID6 に書き込まれた値に +1 されます。

従って例えば本体の「デフォルトのループ回数」が「3」のときと同じ結果になるように
XID6 にループ回数を書き込む場合は「2」にする(-1 する)必要があります。

XID6 に音量倍率が含まれていれば再生にも反映されます。リプレイゲインとして本体に
通知することも出来ます。

詳細は「ツール」->「環境設定」->「プラグイン」タブで kbsnesapu.kpi を選択後、
「設定」ボタンで表示されるダイアログを参照して下さい。


【改良版 SNESAPU.DLL】

kbsnesapu.kpi は degrade-factory(sunburst 氏) 制作の SNESAPU.DLL を使用してい
ます。SNESAPU.DLL はプラグインに同梱させて頂いています。

SNESAPU.DLL の著作権は sunburst 氏が保有しています。

-------------------------------------------------------------------------------

【更新履歴】

Version 4.24(2024/03/16)

・SNESAPU.DLL を 2.20.1.8272(2023/12/03) に更新
・SNESAPU.DLL 2.20.0 以降の新サンプリングレートコンバータのノイズ対策
　・実機エコー/FIR 処理 が true で再生周波数が 32001Hz 以上のとき
　・KPI_MEDIAINFO::dwUnitSample に 10ms 相当の値(44100Hz なら441)を渡すことで
　　必ず EmuAPU を 10ms 単位で指定する

/*---------------------------------------------------------------------------*/

Version 4.23b(2022/10/11)

・SNESAPU.DLL を 2.19.4.7822(2022/10/05) に更新
・プラグイン自体に変更はないのでバージョンは変更せず

/*---------------------------------------------------------------------------*/

Version 4.23(2022/09/16)

・SNESAPU.DLL を 2.19.3.7744(2022/07/02) に更新
　・本プラグイン公開時点での最新版は 2.19.4.7818 だがβ版なので同梱せず
・設定に関する以下の修正
　・「同梱の SNESAPU.DLL を使う」と「SNSAPU.DLL のパス」を追加
　　・「同梱の SNESAPU.DLL を使う」が false のときに「SNESAPU.DLL のパス」で
　　　指定した場所の DLL を使う
　・Temporary セクションの「エコー作業メモリ書き換え」を廃止
　・General セクションに「実機エコー/FIR 処理」を追加
　　・キー名とセクションを変えただけで「エコー作業メモリ書き換え」と同じ
　・ Temporary セクションに以下を追加
　　・「左右拡散度」
　　・「フィードバック反転度」
　　・「エンベロープ速度を同期」(SNESAPU.DLL v2.19.3以降)
　　・「チャンネルミュート」と「チャンネルノイズ」
　　　・8桁の文字列で指定、オフにするチャンネルを 0、オンにするチャンネルを 1
　　　　(例：10100010)
　　　・0 以外の数字は 1 と見なす、数字以外の文字は 0 と見なす
　　　　(102A0000 => 10100000)
　　　・8桁ない場合、足りない桁は 0 と見なす
　　　　(0011 => 00110000)

/*---------------------------------------------------------------------------*/

Version 4.22(2021/04/18)

・snesapu.dll を 2.18.3.7258(2021/03/14) に更新

/*---------------------------------------------------------------------------*/

Version 4.21(2019/10/03)

・snesapu.dll を 2.18.0.6694(2019/08/10) に更新

/*---------------------------------------------------------------------------*/

Version 4.20(2017/04/09)

・コンパイラを VS2017 に変更

/*---------------------------------------------------------------------------*/

Version 4.19(2017/01/09)

・正式版公開に向けての細かい修正(ドキュメント/ソースコードの整理等)

/*---------------------------------------------------------------------------*/

Version 4.18(2016/09/05)

・snesapu.dll を 2.17.7.5616(2016/08/27) に差し替え

/*---------------------------------------------------------------------------*/

Version 4.17(2016/08/16)

・v2.80beta21 のプラグイン新機能に対応
　・General/Temporary 各セクションの説明を追加
　・Temporary セクションの表示名を「一時的な設定」に変更
　・著作権表示で改行を使用

/*---------------------------------------------------------------------------*/

Version 4.16(2016/08/01)

・v2.80beta19 のプラグイン仕様に対応(インターフェースのみ)

/*---------------------------------------------------------------------------*/

Version 4.15(2016/07/25)

・v2.80beta18 の新プラグイン仕様に対応
・GUID を元に設定の保存場所が決まるようにした
・Temporary セクションを初期値に戻す設定を修正
　・戻すなら24時間後固定に変更

/*---------------------------------------------------------------------------*/

Version 4.14(2016/07/11)

・コンパイラを VS2015 update3 に変更
・snesapu.dll を 2.17.6.5532(2016/05/29) に差し替え
・IKpiConfig(本体による設定画面の自動生成)に対応(v2.80beta17 以降)
　・環境設定->プラグイン->kbsnesapu.kpi 選択時に「設定」ボタンクリック
・各種設定項目を追加
　・補間処理
　・シーク制御(シーク速度とシーク後の演奏の精度の調整)
　・リプレイゲイン(音量値をリプレイゲインとして通知)
　・音量既定値(XID6 に音量値がない場合の既定値)
　・XID6 の使用/不使用(使わない場合は音量既定値)
　・再生周波数
　・ローパスフィルタ
　・サラウンド無効
　(ここから下は常用には適さないため指定時間経過後に初期値に戻す)
　・再生速度(再生位置の進み方が速度と連動しない)
　・音程
　・BASS BOOST
　・過去の ADPCM 互換
　・左右変転
　・逆位相サラウンド強制
　・エコー無効
　・ピッチモジュレーション無効
　・ピッチベンド無効
　・FIR フィルタ無効
　・エンベロープ無効
　・ノイズ無効
　・エコー作業メモリ書き換え
・以下の設定の初期値を変更(そのため初期設定値で v4.13 とは音質が異なる)
　・補間処理を 高精度ガウス分布補間 => シンク関数補間
　・ローパスフィルタを false => true (snesapu.dll 制作者の推奨値)
　・サラウンドを true => false (snesapu.dll 制作者の推奨値)

/*---------------------------------------------------------------------------*/

Version 4.13(2016/06/12)

・xid6 読み込み時に落ちることがあるのを修正

/*---------------------------------------------------------------------------*/

Version 4.12(2016/03/13)

・snesapu.dll を 2.17.5.5391(2016/02/27) に差し替え

/*---------------------------------------------------------------------------*/

Version 4.11(2016/01/31)

・30秒以上先にシークする場合は残り30秒までは高速シーク、残り30秒は低速シーク
　を行うように仕様変更（今までは常に高速シーク）
・Script700 の #i/#ib コマンドで日本語のファイル名を指定出来ないのを修正

/*---------------------------------------------------------------------------*/

Version 4.10(2016/01/18)

・id666 の方に書き込まれた曲長とフェード時間を IKpiTagInfo に通知するように
　した(xid6 の方の値が使われる場合は (ignored) を付加)
・id666 の default channel(enable/disable) を通知するのをやめた

/*---------------------------------------------------------------------------*/

Version 4.09(2016/01/11)

・新しいプラグイン仕様に対応(v2.80beta5以降専用)
　・本体のバグのため、v2.80beta4 以前では使用不可
・アーカイブ内の Sript700 にきちんと対応(新仕様の機能を使用)
　・Script700 ファイル内で別の Script700 ファイルを指定する場合(#i,#it,#ib コ
　　マンド)にも対応
　・今までも対応していたが、本体側で Script700 ファイルの中身を調べていた
・フェード時間が反映されるようになった
・xid6 のタグ取得に対応
　・ID666 と被る情報は xid6 を優先して取得
　・イントロ、ループ、フェード、終了時間、ループ回数の取得に対応し、実際の再
　　生にも反映される(新仕様の機能を使用)
・バイナリ形式の ID666 を常にテキストと見なしていたのを修正
　・確実な判別方法が(おそらく)ないため、稀に間違えることがある
・その他、詳細な情報表示に対応

/*---------------------------------------------------------------------------*/

Version 4.08(2015/10/25)

・プラットフォームツールセットを Visual Studio 2015 - Windows XP (v140_xp) に
　変更(Windows XP でも動作するように)

/*---------------------------------------------------------------------------*/

Version 4.07(2015/10/18)

・コンパイラを VisualStudio2015 に変更

/*---------------------------------------------------------------------------*/

Version 4.06(2015/09/06)

・バージョン番号を飛ばして 4.06 にした
　・kbspc.kpi を開発終了して kbsnesapu.kpi を公開したときに 4.xx に変わったと
　　見なすことに
　・kbspc.kpi を含む古いバージョンから上書きしたときに kbspc.kpi よりも優先的
　　に使われるようにするため
・snesapu.dll を 2.17.4.5265 に差し替え

/*---------------------------------------------------------------------------*/

Version 0.05(2015/08/30)

・snesapu.dll を 2.17.4.5265 に差し替え

/*---------------------------------------------------------------------------*/

Version 0.04(2015/07/12)

・snesapu.dll を 2.17.4.5209 に差し替え
・GetSNESAPUContextSize/GetSNESAPUContext/SetSNESAPUContext に対応
　・KMPMODULE::dwReentrant = 1 になり、クロスフェード再生時や SPC を再生中の
　　曲長計算のパフォーマンスが向上

/*---------------------------------------------------------------------------*/

Version 0.03(2015/07/05)

・snesapu.dll を degrade-factory(sunburst 氏) 制作の改良版に差し替え
　(バージョンは2.17.3.5160)
・常に 32bit float で出力するようにした
・再生周波数要求に最大192000Hz、最小8000Hz まで対応
　（0 が渡された場合は44100Hz）
・Script700 への対応を try700 ではなく SetScript700 及びその関連コールバック
　関数で実装するようにした

/*---------------------------------------------------------------------------*/

Version 0.02(2004/07/18)

・41568k 氏による改良版 SNESAPU.DLL を同梱（Script700 に標準で対応）
・シーク時にノイズが入ることがあるのを修正

/*---------------------------------------------------------------------------*/

Version 0.01(2004/07/05)

・初版

-------------------------------------------------------------------------------
Kobarin(hidkob@pb.highway.ne.jp)
https://kobarin.sakura.ne.jp/
