-------------------------------------------------------------------------------
【  名  称  】 WASAPI Device
【ファイル名】 kbwasapi.kpi
【バージョン】 0.10
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2021/06/25
-------------------------------------------------------------------------------

【概要】

  WASAPI(排他モード)を用いてサウンド出力するデバイスプラグインです。このプラグ
インは共有モードでのサウンド出力には未対応です。

  WASAPI(排他モード)を用いてサウンド出力するとビットパーフェクトな出力が可能に
なります。そのため、DirectSound や waveOut よりも精度の高いサウンド出力を行う
ことが出来ます。また、レイテンシもかなり小さく抑えることが出来ます。

  欠点として、同じデバイスを複数同時に開くことが出来ないため、クロスフェード再
生が出来ません。

  音質を重視するなら WASAPI(kbwasapi.kpi) か ASIO(kbasio.kpi) を使い、クロスフ
ェード再生やメドレー再生を行いたい場合は DirectSound(kbdsound.kpi) か waveOut
(kbwaveout.kpi)を使うと良いです。DirectSound で正常に再生出来ない場合は waveOut
をお使い下さい。

  WASAPI は Windows Vista 以降でのみ使用可能です。WindowsXP では使用することが
出来ません。「デバイス設定」画面で WASAPI の部分にデバイス名が列挙されていない
場合、WASAPI を使用することは出来ません。

【設定】

  kbwasapi.kpi はお使いの PC 環境やサウンドドライバによっては正常に動作しないか
もしれません。「プラグイン設定」でデバイスごとに細かい設定を行うことが出来ます
ので、正常に再生出来ない場合は設定を色々変えてみて下さい。サウンドドライバが最
新かどうかも確認してみて下さい。

  WASAPI や ASIO はレイテンシが小さいため、waveOut や DirectSound よりも「デバ
イス設定」で「再生バッファサイズ」を小さく設定することが出来ます。

  waveOut や DirectSound では 150〜200ms 程度が限界なのに対し、WASAPI や ASIO
では 50ms 程度でも再生出来る可能性があります。

  「再生バッファサイズ」を小さくした場合の利点は、音量やエコーの設定変更が反映
されるまでの時間が短くなる程度ですので、無理せず 100ms 程度にしておけば良いでし
ょう。


【DSD 再生】

  通常の PCM の出力の外に、DSD over PCM(DoP) 方式にも対応しています。

  DSD 形式のサウンドファイル(dsf/dff/wsd)を DoP 方式で出力するデコーダプラグイ
ン(kpidop.kpi。autch 氏制作)が標準で同梱されています。

  kpidop.kpi と kbwasapi.kpi を組み合わせることで、DSD のネイティブ再生に対応す
ることが出来ます。ただし、DSD のネイティブ再生は WASAPI より ASIO を使用する方
がお勧めです。

  kpidop.kpi と kbwasapi.kpi の組み合わせで再生時に音が鳴らない場合、お使いの
WASAPI デバイスは DoP に対応していません。DSD を PCM に変換出力するデコーダプ
ラグイン(kpid2p.kpi、autch 氏作)が標準で同梱されています。kpidop.kpi を無効に
して kpid2p.kpi の方を使用することで、DoP に未対応の WASAPI デバイスでも DSD
を再生することが出来ます。ただし音質は少し劣化します。

  DSD のネイティブ再生は通常は kbasio.kpi を使用することを推奨します。詳細につ
いては kbasio.kpi に添付のドキュメント(kbasio.txt) を参照して下さい。


【イベント駆動とタイマー駆動】

  デバイス名の末尾が (event) となっている場合はイベント駆動、(push) となってい
る場合はタイマー駆動となります。特に問題ないならイベント駆動(event)の方を使用し
た方が効率的に動作するためお勧めです。


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

【更新履歴】

Version 0.10(2021/06/25)

・IKpiOutDevice::Wait() から戻らなくなることがあるのを修正
　・音が鳴らない状態で再生位置だけが進む
　・v0.09 からのバグ

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

Version 0.09(2021/06/15)

・再生位置取得の精度が向上

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

Version 0.08(2019/05/12)

・リソースリーク(イベントハンドルの閉じ忘れ)を修正

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

Version 0.07(2019/02/18)

・WindowsXP でプラグインのロードに失敗するのを修正
　(WASAPI を使用出来ないことに変わりはない)

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

Version 0.06(2017/04/09)

・コンパイラを VS2017 に変更

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

Version 0.05(2017/02/26)

・ソースコード公開に伴う細かい修正

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

Version 0.04(2017/01/09)

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

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

Version 0.03(2016/12/18)

・デバイスプラグイン仕様変更に伴う細かい修正

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

Version 0.02(2016/09/05)

・演奏停止時にフリーズすることがあったのを修正

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

Version 0.01(2016/07/25)

・デバイスプラグイン化後の初版
・プラグイン化に伴い、ファイル名を kbwasapi.dll から kbwasapi.kpi に変更
・GUID を元に設定の保存場所が決まるようにした
　(x86版とx64版で設定が共有される)

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