MPD period_time 與 ALSA period_sizeALSA 是Linux核心中,為音效設備的驅動程式並提供應用程式介面。
在shairport-sync(Airplay)和 squeezelite的設定中,有ALSA的 period_size & buffer_size 可以調整數值,數值大小會影響聲音品質。在不同的USB速度下,好聽的數值也不盡相同。
而在mpd之下,是用period_time & buffer_time 來調整,這又和ALSA的類似,但需要花點時間理解。period_time 調對,層次會變豐富,音樂表情變化多。
以下用44100Hz的檔案格式播放為基準計算:
MPD 使用的 period_time 和 ALSA 的參數 period_size 有下面公式可以轉換:
period_size@ALSA = period_time@MPD * 0.0441
若是period_size@MPD 的值好聽,套用在Squeezelite 和 Shairport-sync (Airport),就是 period_size@ALSA。
小弟的硬體是 USB 3.2 -> HUB -> DDC 下,period_time@MPD 設定為 1764,period_size@ALSA 就可設為 78。
可以用
cat /proc/asound/card0/pcm0p/sub0/hw_params 觀察
- 代碼: 選擇全部
[root@ArchQ:Q441 ~]$ cat /proc/asound/card0/pcm0p/sub0/hw_params
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 78
buffer_size: 467
至於 buffer_time 和 buffer_size,就把 period 乘以5 至 6倍 就可。
用period_size@ALSA 的值反推為period_time@MPD 比較快。
所以下面是小弟最後採用的數值:
period_time = 1000000 / 44100 * 78 = 1769
buffer_time = 1000000 / 44100 * 78 * 6 = 10612
另外 mpd 的 audio_buffer_size 與資料讀取速度有關,正常而言是越小越好,最小值為128。
若要使用光碟機直接播放,就先用預設值2048,之後再往數值小調一些,不會斷音就可。
MPD 升頻Bit Depth:原來是16, 可用24, 32,越大越好,看DAC能耐。
Upsampling Two Multiple:以2的次方倍來升頻,預設值0,就是不升頻。數值1 = x2,就是44.1 x2 or 48 x 2。同理 數值 2 = 2的二次方 = x4,就是44.1 x 4 or 48 x 4。它會自行判斷檔案格式自動升頻為相對應的頻率。也是要看DAC能耐,同軸最高只能到192KHz,數值直接設定為2就可。
---
在shairport-sync 有
config (請先update) 可以設定 period_size (預設值 78),buffer_size 就自動 = period_size * 6 。
若需要手動調整,就自請行編輯 /etc/在shairport-snyc.conf (134行)
至於Bit Depth,output_format = "S32_LE", 或S24_LE。
#ArchQ #軟體 #進階
MPD&ArchQ@Intel12600(AX1600i) -> McFifo(GaN140W) -> Audiomat Maestro 4 Reference -> Audiomat Sopos -> JMR VOCE Grande; STSD香寶線、大寶喇叭線