Re: [閒聊] HTPC/CAT建構的自身經驗
: → alanswill: 看不懂QQ,不過我在網路上查到的都是說event比push還要 03/16 06:39: → alanswill: 新? 03/16 06:39
Sorry 漏看了回復
這問題很複雜,首先M$自己就用了一堆不同的名詞來表示或說明 WASAPI 的工作模式
event-driven、timer-driven、event-driven (pull) mode、pull mode
有時用這個有時用那個,不去細看其工作方式很容易搞錯
像 WASAPI (push) 為什麼要叫 push 我到現在還搞不懂,因為文件中有叫 pull mode
所以另一個就是 push 嗎,哪為什麼 WASAPI (event) 不叫作 WASAPI (pull) ...
※ 從名稱中是誰推誰誰拉誰、十分讓人混淆
網上有些查到的 WASAPI 說明是錯誤的,因為名稱太亂實在很容易搞混
因為狗出來不同來源的說明有完全相反或不合理的狀況
所以我是花了不少時間去挖 Windows Audio team 的軟體工程師 Matthew van Eerde
在官網論壇及 Blog 的回覆與發文及比對 Windows Core Audio APIs 的文件
得出來的結論,因為我有比對 WASAPI output support 兩個模式的工作特性
個人是對這個結論滿有信心的啦XD 雖然我很想說「相信我吧」但8成7吧XD
※
@Matthew van Eerde's web log
HD Audio buffer allocations must be a multiple of 256 bytes. For timer-drivenbuffers, this applies to the whole buffer. For event-driven buffers, this
applies to the sum of the “ping” and “pong” buffers, so the individual “
ping” or “pong” buffer must be a multiple of 128 bytes.
※
foobar WASAPI output support 的模式也改過幾次模式名稱
可以去查其 version history,3.0 中有一條
Operates in two different modes, regular and event-driven - the latter seems
to be more compatible with USB devices, but not supported by some other
devices.
因為 foo_out_wasapi 的作者也是 foobar 的開發者 Peter 本來好像只實作了一個模
式也就是 WASAPI 預設的環形緩衝,需要 DMA 與一些其它的硬體功能支援
因為 WASAPI 是 Windows Vista 打掉舊的重寫的新 Audio 核心中的低層 API
所以這也就是說硬體需要有 Windows Vista 相容,但一些舊硬體(大多是USB)...
因為有部分使用者回報錯誤無法順利播放
所以作者就補了使用乒乓緩衝的 event-driven 模式
以 foo_out_wasapi 開發的角度來看,「event」是比較新加入的模式沒錯,但是為了
相容性所補上的較原始的技術
所以環形緩衝稱為「regular」但後來改成「push」
這樣解釋可以看得懂嗎,可能有點亂啦
補個 Peter 對 WASAPI 的發言
Event mode in fact provides worse protection against CPU usage spikes than
push mode (as seen in earlier versions of this plug-in) because we queue lessdata with the driver at a time and must wake up and send more data at regularintervals. However, event mode seems necessary to peacefully cooperate with
certain devices, USB ones in particular.
硬體沒問題 push mode 可用沒什麼理由不用 push mode
且 push mode 會出問題的硬體主要是對 Windows Vista 的相容性有問題
現在都民國幾年了,Vista 都要 two decades 了...
--
人間五十年、化天のうちを比ぶれば、夢幻の如くなり
^,,,^ 一度生を享け、滅せぬもののあるべきか
(ミ‵ω′)\m/ NOBUMETAL DEATH!!(乂'ω')
--
再補些 Matthew van Eerde 幫人除錯與 WASAPI 有點相關的回復
3.6 milliseconds is quite small. Even
a high-priority thread can be held offby a long-running ISR/DPC
; the Windows Assessment Toolkit contains some tools you can use to take traces and see why your thread is getting held off.
專業推
感謝~
認真推
感謝分享
專業推
推
想問一個似乎很基本的問題,在foobar output頁面設定
的buffer,跟在advance 頁面下的wasapi選項設定的Har
dware buffet in MS有什麼差別呢?
foobar output 的 buffer 可視為 foobar 自己的 buffer WASAPI 的 buffer 是 WASAPI 的 buffer(被打 很多 buffer、萬物皆有 buffer 程式也有自己的 buffer 當然硬體也有 之間還有 Endpoint buffer foo_out_wasapi 的 buffer 就是 Endpoint 間的 buffer,是程式跟 Driver 間的橋樑 foobar Output 的 buffer 是 foobar 拿來放 audio data 用的
※讀檔(Advanced\Playback\Buffing)>解碼(decoder 會自己開 party)>PCM AUDIO 這 PCM AUDIO 應是 32-bit 浮點、會先受 foobar Playback 頁的 ReplayGain/Preamp 的影響(如果有啟用的話) 然後進到 foobar DSP chain、Active DSPs 會照順序上工(如有) 處理完的資料就是放到 foobar output 的 buffer 然後等著 Output Device 來推或拉貨、在這就是 foo_out_wasapi / ASIO / DS
感謝您的回覆,認真推~
專業人士
感謝解答,這樣比較有概念了
然後據說 ASIO 的實作多半是環形緩衝(笑 還有一點是 WAS
API並不是驅動程式、它只是一個 API 這個 API interface 對接過去的才是 Windows audio driver 實際上工作的是 driver 在這裏的環形緩衝就是 WaveRT Miniport Driver 然後這個 driver 再接到 Audio Device 的 driver 才連到 H/W 所以這只是許多關卡中的一關 Audio H/W 實際上傳遞資料並不由這裏的 buffer 大小設定直接左右 以 USB Audio 來說、USB Audio Class 有自己的 Protocol、Packet size End-User 沒法直接干涉這塊 這就像你只是個搬菜的小學徒 但在備料區沒缺料的狀況下、小學徒怎麼搬會影響到大廚的出菜品質嗎?
※ 編輯: Oswyn (220.129.177.54 臺灣), 03/18/2020 20:05:45推專業分享
推
5
日前、RME 的 Co-Founder Matthias Carstens 在 RME 的使用者論壇回覆了一段對話 串本身內容沒什麼,但 Matthias Carstens 對 WASAPI 模式的建議讓人有點驚訝 2020-06-26 20:27:24 Re: USB Audio and Bit Test Question If you use Foobar without ASIO then you will not get bit perfect transmission.32
WASAPI (push) 是較新的 WaveRT Port Driver、使用 cyclic buffers,Audio device 需要支援 DMA。有人不推是因為部分 Audio device 相容性不佳,為了省麻煩就叫你別 用,不用就不會有機會有問題。話說什麼年代了硬體還不支援 DMA(笑)、硬體相容性 、支援度不佳並不是這個模式的問題。用 WASAPI (push) 有問題該吐草的是兩光硬體 或其不良驅動程式。但你知道的做 Audio 設備的很多在這塊通常都....10
最近後知後覺的注意到了這玩意: 簡單來說就是微軟提供的原生UAC 2.0 Driver (USB Audio Device Class 2.0 Driver). 最早在Win10 1703開始內建,之後慢慢改版,到了1803之後34
延續之前版大的討論,希望能有所幫助。 以下為小弟參照各大論壇和朋友討論後,自己電腦有做調整的事項,不過由於本人英文頗 爛 且非電機本科,有些原理都是自己推測的,可能完全錯誤,請當作參考就好 目前電腦系統是win10 21H2
15
Re: [閒聊] miniDSP DDRC-22D延伸DRC只有在Mac訊源可以得到最大化利用的問題 Win用戶受限於AC97之類的東東 所以只有在特定軟體自行在WASAPI模式下套入校正檔才能work (如foobar、Audirvana、Roon等等) 但是遇到要聽youtube KKBox/Spotify/AppleMusic上有興趣的音樂14
[問題] Foobar Wasapi 隨機停止播放環境 拓品E30 II + L30 II WIN 11 HOME Foobar 2000 +Wasapi push 各種設定都試過了8
[心得] Foobar 1.6.7版後更新WASAPI為内建架構文首,特別感謝zhtw大在小弟寫信後,願意更新並發佈1.6.8白色相簿繁體中文版,對於 英文很差的小弟我真的是受益匪淺,也期待您之後的1.6.9版!! 前幾日教朋友調整電腦訊源軟體最佳化時,偶然發現在 Preferences(偏好設定) -> Advanced(進階) -> Playback(播放)多了[Exclusive output overrides](獨佔輸出設定) 、 [Hardware buffer in milliseconds](硬體緩衝時間,z大這邊有小誤翻成快取)和4
[閒聊] NB foobar2000 直出 VS UD701-N內建解碼想說機內內建的解碼器 會不會比NB直出給UN701N好 今天又測試了 三個音檔 FLAC格式與DSD格式 先上圖 結果都是電腦直出DSD訊號或PCM訊號給701比較好 而且好上不少3
[心得] The Sixes喇叭用foobar asio聽spotify近期換電腦, 發現裝置管理員裡面有一個iAP interface驅動程式有問題, 把usb裝置一個個拔掉發現是Klipsch The Sixes的問題, 爬文後發現可以在官網抓到driver!!! (OTHER DOWNLOADS - > The Three / The Sixes USB Driver)3
[問題] CHORD QUTEST的ASIO設定問題我是安裝官網下載的Windows-10-768KHz-driver.zip 但在播放的時候 要先切換到WASAPI播放一次 否則會跳錯誤1
[請益] Jplay外掛foobar2000無法撥放如題 試了好久還是失敗... 前端是用桌機接mojo再接耳機 一開始不知道mojo要另外裝驅動 一用foobar掛jplay播放就會出現錯誤訊息1
Re: [請益] DAC爆音與斷續問題(ADI-2)狀況解除了,聲音都正常,就算同時開啟foobar與瀏覽器 都不會爆音或是延遲了. 目前調整如下 1.移除原廠asio驅動程式,使用windows預設驅動(WASAPI) 2.將系統音效設為無音效(如系統通知聲等等)