Nakon gotovo 4 godine proučavanja ovoga mogu da kažem da su audiofilski Linux-i i snake oili-i sviranje qrca - uključujući i namenske plejere - bezglave sisteme a da nemju direktan pristup XMOS DAC..........
Sve MORA biti usmereno ka tome da se dobije stabilan, predvidiv i „čist“ put signala od aplikacije do DAC-a.
Da razložim po koracima:
udev pravila
Pravila u /etc/udev/rules.d/99-dacs.rules rade ovo:
Prepoznaju konkretne DAC uređaje po vendor/product ID (npr. Amanero, JLSounds, Topping D10s).
Dodeljuju im simboličke linkove u /dev/ kao što su /dev/dac_amanero, umesto generičkih card1, card2 (koji se mogu menjati pri svakom boot-u).
Ovde greše najčešće svi u podešavanjima....
Isključuju USB autosuspend (ATTR{power/control}="on") → ovo sprečava da kernel pokuša da uštedi energiju gašenjem USB porta, što može praviti klikove, dropout-e ili kašnjenje pri inicijalizaciji.
Ovo je bitno jer se dobija stabilnost: DAC je uvek na istoj putanji i neće „uspavati“ kernel između paketa.
ALSA konfiguracija {/etc/asound.conf}
Definiše se imenovani PCM i control interfejsi za svaki DAC.
Umesto da se koristi nešto kao aplay -D hw:2, sada možeš aplay -D amanero_mcs.
Postavlja se default DAC {u ovom slučaju Amanero MCS} znači da sve aplikacije koje koriste ALSA bez eksplicitne konfiguracije šalju zvuk direktno na njega.
Praktično: nema više traženja koji je hw:0,0 ili hw:1,0. Sve ide na izabrani DAC.
Buffer tuning
Ovo je najzanimljivije:
buffer_size 65536
period_size 16384
buffer_size = ukupan broj semplova u prstenastom baferu. Veliki bafer = stabilniji prenos, manja šansa za dropout ako CPU/IO malo „zakiksa“.
period_size = komad u koji ALSA seče bafer za ISR/DMA. Manji period = manji latency ali više IRQ-ova; veći period = veća latencija ali manji IRQ overhead.
Sa ovom postavkom dobija se super stabilan prenos (jer 64k semplova bafer praktično ne može da se „presuši“). Latencija je veća (desetine milisekundi), ali za pure hi-fi playback to nije problem.
Za slušanje muzike to je baš dobro jer ublažava jitter i USB timing probleme.
Bez ovoga:
DAC bi mogao svaki put da dobije drugu ALSA kartu (hw:0, hw:1…), pa skripte i aplikacije ne znaju gde da pošalju zvuk.
USB autosuspend ume da zezne inicijalizaciju, naročito kod XMOS/Amanero kontrolera. {čuje se kliktanje-pucketanje na numerama}
ALSA koristi podrazumevane bafere koji nisu uvek optimalni za high-end USB DAC-ove = mogući klipovi/dropout ako sistem nešto zauzme.
Sa ovim:
DAC uvek na istoj putanji (stabilnost).
Nema autosuspend gluposti (konzistentnost).
XMOS/Amanero DAC-ovi su osetljivi jer rade async USB audio. Ako OS ne može da isporučuje podatke po tačnom tempu, pojavljuju se micro-glitches {pucketanje ili mikropauze}. Zato su ova pravila i bafer tuning mnogo bitnija za njih nego za, recimo, PCIe zvuk ili integrisani HDA.
ALSA konfiguracija (sa hw: i bez Pulse-a) radi baš ono što WASAPI Exclusive radi na Windows = čisti bit-perfect prenos.
U praksi je čak stabilnije za USB DAC-ove (XMOS/Amanero) jer Linux ne upliće dodatne drajvere već koristi standardni USB Audio Class.