[瀬戸のテーマ] 如何把 WM6 手機的 A2DP 發揮得淋漓盡致


[Updated:7-Nov-2008]
小弟早前了解一些 WM 在 A2DP 的運作原理,所以方案多了兩個,在這裡先來了解一下,非常簡單的。
在處理數據上,有分硬解及軟解。
硬解就是有獨立硬件去處理數據,在處理上不會佔用 CPU 資源。
軟解就是全用 CPU 的運算能力來處理數據。
WM 在 A2DP 的音訊數據處理上,是預設為軟解的,運作方式如下:
  1. 播放軟件對音訊數據作出處理(如效果、轉換 Bitrate等) ← CPU 資源
  2. WM 把音訊數據轉換為 Registry 中所設定的 Bit Rate ← CPU 資源
  3. 把轉換完成的數據傳到 Buffer 區 ← CPU 資源
  4. 由藍牙模組把 Buffer 區內的數據傳到藍牙裝置 ← 藍牙模組資源
這樣處理有一個好處,因為音訊來源並不一定一樣,Bit Rate、Sample Rate 也不同,而藍牙裝置本身的處理能力亦不高,所以把音訊數據先轉換好,再交給藍牙模組處理是最好的做法。
可惜的是,
在處理上非常耗用 CPU 資源,播放軟件、A2DP、再加上本身 WM 的運作,對 PPC 上的 CPU 是非常吃力,所以在一些 WM 手機上會出現 Sound Drop 等情況,系統也被拖得死死的。
而每個藍牙裝置的處理能力亦有不同,如設定不當,可能會出現音質變差的情況,如小弟的 Sony DRC-BT15,因 WM 預設的 Bit Rate 太低,令音質出現沙沙不清的問題。
在這裡,為了令 WM6 手機的 A2DP 發揮得淋漓盡致,總共有三個方案。
這些提案是以小弟用的 HTC Diamond 配上 Sony DRC-BT15 來作最佳調整的,但閣下可對自己的配件來調整出最佳數值。
至於用甚麼來修改 Registry,到各大 Forum 就可以找到。
方案一
如果手機 CPU 的處理能力不錯的話,可以把各類設定提高。
在聽歌時出現沙沙聲或 Sound Drop(音訊間斷)的情況發生時,這是因為 WM6 預設的藍牙 A2DP 傳輸 BitRate 設定太高或太低,以及一些系統的保守設定的關係,只要修改一下 Registry 後重啟,應該可以解決,甚至還可以提高音質,提升享受質素。
HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\BitPool
HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\MaxSupportedBitPool

將上面兩個數值改為:
  76 (Very High)
  70
  65 (High)
  48 (Recommend)
  30-35 (Usually Default)

每部 WM6 手機的效能有異,若改太高的話,只會出現 Sound Drop 的問題。
一般而言,改成 40-55 之間就可以。
MaxSupportedBitPool 數值可以改大一些,BitPool 加上 5 就可以。
HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\UseJointStereo
  數值:0 → True Stereo (Recommend)
     
1 → Joint Stereo每部 WM6 手機預設值不同,一般也是 1 的。
部份 WM6 手機改了後,會有嚴重的雜音出現。
HKLM\Software\Microsoft\Bluetooth\AudioGateway\Capability
  將這個數值改為大於 MaxSupportedBitPool 值
只要加上 5 就可以(如 MaxSupportedBitPool 為 50 的話,改為 55 就可以)。
預設值每部 WM6 手機不同,根據 BitPool 設定為準(Diamond 預設為 101)。
一般而言,憑這個數值的預設值,可推定出該手機的最高 BitPool,但不能一概而論。
另外,WM6 預設的 A2DP 傳輸 Sample Rate 是 44.1KHz,如想改變的話,可以這樣做:
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\ 內新增 DWORD "SampleRate"
  數值:44100 → 44.1KHz (Default)
     48000 → 48.0KHz (Recommend)
     88200 → 88.2KHz 
     96000 → 96.0KHz

若要改的話,48000 就已經足夠,再高是沒有意義的,因為一般籃牙接收器沒有這個處理能力,耳機也沒有這個推動能力,音訊檔一般也只有 44.1/48.0KHz,而且改得太大的話,傳輸容量大增,只會拖慢整個系統,甚至令 Sound Drop 更嚴重。
  以下是參考數字:
     BitPool = 33, SampleRate = 44.1KHz, BitRate = 217kb/s 
     BitPool = 33, SampleRate = 48.0KHz, BitRate = 237kb/s 
     BitPool = 53, SampleRate = 44.1KHz, BitRate = 328kb/s 
     BitPool = 53, SampleRate = 48.0KHz, BitRate = 352kb/s
