--------------------------------------------------------- out_asio(x64).dll (x64 version) Ver. 0.71 (2006/10/4) --------------------------------------------------------- * このプラグインは WINAMP5 用の ASIO 出力プラグインです。Windows XP x64 Edition 専用 です。 このプラグインを使用するには、ASIO 2.1 に対応しているサウンドカー ド・64bit ドライバが必要です。 --------------------------------- ASIO Technology by Steinberg. http://www.steinberg.net/ --------------------------------- * 特徴 ・Windows を介さないで出力するので負荷が軽い。 ・Windows のミキサーを通らないので生のデータがそのまま出力される。 (サウンドカードと ASIO ドライバの作りにもよりますが、一般にはリサ ンプリング等のデータ加工はおこなわれません。) ・レイテンシが小さい。 * 対応しているデータ形式 ・サウンドフォーマット Int8, Int16, Int24, Int32, Float32, Float64 ・デバイスフォーマット Int16MSB, Int24MSB, Int32MSB, Float32MSB, Float64MSB, Int32MSB16, Int32MSB24, Int16LSB, Int24LSB, Int32LSB, Float32LSB, Float64LSB, Int32LSB16, Int32LSB24 ・サンプリング周波数 デバイスに依存 ・チャンネル数 デバイスに依存 * インストール方法 ・WINAMP5 がインストールされているフォルダの下にある Plugins フォル ダに out_asio(x64).dll と out_asio(x64).exe を放り込んでください。 ・WINAMP5 のオプション設定で ASIO output plug-in (x64 version) を選 択してください。 (WINAMP5 - Options - Preferences... - Plug-ins - Output ダイアログ - Output plug-ins) ・Cool'n'Quiet 等の動的クロック変更を使用するときは、Windows XP x64 Edition の boot.ini に /usepmtimer オプションを付加してください。 /usepmtimer オプションが指定されていない状態で動的にクロックが変更 されると、QueryPerformanceCounter API の計測値が不正確になってしま い、正常なレイテンシを計算することができません。 * オプション設定 デバイス : (標準 = 一番上) プロセスの優先度 : Normal High Realtime (標準 = High) スレッドの優先度 : Normal Above normal Highest Time critical (標準 = Time critical) バッファサイズ : 0 〜 63 (標準 = 7) 出力チャンネルをずらす : 0 〜 99 (標準 = 0) たとえば 0 に設定(標準)すると、 Input channel 0 -> Output channel 0 Input channel 1 -> Output channel 1 になり、1 に設定すると、 Input channel 0 -> Output channel 1 Input channel 1 -> Output channel 2 になります。 ギャップレスモード (曲間を途切れなくする) : ギャップレスモードにしない = チェックしない ギャップレスモードにする = チェックする (標準 = チェックしない) 1 チャンネルのデータを 2 チャンネルに変換する : 変換しない = チェックしない 変換する = チェックする (標準 = チェックする) ダイレクトモニターを使用する (音源のダイレクトモニター機能を使用 する) : 使用しない = チェックしない 使用する = チェックする (標準 = チェックしない) リサンプリング - 有効 (リサンプリングを有効にする) : 有効にしない = チェックしない 有効にする = チェックする (標準 = チェックしない) リサンプリング後のサウンドフォーマットは Float64 となります。 リサンプリング - スレッドの優先度 (リサンプリング・スレッドの優 先度) : Normal Above normal Highest Time critical (標準 = Above normal) リサンプリング - サンプルレート (リサンプリングするときのターゲ ットサンプルレート) : 11025Hz 〜 192000Hz (標準 = 88200Hz) リサンプリング - 品質 : Low Normal High Top Ultra (標準 = Top) 品質を高くしたときに音切れする場合は、バッファサイズを大きくし てください。 標準値は私の環境に合わせて設定しましたので、環境によって最適値が違 ってくると思います。 * Ver. 0.71 ・設定ダイアログのデザインを変更。 * Ver. 0.70.1 ・ギャップレスモードが有効の状態で演奏を停止したとき、ASIO ドライバ をアンロードしないようにした。 * Ver. 0.69.1 ・同期オブジェクトの待機方法を変更。 * Ver. 0.68 ・リサンプリング - 品質に Ultra を追加。 品質を高くしたときに音切れする場合は、バッファサイズを大きくしてく ださい。 * Ver. 0.67 ・文字列操作関数をセキュア型のものに変更。 * Ver. 0.66.1 ・メインウィンドウのフックプロシージャ内の処理を変更。 * Ver. 0.65.2 ・リサンプリング - 品質に Normal を追加。 * Ver. 0.64 ・コンパイラを Visual C++ Ver. 8.0.50727.42 に変更。 * Ver. 0.63.2 ・ギャップレスモードが有効の状態で演奏停止中にオプション設定を変更し たとき、設定内容が反映されていなかったのを修正。 * Ver. 0.62 ・SSRC のアップサンプリングを少し高速化。 ・標準のリサンプリング・スレッドの優先度を Above normal に変更。 優先度が Normal では低すぎるようです…。 * Ver. 0.61b ・オプション設定のデバイス名を out_asio(x64).exe から取得するように した。 * Ver. 0.60a ・Windows XP x64 Edition 用に 64bit プログラムとして作成。 out_asio(x64).dll が 32bit、out_asio(x64).exe が 64bit となります。 64bit ASIO ドライバが必要です。 SSRC は 64bit モードで動作します。 ・コンパイラを Visual C++ Ver. 8.0.50215.44 Beta2 に変更。 * Ver. 0.59 ・標準のリサンプリング・スレッドの優先度を Normal に変更。 優先度が高いと、環境によってはノイズが出ることがあったので低くしま した。 * Ver. 0.58 ・SSRC を out_asio(exe).dll から out_asio(exe).exe に移動。 リサンプリングが有効のときのプロセス間通信の負荷が軽減しました。 * Ver. 0.57 ・コンパイラを Intel C++ Ver. 9.0.019 に変更。 * Ver. 0.56 ・SSRC のダウンサンプリングに関する不具合を修正。 詳しくは、 http://www.hydrogenaudio.org/forums/index.php?showtopic=34320 を参照してください。 ・コンパイラを Intel C++ Ver. 8.1.028 に変更。 * Ver. 0.55a ・ASIO SDK を Ver. 2.1 に変更。(DSD には対応していません。) ・コンパイラを Intel C++ Ver. 8.1.026 に変更。 * Ver. 0.54 ・演奏中にオプション設定を変更したとき、即座に設定内容を反映するよう にした。 ・演奏中に ASIO ドライバの設定を変更できるようにした。 * Ver. 0.53 ・メインウィンドウをフックする処理を変更。 * Ver. 0.52a ・デバイスをクローズするタイミングを変更。 環境によってはデータが最後まで出力されないことがありました。 * Ver. 0.51 ・Ver. 0.50 で、1 チャンネルのデータを 2 チャンネルに変換する機能が 正常動作していなかったのを修正。 * Ver. 0.50 ・出力チャンネルをずらす処理を変更。 ・コンパイラを Intel C++ Ver. 8.1.022 に変更。 * Ver. 0.49 ・コンパイラを Intel C++ Ver. 8.1.019 に変更。 * Ver. 0.48 ・WINAMP Ver. 5.04 で、ギャップレスモードが正常動作していなかったの を修正。 ・コンパイラを Intel C++ Ver. 8.0.052 に変更。 * Ver. 0.47 ・out_asio(exe).exe でメッセージループを回さないようにした。 ・コンパイラを Intel C++ Ver. 8.0.051 に変更。 * Ver. 0.46 ・コンパイラを Intel C++ Ver. 8.0.050 に変更。 * Ver. 0.45 ・環境によっては演奏終了後に音が出たまま(短いループ状態)になることが あったのを修正。 * Ver. 0.44 ・コンパイラを Intel C++ Ver. 8.0.049 に変更。 * Ver. 0.43 ・コンパイラを Intel C++ Ver. 8.0.048 に変更。 * Ver. 0.42 ・コンパイラを Intel C++ Ver. 8.0.047 に変更。 * Ver. 0.41d ・極端に小さいデータで、演奏開始できなかったのを修正。 * Ver. 0.40 ・リサンプリングが有効の状態でギャップレスモードを使用して連続演奏し たとき、GetOutputTime が本来の演奏時間より早めに進んでいたのを修正。 2 曲目以降、演奏と Visualization の動きがずれていました。 * Ver. 0.39 ・リサンプリングが有効のとき、演奏が終わる直前のデータが出力できてい なかったのを修正。 Ver. 0.35 の変更で、演奏が終わる直前のデータが出力できないようにな ってしまっていました。 * Ver. 0.38 ・「1 チャンネルのデータを 2 チャンネルに変換する」と「ダイレクトモ ニターを使用する」のオプション設定が動作に反映されていなかったのを 修正。 * Ver. 0.37 ・リサンプリングが有効のとき、Open の戻り値(max latency)を多めに返す ようにした。 実際のレイテンシが max latency より大きくなると Visualization の動 きがおかしくなるようです。(WINAMP5 は、この戻り値を使用して Visual ization 用のバッファを確保しているのではないかと予想しています。な お、実際のレイテンシは GetOutputTime と GetWrittenTime を使用して 計算しているようです。) 本当は SSRC のレイテンシをきちんと計算し、それを加算したものを返す ようにするのがいいのでしょうが、Open が呼ばれる時点では SSRC のレ イテンシを計算することができないため、適当に多め(2000ms)のレイテン シを加算して返すようにしました。 * Ver. 0.36 ・最大レイテンシの計算方法が間違っていたのを修正。 ASIO はダブルバッファですから、 ASIOGetLatencies(&InputLatency, &OutputLatency); MaxLatency = OutputLatency * 2; が最大レイテンシですね…。 ・WrittenTime の計算方法を変更。 * Ver. 0.35 ・WINAMP5 インターフェイス部分と ASIO 演奏エンジン部分にモジュールを 分割。 WINAMP5 インターフェイス部分が out_asio(exe).dll、ASIO 演奏エンジ ン部分が out_asio(exe).exe となります。両ファイルを Winamp/Plugins フォルダにコピーしてください。 ASIO ドライバは構造上、一部がアプリケーションのプロセス内で動作す るため、どうしても音切れが避けられませんでした。これを解決するため、 ASIO 演奏エンジン部分を単体の exe ファイルとして独立させ、プロセス の優先度を HIGH_PRIORITY_CLASS、スレッドの優先度を THREAD_PRIORITY _TIME_CRITICAL に引き上げました。 ・リサンプリングが有効のときの負荷を軽減。 ・リサンプリングを別スレッドで実行するようにし、スレッドの優先度を設 定できるようにした。 * Ver. 0.34 ・DSP プラグインを使用したとき、演奏開始できなかったのを修正。 * Ver. 0.33 ・OutputTime と WrittenTime の計算方法を変更。 OutputTime は、デバイスのレイテンシを考慮して計算するようにしまし た。Visualization の動作がスムーズになったと思います。 WrittenTime は、SSRC のレイテンシを考慮して計算するようにしました。 レイテンシの計算に QueryPerformanceCounter API を使用しています。 この API が使用できない環境では、代替として timeGetTime API を使用 しますが、そのときは正確なレイテンシが計算できなくなります。(timeG etTime の精度が悪いため。) * Ver. 0.32a ・シークしたときの OutputTime と WrittenTime の計算方法を変更。 * Ver. 0.31 ・レイテンシの計算方法を変更。 * Ver. 0.30 ・WINAMP5 の起動後に初めて演奏したとき、落ちることがあったのを修正。 * Ver. 0.29b ・曲の最後尾にシークしたとき、固まってしまうことがあったのを修正。 * Ver. 0.28c ・コンパイラを Visual C++ .NET Ver. 7.1.3091 に変更。 * Ver. 0.27c ・デバイスフォーマットの Int16MSB, Int24MSB, Int32MSB, Float32MSB, F loat64MSB, Int32MSB16, Int32MSB24 に対応。 * Ver. 0.26i ・サウンドフォーマットの Float32 に対応。 * Ver. 0.25 ・リサンプリングが有効の状態でギャップレスモードを使用して連続演奏し、 曲間でサウンドフォーマットが切り替わったとき、動作がおかしかったの を修正。 * Ver. 0.24a ・演奏開始時のタイミングを変更。 * Ver. 0.23 ・リサンプリング処理最終段のクリッピング処理を止め、最終出力段でのみ、 クリッピング処理をするようにした。 * Ver. 0.22 ・サウンドフォーマットの Float64 に対応。 従来(Int 受け渡し)のときは、 インプットプラグイン演算(Float) -> インプットプラグイン出力(Int) -> アウトプットプラグイン入力(Int) -> リサンプリング(Float) -> アウトプットプラグイン出力(Int) と変換していたので整数変換時に誤差が蓄積する可能性があったのですが、 Float64 でデータを受け渡しすることにより、 インプットプラグイン演算(Float) -> インプットプラグイン出力(Float) -> アウトプットプラグイン入力(Float) -> リサンプリング(Float) -> アウトプットプラグイン出力(Int) という経路になり、整数変換を最小限にすることができます。 ただし、Float64 フォーマットを出力できるインプットプラグインは、現 在、in_mpg123.dll Ver. 1.18y ot34 以降しか存在しません。 ・リサンプリング後のサウンドフォーマットを Float64 に変更。 * Ver. 0.21 ・リサンプリングが有効のとき、演奏が終わる直前のデータが出力できてい なかったのを修正。 データストリームの最後尾でリサンプリング用のバッファをフラッシュし ていなかったためです。 ただし、ギャップレスモードではこの修正をしていません。1曲ごとに終 端でリサンプリング用バッファをフラッシュすると、スムーズに次曲とつ ながりませんので…。 ・リサンプリングが有効の状態でシークしたとき、演奏が停止してしまうこ とがあったのを修正。 * Ver. 0.20c ・リサンプリング - 高速モードを廃止し、品質を選択できるようにした。 従来の高速モードが Low、品質重視モードが High に相当します。 Top 設定では、多くの CPU 時間を消費します。デコーダとの CPU リソー スの競合で音切れなどが発生する場合は、本プラグインのスレッドの優先 度を下げてみてください。 ・標準のスレッドの優先度を Highest に変更。 * Ver. 0.19 ・リサンプリング - 品質重視モードのパラメータを変更。 * Ver. 0.18 ・SSRC ライブラリを 32bit 精度で出力できるように拡張し、リサンプリン グ後のデータを 32bit で出力するようにした。 * Ver. 0.17 ・リサンプリングが有効のとき、演奏データが後方に数 ms(高速モード)、 数十 ms(品質重視モード) ずれていたのを修正。 使用している SSRC ライブラリの不具合でした。同じライブラリを使用し ている Peter さんのアウトプットプラグイン・リサンプリングモジュー ルにも同じ症状があると思われます。 * Ver. 0.16a ・リサンプリングが有効の状態でシークしたときのレイテンシの計算方法を 変更。 * Ver. 0.15 ・リサンプリングが有効のときの動作速度を高速化。 ・リサンプリングが有効のとき、チャンネル数が途中で変更された場合に演 奏できなかったのを修正。 ・リサンプリングが有効のとき、シークすると雑音が出る場合があったのを 修正。 ・[リサンプリング - 高速モード] の初期設定を品質重視モードに変更。 * Ver. 0.14 ・配布規定を LGPL にし、ソースファイルを公開。 ・柴田さんが作成した SSRC(高品質なサンプリングレートコンバータ) を搭 載。 入力データとリサンプリング後のサンプリングレートが同一の場合、SSRC は通過しません。 いまのところ、リサンプリング後のビット数は 24bit、ディザは無効に固 定しています。 計算精度を上げるため、デコーダ側の出力ビットは最高精度(32bit)にし ておいたほうがいいでしょう。 ・コンパイラを Visual C++ .NET Ver. 7.1.2235 Beta に変更。 コンパイラのプロセッサ別の最適化オプションを Pentium4、Athlon 用に 変更しました。(Visual C++ 7.1 の新機能。) * Ver. 0.13 ・浮動小数点型から整数型に変換するとき、小数点以下が一番近い値(中間 の場合は最寄の偶数)に丸めるように変更。(以前は四捨五入でした。) * Ver. 0.12 ・標準のバッファサイズを 7 に変更。 * Ver. 0.11 ・ギャップレスモードで、以前の演奏データからサンプリングレート・チャ ンネル数が変わったとき、VIS データの遅延計算がおかしかったのを修正。 * Ver. 0.10 ・ギャップレスで演奏できるようにした。 CD からの連続演奏をするとき等に、曲間が途切れなくなるので便利です。 途切れなしに演奏できる条件は、以前の演奏データとサンプリングレート ・チャンネル数が同じときのみです。ビット数は変わってもかまいません。 このモードを使用するときは、バッファサイズを大きめにしておいたほう がいいでしょう。 (注意) 曲を最後まで演奏し終わって演奏終了状態になっても ASIO デバ イスは開いたままの状態になります。これは次曲演奏開始時に途 切れないよう、わざとデバイスを開きっぱなしにするためです。 デバイスを閉じたい場合は、再度演奏させて停止ボタンを押すか、 WINAMP5 を終了してください。 ・最大のバッファサイズを 63 に拡大。 * Ver. 0.09 ・サウンドフォーマット -> デバイスフォーマット変換ルーチンを少々高速 化。 * Ver. 0.08 ・Ver. 0.07 でサウンドフォーマットの Int24 が正常に扱えていなかった のを修正。 * Ver. 0.07 ・ビット深度を落とす(32bit -> 24bit 等)とき、演算結果の小数点以下を 四捨五入するようにした。 * Ver. 0.06 ・先頭から ASIO ドライバのバッファサイズ分まで出力できていなかったの を修正。 * Ver. 0.05a ・出力チャンネルをずらせるようにした。 たとえば 0 に設定(標準)すると、 Input channel 0 -> Output channel 0 Input channel 1 -> Output channel 1 になり、1 に設定すると、 Input channel 0 -> Output channel 1 Input channel 1 -> Output channel 2 になります。 ・標準のスレッドの優先度を Time critical に変更。 * Ver. 0.04 ・演奏用スレッドのコールバックルーチンをウィンドウプロシージャ経由で 呼び出していたのをやめ、ユーザーモード非同期プロシージャ経由で呼び 出すようにした。 これによって従来より音切れしにくくなりました。 ・標準のバッファサイズを 3 に変更。(音切れしにくくなったため。) ・最大のバッファサイズを 31 に縮小。 * Ver. 0.03 ・1 チャンネルのデータを 2 チャンネルに変換して出力できるようにした。 この機能を有効にして 1 チャンネルのデータを演奏すると、第 2 チャン ネルからも第 1 チャンネルのデータが出力されるようになります。 ・標準のバッファサイズを 15 に変更。(out_asio.dll は cnv_pcmasio.wac に比べて構造的に音切れしやすいため。) ・最大のバッファサイズを 63 に拡大。 * Ver. 0.02b ・サウンドフォーマットの Int8 が正常に演奏できていなかったのを修正。 ・(ASIO ドライバのバッファサイズ * 4 * (バッファサイズ + 1)) を Writ e() 1回あたりのデータサイズで割り切れなかったとき、演奏開始できな かったのを修正。 * Ver. 0.01 ・ファーストバージョン。 * コンパイル方法 Visual C++ 8.0 で out_asio.sln を読み込んでコンパイルしてください。 付属のバイナリは Visual C++ Ver. 8.0.50727.42 でコンパイルしました。 * その他 配布規定は LGPL に従います。 音切れが発生するようでしたら、プロセス・スレッドの優先度やバッファ サイズの調節をしてみてください。ASIO ドライバにバッファサイズの調 節機能があるようでしたら、そちらのほうも調節してみてください。 ASIO ドライバのバッファサイズがあまりにも小さいときは、演奏開始で きないことがあります。このようなときは ASIO 出力プラグインのバッフ ァサイズを大きくしてみてください。 柴田さんが開発された SSRC(高品質サンプリングレートコンバータ) を搭 載しています。開発者の柴田さんに感謝します。 おたちゃん Web: http://otachan.com/