-------------------------------------------------------------------------------
【  名  称  】 MAD - MPEG Audio Decoder
【ファイル名】 kbmad.kpi
【バージョン】 0.27
【対応拡張子】 mp1/mp2/mp3/rmp
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2017/04/09
-------------------------------------------------------------------------------

【概要】

MAD - MPEG Audio decoder(libmad) をベースにした MP3 デコードプラグインです。
対応する拡張子は MP1/MP2/MP3/RMP です。

MAD については

    http://www.underbit.com/products/mad

を参照して下さい。演算精度を重視した整数デコーダです。
整数デコーダですが、64bit float で出力します。演算精度は 24bit です。
64bit float で出力するのは、本体の実装上その方が効率的に動作するからです。

【kbmad.kpi と kbmpg123.kpi】

本体に標準で同梱されているもう１つの MP3 プラグイン(kbmpg123.kpi) と音質が異な
るようですが、私には違いが分かりません。再生時の CPU 負荷は kbmad.kpi の方が
kbmpg123.kpiよりも高めです。

音質と負荷以外は kbmpg123.kpi も kbmad.kpi もほぼ同じです。後述の LAME タグ情
報通知も同じですので、どちらを使うかは好みで決めて下さい。

kbmad.kpi を使う場合は、「ツール」->「環境設定」->「プラグイン」で kbmad.kpi
よりも上に表示されているプラグインのうち、対応拡張子が MP3 のものをすべて無効
にして下さい。

kbmad.kpi は kbmpg123.kpi よりもプラグインの使用優先度が低くなっていますので、
何も設定しないと kbmpg123.kpi の方が使用されます。

kbmpg123.kpi と kbmad.kpi はともに LAME タグを認識し、ギャップレス再生に対応し
ています。

【LAME タグ】

VBR タグと LAME タグの詳細情報を KbMedia Player に通知します。情報は「ドキュメ
ント」部に表示されます。

通知する情報は以下の通りです。