如果 Sound Drop 情況嚴重,可嘗試把 A2DP 及聲音裝置的執行設為最高優先:  HKLM\Drivers\BuiltIn\BtA2dpSnd\ 內新增 DWORD "Priority256"
  數值改為 254
  HKLM\Drivers\BuiltIn\WaveDev\Priority256
  把數值 149(Default) 改為 255

這個動作並不一定有作用,因為每部 WM6 手機的效能有異,軟硬件損耗亦不同。
以下是小弟的修改項目,經過兩個多小時的測試驗證的最高 A2DP 設定。
由於加強了 A2DP 的傳輸,令系統負擔重了,所以也改了一些系統設定。
A2DP 相關:
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\BitPool 30 → 58
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\MaxSupportedBitPool 30 → 70
  HKLM\Software\Microsoft\Bluetooth\AudioGateway\Capability 101 → 101
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\SampleRate 44100 → 48000 [add]
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\UseJointStereo 1 → 0
WM6 系統相關:
  HKLM\SYSTEM\GDI\GLYPHCACHE\limit 8192 → 32768
  HKLM\Drivers\BuiltIn\BtA2dpSnd\ Priority256 149 → 254 [add]
  HKLM\Drivers\BuiltIn\WaveDev\Priority256 149 → 255
TouchFLO3D 相關(Diamond Only):
  HKLM\Software\OEM\TFLOSettings\SpeedHigh 25 → 5
  HKLM\Software\OEM\TFLOSettings\SpeedLow 70 → 14
改良後,出來的音質稍為提高了,中高頻更實在之餘,期待的低頻更有力,人聲更清。
系統穩定性不變,但因傳輸容量大大地提高,所以有小許的被拖慢。
其餘的全是 WM 或軟硬體死症(如:連接問題、系統繁忙時出現的 Sound Drop 等)。
方案二
直接跳過 WM 處理音訊的步驟。
直接把以下 DWORD 刪除:  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\BitPool
  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\MaxSupportedBitPool
加上 Sample Rate 的設定:  HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\ 內新增 DWORD "SampleRate"
  數值:44100 → 44.1KHz (Default)
     48000 → 48.0KHz (Recommend)
     88200 → 88.2KHz 
     96000 → 96.0KHz

若要改的話,48000 就已經足夠,再高是沒有意義的,因為一般籃牙接收器沒有這個處理能力,耳機也沒有這個推動能力,音訊檔一般也只有 44.1/48.0KHz,而且改得太大的話,傳輸容量大增,只會拖慢整個系統,甚至令 Sound Drop 更嚴重。
HKLM\Software\Microsoft\Bluetooth\A2DP\Settings\UseJointStereo
  數值:0 → True Stereo
     1 → Joint Stereo

每部 WM6 手機預設值不同,一般也是 1 的。
在這個方案二,對這個設定就要看你的音源及裝置來決定。
部份 WM6 手機改了後,會有嚴重的雜音出現。
如果 Sound Drop 情況嚴重,可嘗試把 A2DP 及聲音裝置的執行設為最高優先:  HKLM\Drivers\BuiltIn\BtA2dpSnd\ 內新增 DWORD "Priority256"
  數值改為 254
  HKLM\Drivers\BuiltIn\WaveDev\Priority256
  把數值 149(Default) 改為 255

這個動作並不一定有作用,因為每部 WM6 手機的效能有異,軟硬件損耗亦不同。
在系統運行上,這樣是最順暢的,因為 CPU 資源多了出來,對低階 WM 機來說是一個福音。
不過,若果音源跟裝置的質素相差太多的話(一邊太低而另一邊太高),就會適得其反。
總之,這個方案二,對音源的質量及統一性是必要的,以 UseJointStereo 為例,可能一首歌很好,另一首感覺怪怪。
以下是小弟的音源質量。
來源:CD
檔案類型:MP3
位元速度:320 kps
Sample Rate:48000KHz
方案三
這是一個懶人做法,安裝一個 Diamond Tweak 的軟件就可以。
不過,看這個名字就知道,這是一個專為 HTC Diamond 而設的,其實也只是一個修改 Registry 代理程式,不過對其他 WM 手機會否有不良影響就不得而知了。
除了音訊相關的修改,也有其他針對 Diamond 及 WM 系統的相關 Tweak 設定,有興趣可以下載來用。

留言

此網誌的熱門文章

[教學]一起來開發遊戲吧 - Unity C# 基礎

QUMARION

[教學]一起來開發遊戲吧(二) - Character Controller, Pool System