-------------------------------------------------------------------------------
【  名  称  】 ASIO Device
【ファイル名】 kbasio.kpi
【バージョン】 0.10
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2024/03/??
-------------------------------------------------------------------------------

【概要】

  Steinberg が提唱する規格である ASIO を用いてサウンド出力するためのデバイスプ
ラグインです。ASIO については

    https://www.steinberg.net/developers/

を参照して下さい。(ASIO SDK をクリック)

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

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

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

  ASIO は使用出来る環境が限られています。「デバイス設定」画面で ASIO の部分に
デバイス名が列挙されていない場合、ASIO を使用することは出来ません。


【設定】

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

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

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

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

  もし設定を色々変えても正常に再生できない場合は kbasio.kpi を改良してみて下さ
い。kbasio.kpi はソースコードを公開しています。ソースコードを改良した場合は、
ご連絡を頂ければ kbasio.kpi に組み込ませて頂くかもしれません。


【DSD 再生】

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

  kpidop.kpi と kbasio.kpi を組み合わせることで、DSD のネイティブ再生に対応する
ことが出来ます。

  DoP 方式、DSD Native 方式のどちらで再生するかは「プラグイン設定」で使用するデ
バイスごとに選択します。ASIO デバイスによっては、どちらか一方でしか再生出来ない
場合があります。どちらか音が鳴る方に設定して下さい。既定では「DoP」方式が選択さ
れていますが、どちらでも問題なく再生出来るなら「DSD Native」の方がお勧めです。

  kbasio.kpi 側で「DoP」と「DSD Native」のどちらを選択しても、kpidop.kpi 側では
特に設定を変更する必要はありません。kbasio.kpi 側で DoP を DSD Native 方式に変
換します。変換による音質の劣化は発生しませんので安心して下さい。

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

  お使いの環境に ASIO デバイスがない場合も DSD のネイティブ再生は出来ません。
その場合も kpid2p.kpi を使用することで、ASIO 以外のデバイスでも DSD を再生する
ことが出来ます。

  なお、ASIO4ALL では DSD のネイティブ再生は出来ません。

  また、kbasio.kpi には通常の PCM を DoP に変換してサウンド出力する機能はあり
ません。デコーダプラグインから取得したデータが PCM の場合、そのまま PCM として
出力します。


【テスト環境】

  kbasio.kpi を制作するにあたっては、以下のデバイスで動作確認をしています。

  ・FOSTEX HP-A8 (FOSTEX ASIO Driver Version 2.1.0 built 07/29/2016)
  ・ASIO4ALL + Realtek High Definition Audio(マザーボード標準搭載のデバイス)

  このうち、DSD のネイティブ再生は HP-A8 の方で動作確認しています。ASIO4ALL で
は DSD のネイティブ再生は出来ません。


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

【更新履歴】

Version 0.10(2024/03/??)

・環境によっては動作しないのを修正(?)

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

Version 0.09(2024/03/04)

・本体の COM の初期化(STA/MTA)に影響せずに動作するようにした
　・v3.12beta2 で動作しなくなった為
　・プラグイン自身で作成したスレッド内で STA として COM を初期化
　　(MTA だと動作せず)
・IASIO::setSampleRate の戻り値をチェックするようにした
　・サポート掲示板で指摘された件

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

Version 0.08(2019/02/18)

・RealTek ASIO 使用時に不安定（度々デバイスオープンに失敗したりフリーズする）
　なのをある程度修正
　・ドライバのバグとしか思えない為、根本的な解決は多分無理
　・対策後にドライバ更新したら ASIO ドライバごと消えてしまったのでもう動作確認
　　出来ず

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

Version 0.07(2017/04/09)

・コンパイラを VS2017 に変更

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

Version 0.06(2017/03/14)

・ドライバの初期化時に渡すウィンドウの作成方法を修正
　・本体の DDE 通信(関連付け起動、実行ファイルへのドラッグアンドドロップ)に
　　支障が出る(演奏開始直後だと曲が切り替わるまで数秒かかる)のを修正

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

Version 0.05(2017/01/09)

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

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

Version 0.04(2016/12/18)

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

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

Version 0.03(2016/10/23)

・DSD Native モード(DoP でない方)での再生に対応
　・DSD Native に対応するが DoP には未対応なデバイスで DSD をネイティブ再生出
　　来るようになった
　・DoP と DSD Native のどちらで再生するか設定可能にした
　・どちらを使用しても音質は変わらないが、両対応なら DSD Native を使用した方
　　が良いかも。(HP-A8 ではリレーの切り替えが起こる頻度が少ない)
・シーク時や一時停止時に PCM モードに切り替わらなくなった(HP-A8 などでリレー
　の切り替えによるカチカチ音が発生しなくなった)
・DSD のネイティブ再生は WASAPI より ASIO を推奨

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

Version 0.02(2016/??/??)

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

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

Version 0.01(2016/07/25)

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

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