　・header   (Xing/Info/VBRI)
　・revision (LAME Tag revision 0, LAME Tag not found, VBRI version 1)
　・encoder  (LAME3.xx, unknown)
　・quality  (50 (V5 and q0) etc...)
　・delay    (VBRI の場合だけ表示)
　・method   (cbr, abr, vbr mt etc...)  (以下、LAME Tag を含む場合だけ表示)
　・lowpass  (19000Hz etc...)
　・replaygain track peak (本体に通知。プラグイン側では処理しない）
　・replaygain track gain (本体に通知。プラグイン側では処理しない）
　・replaygain album gain (本体に通知。プラグイン側では処理しない）
　・nspsytune   (yes/no)
　・nssafejoint (yes/no)
　・nogap continued    (yes/no)
　・nogap continuation (yes/no)
　・ATH type (0 〜 15)
　・bitrate (minimal (-b) bitrate 32 etc...)
　・encoder delay (xxxx samples)
　・padded at end (xxxx samples)
　・noise shaping (0/1/2/3)
　・stereo mode   (mono, stereo, dual, joint, force, auto, intensity...)
　・unwise settings (yes/no)
　・source sample freq (32kHz or smaller, 44.1kHz, 48kHz, higher than 48kHz)
　・mp3 gain      (-1.5dB etc...)(表示のみ対応。再生には不使用)
　・surround info (none, DPL/DPL2 encoding, Ambisonic encoding)
　・preset flags  (01000011100) (11 桁のフラグ値の表示)
　・music length  (XXXX bytes)
　・music CRC     (タグに書き込まれた値、実際の値は非表示)
　・info tag CRC  (タグに書き込まれた値、実際の値は非表示)

LAME タグにリプレイゲイン情報が含まれる場合は本体に通知します。ただし、ID3v2 や
APE Tag にもリプレイゲイン情報が含まれる場合、プラグインが通知した情報とどちら
が優先されるかは KbMedia Player 本体のバージョンによります。

Version 2.60 ではプラグインが通知した情報を、2.61 では ID3v2/APE Tag の方を優先
します。それ以降の将来のバージョンでどうするかは未定です。

【ライセンス】

kbmad.kpi には Underbit Technologies, Inc 作の libmad のソースコードが組み込ま
れています。ベースとした libmad のバージョンは 0.15.1b(2004/2/17) です。

libmad は GPL ですので、kbmad.kpi も GPL に準拠します。
ソースコードが欲しい方は Kobarin のホームページからダウンロードして下さい。
もし最新のソースコードがない場合は催促して頂ければ差し上げます。


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

【更新履歴】

Version 0.27(2017/04/09)

・コンパイラを VS2017 に変更

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

Version 0.26(2017/01/09)

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

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

Version 0.25(2016/09/12)

・本体が持つタグ取得を以下の順で呼ぶように変更
　・ID3v2 => ApeTag => RIFF => Lyrics3Tag => ID3v1

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

Version 0.24(2016/08/22)

・v2.80beta23 のプラグイン仕様に対応
・本体が持つタグ取得を以下の順で呼ぶようにした
　・ApeTag => ID3v2/v1 => RIFF
　・↑で本体がリプレイゲインを取得した場合、LameTag から得たリプレイゲインが
　　あっても適用されないようにした
　・v2.80beta22 以前では本体側でどちらを優先するかを決めていた
　　(LameTag の方が優先度が低かったので結果は変わらないが)

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

Version 0.23(2016/08/01)

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

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

Version 0.22(2016/07/11)

・コンパイラを VS2015 update3 に変更
・v2.80beta17 のプラグイン仕様に対応(インターフェースのみ)

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

Version 0.21(2016/03/13)

・細かい修正(alpha を外す、GUID 付加等)

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

Version 0.21alpha(2015/11/30)

・2.70alpha8 のプラグイン仕様変更に対応

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

Version 0.20alpha5(2015/10/25)

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

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

Version 0.20alpha4(2015/10/18)

・コンパイラを VisualStudio2015 に変更
・64bit 版を作成

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

Version 0.19alpha(2015/09/24)

・KbMedia Player Version 2.70alpha の新プラグイン仕様に対応
　・アーカイブ形式によってはテンポラリファイルを作成せずに再生可能

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

Version 0.18(2015/09/15)

・LAME タグに書き込まれている LAME のバージョン取得の方法を変更
　・LAME 3.100alpha でエンコードされた曲の情報取得が出来るようになった

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

Version 0.17(2015/09/06)

・LAME3.90 未満でエンコードされた MP3 が VBR でも CBR と表示されるのを修正
・LAME タグに書き込まれたリプレイゲイン情報を本体に通知するようにした
　・リプレイゲインの処理は本体側で行う

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

Version 0.16(2015/08/30)

・VBRI の delay 値を反映させるようにした
　・vbri delay - 1152 - 529 を encoder delay 値と見なす
　・末尾の捨てるべきサンプル数が分からないのでギャップレス再生は不可

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

Version 0.15(2015/08/15)

・VBRI ヘッダを含む VBR の演奏時間取得が正確になった
　・ギャップレス再生には未対応
　・ギャップレス再生に使えそうな情報(delay) があるが、解釈の仕方が不明
・kmp_GetTestTagInfo で以下の情報を通知するようにした
　・ビットレート(CBR/VBR/ABR を含む)
　・MPEG (MPEG 1.0 layer 3 etc...)
　・Stereo Mode (stereo/joint stereo/dual channel/mono)
　・VBR Tag の各種情報
　　・header (Xing/Info/VBRI)
　　・revision (LAME Tag revision 0, LAME Tag not found, VBRI version 1)
　　・encoder  (LAME3.xx, unknwon)
　　・quality  (50 (V5 and q0) etc...)
　　・delay    (VBRI の場合だけ表示)
　　・method   (cbr, abr, vbr mt etc...)  (以下、LAME Tag を含む場合だけ表示)
　　・lowpass  (19000Hz etc...)
　　・replaygain track peak (表示のみ対応。再生には不使用）
　　・replaygain track gain (表示のみ対応。再生には不使用）
　　・replaygain album gain (表示のみ対応。再生には不使用）
　　・nspsytune   (yes/no)
　　・nssafejoint (yes/no)
　　・nogap continued    (yes/no)
　　・nogap continuation (yes/no)
　　・ATH type (0 〜 15)
　　・bitrate (minimal (-b) bitrate 32 etc...)
　　・encoder delay (xxxx samples)
　　・padded at end (xxxx samples)
　　・noise shaping (0/1/2/3)
　　・stereo mode   (mono, stereo, dual, joint, force, auto, intensity...)
　　・unwise settings (yes/no)
　　・source sample freq (32kHz or smaller, 44.1kHz, 48kHz, higher than 48kHz)
　　・mp3 gain      (-1.5dB etc...)(表示のみ対応。再生には不使用)
　　・surround info (none, DPL/DPL2 encoding, Ambisonic encoding)
　　・preset flags  (01000011100) (11 桁のフラグ値の表示)
　　・music length  (XXXX bytes)
　　・music CRC     (タグに書き込まれた値、実際の値は非表示)
　　・info tag CRC  (タグに書き込まれた値、実際の値は非表示)
　　・LameTag 0.4.1
　　　https://phwip.wordpress.com/home/audio/
　　　を参考（ほぼ同様の表示）
　・タイトル等の情報取得は本体に任せる

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

Version 0.14(2015/06/28)

・データによっては末尾で無限ループに陥ってフリーズすることがあるバグを修正

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

Version 0.13(2015/06/21)

・Info タグに対応(LAME でエンコードされた CBR のギャップレス再生に対応)
・シークテーブルを作成することにより2回目以降のシークが高速化
　・再生しながらシークテーブルを作成はしないので初回のシークは低速

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

Version 0.12(2015/06/14)

・libmad を 0.15.1b(2004/2/17) に差し替え
・ギャップレス再生が正常に機能していなかったのを修正
・ディザの設定を廃止（常にディザをかけない）
・本体からのビット数要求を無視して常に 64bit float で出力するようにした
　・実質的な演算精度は 24bit だが、どうせ本体が一度 64bit float に変換するので
　　変換の効率が良い方にした

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

Version 0.11(2005/09/30)

・曲の冒頭部分が再生されず、歌詞表示が少しずれることがあるのを修正

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

Version 0.10(2005/07/10)

・モノラルのデータを 32bit 以外で再生すると落ちるバグを修正

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

Version 0.09(2005/01/31)

・シークすると再生位置がずれてノンストップ再生が出来ないのを修正
・LAME Tag がついたデータを再生すると落ちることがあるバグを修正

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

Version 0.08(2004/08/16)

・エラーチェックを強化（nekonin さんによる改良）
・ギャップレス再生に対応（LAME でエンコードしたもの）

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

Version 0.07(2004/07/18)

・データによっては 0 による除算で落ちるのを修正
・ディザの有効・無効の設定変更を監視し、変更されてたらすぐに反映されるように
  するための隠し機能を kbmad.ini に記述

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

Version 0.06(2003/02/26)

・不本意ながら（ぉぃ）、無圧縮 ZIP.MP3 への対応を強化
  ・ZIP.MP3 の ZIP ヘッダ部分を無視することにより、１曲目が再生される可能性が
    高くなった（２曲目以降が再生されるかどうかは保証出来ない）
  ・VBR な無圧縮 zip.mp3 の曲長計算の方法を修正（１曲目の曲長とファイルサイズ
    を元に概算値を求める）

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

Version 0.05(2003/02/24)

・本体からのビット数要求が 32bit/64bit float の場合は 32bit int で出力するよう
  に修正（今までは 16bit int で出力していた）

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

Version 0.04(2002/06/10)

・エラーが見つかっても出来るだけ再生するように修正

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

Version 0.03(2002/05/28)

・KbMedia Player 本体からのビット数の要求に対応
・INI の BitsPerSample の指定よりも本体からの要求を優先するため、INI での設定は
  事実上無意味になった（ぉ

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

Version 0.02(2002/05/19)

・デフォルトではディザを無効にするようにした
・8/16/24/32bit 再生とディザの有効・無効を ini で設定出来るようにした
  （設定はファイルを開く度に読み込まれます）

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

Version 0.01(2002/05/13)

・初版

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