yamamoto2002
yamamoto2002
オーディオ関連のフリーソフトウェアを作っています。 Amazon.co.jpのyamamoto2002さんは別人です。 楽天オークションのyamamoto2002さんも別人です。 Twitt…

マイルーム

yamamoto2002のページ
yamamoto2002のページ
yamamoto2002のページです。
所有製品

レビュー/コメント

カレンダー

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

最新のレス

日記
製品レビュー/コメント

製品レビュー/コメントへのレスはありません

お気に入り製品

お気に入り製品はありません

日記

Windowsオーディオの音飛びの原因

このエントリーをはてなブックマークに追加
2017年06月22日

Thesycon社はWindows用のUSBオーディオクラス2ドライバを作っている。Windowsの音飛びの原因を調べるアプリのDPC Latency Checkerを配っている。
http://www.thesycon.de/eng/latency_check.shtml

このアプリの説明文は良く書けていると思った。特にBackground information: Why drop-outs occurから、オーディオドライバ製作者が苦労していることが窺われる。一言でまとめると、音飛びは別の会社が作ったデバイスドライバが原因で引き起こされることがある。

説明文は音飛びの原因究明に使用するツールとしてRATTを紹介している。私はMedia Experience Analyzer(MXA)の方が適していると思う:https://docs.microsoft.com/en-us/windows-hardware/test/weg/delivering-a-great-media-experience

■MXA説明ビデオ1:ネットワークドライバがDPC内でメモリを確保して音飛び

https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-151-Media-eXperience-Analyzer-part-3-Audio-Glitch-Analysis

3分32秒付近の図の青線で音飛びが発生している。

音声音飛びの分類

・クロスプロセス オーディオグリッチ(CPグリッチ): アプリが音声をインターネットから受信しながらストリーミング再生しているとき音声データの受信が間に合わなくてアプリの音声バッファ(queue)がstarveすると起こる。
・カーネルストリーミング グリッチ(KSグリッチ): アプリがオーディオエンジンに音声データを渡す定期的処理が何らかの理由で遅滞し締め切り時刻までに行われないと起こる。

4:30以降KSグリッチの調査方法について説明している。IHPというのは独立ハードウェア提供会社くらいの意味だったと思う。このIHPネットワークドライバがDPC中のメモリ確保に時間がかかって音飛びする不具合は現在は直っているようである。

■MXA説明ビデオ2: APO(音の明瞭化機能)が使用するメモリ領域がページアウトしていて音飛び

https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-153-Media-eXperience-Analyzer-part-5-Audio-Glitch-Analysis-II

Audio Processing Object(APO、音の明瞭化処理)が使用する仮想メモリの内容がディスクにページアウトしている。ディスクからメモリに戻して仮想メモリの状態を復元する処理に42ミリ秒もかかり、その間スレッドがIO待ち状態で待機して音飛びが発生。IHPの作ったAPOの不具合であり、APOはメモリがページアウトしないようにnon paged poolから確保しなければならない。

次回の日記→

←前回の日記

レス一覧

  1. yamamoto2002さん、こんにちは。

    貴重な情報を有難うございます。一年ぐらい前、私も挙動不審の音声データに悩まされ、日記にも書いたはずです。それはHDDが壊れる寸前で、異常にリトライを繰り返した結果、データのドロップアウトが起きたのでした。

    紹介された「Background information: Why drop-outs occur」を読んでみると、納得しました。たぶんOSは、そんな不具合のあるドライバーを認識できないので、こういうトラブルがあるとリアルタイム処理は不可になるのだろうと思ってました。その通りのようです。

    音声再生の場合は、この問題はどうしようもないでしょう。USBのドライバーを追加していくと、何処かでこのトラブルが出てきます。対策としては、再生用のPCは、極力他のドライバーなどを入れない事でしょうが、完全に防ぐのは難しいです。

    DAC側にメモリーを持たせて、送られてきたデータとPCが送ったデータを比較すると、一致しない事があります。これは多分バケット単位で飛びますから、USBのエラーチェックにもかからないでしょう。送ったデータと受けたデータのサイズが違う事でしか分かりません。

    結局の所、PCでのリアルタイム再生というものは、とても難しいのです。所謂ビットパーフェクトというのは、静的な話なので確認は容易です。こんな動的な話は厄介です。特殊なハードウエアがないと分かりません。でも多分起きているでしょう。うちでは起きてました。

    そこが隠れたPCオーディオの難しさです。

    by如月 at2017-06-23 13:41

  2. 如月さんこんばんは。

    MXAの説明ビデオでは音楽再生中にPCが様々な別の処理を同時実行していました。Windowsはどんなに処理が混雑しても決して音飛びが発生しないことを保証する仕組みを提供していないので、音飛びの発生頻度を下げることしかできないのですがオーディオ再生中のPCで別の作業をしないようにすればKSグリッチの発生頻度は大きく下がると思います。

    OSがどのような仕組みを用意したとしてもハードウェアが壊れていたり、デバイスドライバがバグっていて割り込み処理が長時間戻ってこないと音飛びは起きるでしょう。

    デジタルデータの不一致についてですが、USBのアイソクロナス転送はフレームにチェックサムが付いているので転送でビットが化けてデータが壊れたことをUSBの受信側で知ることは出来ます。しかしエラーを訂正することは出来ないので壊れたままになるのです。USBのアイソクロナス転送で送った音声データが転送時に壊れたかどうかはUSBDACからパススルーしたデジタルデータを録音して送ったデータとバイナリ比較すれば判ります。私の環境ではUSBオーディオで音楽を再生中に蛍光灯を点けたり消したりする意地悪な実験をするとPCMデータが壊れバチッという大きな音がするデータがDACに届くことがあります。

    byyamamoto2002 at2017-06-24 00:37

  3. 私はUSB1.1のハードウエアは一度設計したことがあり、バルク転送でした。詳しい事はもう忘れましたが、パケットは512バイトだったはずです。でもこれがUSB固有なのか、使ったICのバッファの制約だったかは分かりません。

    アイソクロノスは経験がなくて、本で読む限りの範囲で、区切りのない送りっぱなしかと思ってました。幾つかのフレームに分解されているのなら、フレーム単位でのエラーは分かるでしょう。

    USBDACからのパススルーは、SPDIFのようなものでPCに送るのでしょうか。そのようにして実際の再生時のエラーチェックをするという話は、初めて聞きました。蛍光灯でエラーが起きるのならば、エアコンのオンオフなどでも起きて不思議ないです。

    私の場合は、1milisecondに満たないぐらいの飛びですので、聞いて分かる事はないと思います。HDDがほとんど壊れて、かなりの長さで飛んだ時にやっと分かりました。聞いて分からない程度の飛びが、どのぐらいの頻度で起きているかは分かりません。このあたりはPCの本質的限界です。

    by如月 at2017-06-24 13:55

レスを書く

レスを書くにはログインする必要があります
ログインする