kpidop.kpi
==========

DSD (Direct Stream Digital) 音源を DSD Audio over PCM Frames (DoP) 方式
で再生するための KbMedia Player プラグインです。対応する拡張子は dsf, 
dff, wsd です。

KbMedia Player 2.80beta29 以降が必要です。

KbMedia Player のプラグイン仕様は PCM を前提として作られているため、DSD
を再生する上で制限事項がありますので、このファイルは最後まで目を通してく
ださい。


対応 DSD DAC
------------

DoP Version 1.0 以降をサポートする DSD DAC で動作します。本プラグインの
実装は Version 1.1 の仕様に従っています。

5.6MHz 以上のサンプルレートには PCM サンプルレートを上げる方法で対応しま
す。マーカ 0x06/0xf9 を使う方式には対応していません（デバイスを持ってい
ないので）。

ステレオ以上のチャンネル数には DAC が対応している必要がありますが、
KbMedia Player の構造上チャンネル構成を伝える方法が無いため、データの想
定通りのチャンネル配置では鳴らないことがあります。

Roland UA-M10 と FOSTEX HP-A4 (thanks KOH) で確認しています。


KbMedia Player の構成
---------------------

このプラグインが出力した DoP フレームをビットパーフェクトを守ったままデ
バイスまで伝える必要があるため、KbMedia Player 本体からのプラグイン出力
ビット数要求は無視し、常に 32bit INT で出力しようとします。

2.51beta10 以降の KbMedia Player は常に 64bit float で演算をするようにな
っているため、ボリュームその他が無効になっている限り、DoPフレームの 
24bit/32bit INT を演算誤差なくデバイスに出力できるはずです。

デバイスによっては 24bit INT での出力が必要になるかもしれません。次の
「デバイス設定」をご覧ください。

ASIO/WASAPI サポートが必要です。2.80beta30 以降の本体は waveOut や 
DirectSound で再生しようとするとエラーにします。

開発及び動作確認は 2.80beta23a/23b/24/25/29/30/30a で行っています。


デバイス設定
------------

お使いのデバイスに合わせて、KbMedia Player の「デバイス設定」ダイアログ
で以下の項目について設定を行ってください。

・デバイスインタフェース：ASIO か WASAPI を選択。両方使えるデバイスもあ
るし、どちらかでないと使えないデバイスもあるらしい。

・デバイスへの出力ビット数：32bit INT か 24bit INT をチェック、デバイス
によって動作する組み合わせは変わるようですので、試行錯誤する必要があるか
もしれません。

ASIO4ALL 経由では使えないようです。ASIO サポートのないデバイスでは 
WASAPI をおすすめします。


サポートしない機能
------------------

以下の機能は PCM を前提としているため、KbMedia Player 本体が検知して自動
的にオフまたは無効になります。

・ボリューム→つねに 100% 固定
・エコー
・ピッチスケール・テンポチェンジ
・クロスフェード
・リプレイゲイン
・フェードアウト
・スペアナ

このプラグインで再生中のとき、「曲の長さ」の PCM パラメータは
  176400Hz（2.8224MHz のとき）または 352800Hz（5.6448MHz のとき）
  24bit または 32bit（プラグインへの出力ビット数要求に対応）
  mono または stereo
のように表示されます。


対応ファイルフォーマット
------------------------

以下のファイルフォーマットとバージョンに対応します。

・ソニー DSF v1.01
・フィリップス DSDIFF v1.5
・1bit オーディオコンソーシアム WSD v1.1

DSDIFF フォーマットにおける DST (Direct Stream Transfer) コーデックには
対応していないため、SACD から吸い出した音源の再生はそのままではできませ
ん。

以下の方法で入手したファイルフォーマットで動作確認しています。

- KORG AudioGate v3.0.2, v4.0.2 で生成した DSF/DSDIFF/WSD ファイル
- http://www.2l.no/hires/ でダウンロードできる DSDIFF, DSF ファイル
- e-onkyo music で購入した DSF ファイル
- 1bit オーディオコンソーシアム公式サイトの WSD ファイル


対応 OS
-------

64bit ファイル API を使用するため、Windows 2000 以降が必要です。リンカー
の設定上は Windows XP 以降に対応すると設定してビルドしていますが、
Windows 7 / 8.1 / 10 以外では確認していません。


シークについて
--------------

DSD DAC の機種によってはシーク時にプチノイズが乗ることがあります。
KbMedia Player はシーク中にデータが途切れる（PCM としては正しいが、DoP 
としては無音データを流すべき）ため、これを回避する手段はありません。


タグ情報について
----------------

DSF の ID3v2 タグは KbMedia Player 2.80beta23 以降の本体が対応するように
なりました。そのためフレーム名などの解釈は本体の実装に準じます。

ID3v2 タグの動作確認には、KORG AudioGate で生成される DSF と e-onkyo 
music で購入した DSF を使っています。

DSDIFF では、Edited Master Information チャンクにある DITI と DIAR チャ
ンクが、それぞれタイトルとアーティストに対応します。COMT チャンクがあれ
ば、その中の最初のものがコメントとして使われます。

DSDIFF の仕様に文字コードの規定がないので、これらが漢字を含むときはタグ
情報自体が記録されていないことがあります。もしあれば本プラグインとしては 
Shift_JIS として解釈します。

WSD では、タイトル、アーティスト、アルバム、ジャンル、コメント、日時に対
応します。WSD v1.1 の仕様には文字コードの規定がないので、これらが漢字を
含むときはタグ情報自体が記録されていないことがあります。もしあれば本プラ
グインとしては Shift_JIS として解釈します。


ライセンス
----------

kpidop.kpi - DSD Audio over PCM Frames (DoP) plugin for KbMedia Player
 Copyright (c) 2015, 2016, Autch.net.

kpidop.kpi は MIT ライセンスで配布されます。COPYING ファイルをご覧くださ
い。


ソースコード
------------

ソースコードは以下の GitHub リポジトリから入手できます。
https://github.com/autch/kpidsd

Visual Studio 2015 Community でビルドしています。


履歴
----

v1.0.0 (65536)
        初版

v2.0.0 (131072)
        KbMedia Player 2.80beta29 のプラグイン仕様に対応

v2.0.1 (131073)
        2.80beta30 対応
        Visual Studio 2015 ランタイムに依存するように修正
        ビットレートの計算を一般的な慣習に従いチャンネル単位のものに修正
        コピペコードの削減

----
Autch
autch@autch.net
http://github.com/autch
http://www.autch.net/
