Teljes útmutató: Ubuntu Studio dual‑boot telepítéstől a kalibrált, veszteségmentes lemezfelvételig — pontosan úgy, ahogy megépítettük.
A cél egy régi bakelit lemez digitalizálása volt, amilyen jó minőségben csak lehetséges, meglévő, 40–45 éves hi‑fi lánccal indulva:
A lánc gyenge pontja tudottan a Fosi és az FF15 — de a cél az volt, hogy induljunk el ezzel, és a digitalizáló oldalt (interfész, szoftver, workflow) építsük fel hi‑end szinten.
A Windows 11 mellé natív (nem virtuális gépes!) dual‑bootban települt az Ubuntu Studio — ez fontos, mert a valós idejű, alacsony‑latency audio‑rögzítéshez natív hardveres hozzáférés kell, VM‑es passthrough‑val ez megbízhatatlan.
Lemezkezelés → C: meghajtó → Kötet zsugorítása. Ha a Windows kevesebb szabad helyet enged zsugorítani, mint amennyi ténylegesen szabad, ennek tipikus okai:
# Hibernálás kikapcsolása (felszabadítja a hiberfil.sys helyét)
powercfg /h off
# Lemez‑töredezettségmentesítés, hogy a szabad hely összefüggő legyen
# (Start menü → "Lemezek töredezettségmentesítése és optimalizálása")
Dual boot előtt érdemes ellenőrizni a BitLocker állapotát:
manage-bde -status C:
Protection Status: Protection Off és Key Protectors: None Found szerepel, nincs aktív titkosítás — a particionálás biztonságos, nincs szükség helyreállítási kulcsra.A Gyors indítás kikapcsolása is ajánlott (Vezérlőpult → Energiagazdálkodás), mert enélkül a Windows nem zárja le teljesen a fájlrendszert kikapcsoláskor, ami dual boot esetén hibát okozhat.
Az Ubuntu Studio ISO‑t ubuntustudio.org/download-ról, a Rufus-t rufus.ie-ről töltve, majd Rufus‑szal írva egy min. 8 GB‑os pendrive‑ra vagy SD‑kártyára (utóbbihoz USB‑kártyaolvasó kellett).
Boot menü (a ProBook‑on F9 vagy ESC) → telepítő indítás → nyelv: Magyar, billentyűzet: Hungarian → particionálásnál „Telepítés Windows mellé” — ez automatikusan a felszabadított, particionálatlan helyre teszi az új rendszert, a Windows partíciót nem bántja.
Alapból a GRUB az Ubuntu‑t indítja el automatikusan, gyors, elrejtett menüvel. Ha inkább Windows induljon automatikusan, de a menü is látszódjon és válaszható legyen:
sudo nano /etc/default/grub
Állítsd be ezeket az értékeket:
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=-1
GRUB_DISABLE_OS_PROBER=false
A GRUB_TIMEOUT=-1 azt jelenti: a menü végtelenig vár, amíg kézzel nem választasz — nincs automatikus időzített indítás.
Alapból az os-prober (ami megtalálja a Windows Boot Managert) később fut le, mint a natív Linux‑bejegyzések generálása, ezért kerül a lista végére. Az átnevezéssel előrébb hozható:
sudo mv /etc/grub.d/30_os-prober /etc/grub.d/06_os-prober
sudo update-grub
Az update-grub kimenetében meg kell jelennie egy Found Windows Boot Manager on ... sornak — ez a megerősítés, hogy sikerült a felismerés.
A UMC204HD két bemenete Neutrik combo aljzat (XLR + 6,35 mm jack egyben, egy foglalatban) — ide XLR mikrofon vagy jack dugó is köthető, a kettő nem egyszerre. A Fosi RCA kimenetéhez tehát egy átalakító kábel kellett:
| Fosi kimenet | Szín | UMC bemenet |
|---|---|---|
| Bal (Left) | Fehér | 1‑es |
| Jobb (Right) | Piros | 2‑es |
A UMC204HD USB‑szinten (lsusb) és ALSA‑szinten (aplay -l / arecord -l) rendben látszott, de a PipeWire saját eszközlistájában (pactl list short sources) nem jelent meg. A WirePlumber (a PipeWire session‑manager‑e) egyszerűen nem vette fel Device‑ként.
# ALSA szinten látta:
arecord -l
# card 1: U192k [UMC204HD 192k], device 0: USB Audio
# PipeWire szinten viszont hiányzott:
pactl list short sources
A megoldás: megkerülni a PipeWire‑t, és közvetlenül ALSA‑n keresztül rögzíteni arecord-dal:
arecord -D hw:1,0 -f S32_LE -c 2 -r 192000 teszt.wav
Ha az arecord/ffmpeg ezt a hibát adja, valószínűleg egy másik program (pl. egy nyitva felejtett Ardour‑munkamenet) tartja lefoglalva az eszközt:
sudo fuser -v /dev/snd/pcmC1D0c
# majd a kiírt PID leállítása:
kill <PID>
A formátum ellenőrzésére három eszköz is jó:
soxi teszt.wav
ffprobe teszt.wav
file teszt.wav
A cél formátum: 192 kHz, 32 bit, sztereó PCM — ezt mindhárom eszköznek egyeznie kell:
Channels : 2
Sample Rate : 192000
Precision : 32-bit
Sample Encoding: 32-bit Signed Integer PCM
A UMC204HD natívan 32 biten ad ki adatot ALSA‑n keresztül (a hasznos 24 bites tartalmat 32 bites keretben) — ez nem veszteség, hanem a hardver natív working formátuma.
Hosszabb (10–20 perces) felvételeknél előfordulhat, hogy az USB‑hangkártya energiatakarékossági okból „elalszik” félidőben:
Leállítva. Újrakezdési kísérlet. Sikertelen. Újraindítás. Kész.
Ez egy rövid hang‑kihagyást/pattanást okoz a felvételben. Két beavatkozással kizárható:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1397", ATTR{idProduct}=="0508", TEST=="power/control", ATTR{power/control}="on"' \
| sudo tee /etc/udev/rules.d/99-usb-audio-no-suspend.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
Ellenőrzés, hogy tényleg érvénybe lépett-e (a UMC USB path‑jának power/control értéke on kell legyen, nem auto):
for d in /sys/bus/usb/devices/*/; do
if [ -f "${d}idVendor" ] && [ "$(cat ${d}idVendor 2>/dev/null)" = "1397" ]; then
echo "UMC204HD: $d"; cat "${d}power/control"
fi
done
Ez a szabály tartós — minden induláskor automatikusan érvénybe lép, nem kell újra beírni.
A végleges felvevő‑parancs: arecord nyersen ír egy csövön (pipe) keresztül a sox-nak, ami a bevezető csendet levágja, és a rögzítés Ctrl+C-ig megy (a korábban próbált automatikus, csend‑alapú leállás megbízhatatlannak bizonyult hosszú, csendes zenei részeknél — ezért maradt a kézi leállítás).
arecord -D hw:1,0 -f S32_LE -c 2 -r 192000 -t raw \
| sox -t raw -r 192000 -b 32 -e signed -c 2 - ~/vinyl/oldal_a.wav silence 1 0.1 0.1%
Másik terminálban, a fájl méretének növekedését figyelve:
watch -n 1 ls -lh ~/vinyl/oldal_a.wav
sox ~/vinyl/oldal_a.wav -n stat
A legfontosabb sorok:
| Mező | Mit jelent |
|---|---|
Maximum amplitude | Legmagasabb csúcs (1.0 = teljes digitális skála) |
RMS amplitude | Átlagos hangerő‑szint |
sox ~/vinyl/oldal_a.wav -n remix 1 stat # bal csatorna
sox ~/vinyl/oldal_a.wav -n remix 2 stat # jobb csatorna
ffmpeg -i ~/vinyl/oldal_a.wav -af astats=metadata=1:reset=0 -f null - 2>&1 \
| grep -i "clipped"
Maximum amplitude pontosan 1.000000, de itt 0 a clip‑szám, az még nem torzítás — csak azt jelenti, hogy a jel érintette a skála tetejét, anélkül, hogy túllépte volna.Egy hardveres lánc (hangszedő, előfok, kábelezés) szinte sosem tökéletesen szimmetrikus — nálunk kb. 0,7–1 dB eltérés volt mérhető a bal és jobb csatorna között. Ez szoftveresen, utólag pontosan korrigálható.
A képlet: szorzó = hangosabb csatorna RMS / halkabb csatorna RMS. Ahelyett, hogy zsebszámológéppel számolnád, a bc (parancssori számológép) egyenesen a terminálban elvégzi:
# cseréld ki a két RMS-értéket a sox stat kimeneteiből mért adatokra
echo "scale=4; 0.128486 / 0.117977" | bc -l
Ha a dB‑különbségre is kíváncsi vagy (nem kötelező a korrekcióhoz, csak tájékoztató):
echo "scale=2; 20 * l(0.128486 / 0.117977) / l(10)" | bc -l
A bc -l a -l kapcsolóval tölti be a matematikai függvénykönyvtárat, ami tartalmazza az l() (természetes logaritmus) függvényt — enélkül a bc nem ismerné a logaritmust.
Egyszerre, egy sorban, kiírva mindkettőt:
awk -v l=0.117977 -v r=0.128486 \
'BEGIN{printf "szorzó = %.4f (%.2f dB)\n", r/l, 20*log(r/l)/log(10)}'
Ha a bal csatorna volt a halkabb, a szorzót arra kell alkalmazni, majd egyben normalizálni is 0 dBFS‑re:
sox ~/vinyl/oldal_a.wav ~/vinyl/oldal_a_final.wav remix 1v1.089 2v1 gain -n
| Rész | Feladat |
|---|---|
remix 1v1.089 2v1 | Bal csatorna × 1,089 (kiegyenlítés), jobb változatlan |
gain -n | Normalizálás: a legmagasabb csúcs pontosan 0 dBFS‑re kerül |
Ellenőrzés a végén ugyanazokkal a remix … stat és astats … clipped parancsokkal, mint fentebb — cél: a két csatorna RMS‑e gyakorlatilag megegyezik, és nulla a clip‑szám.
A csendek automatikus felismerésére az ffmpeg silencedetect szűrője bizonyult a legmegbízhatóbbnak — a sox silence-es próbálkozások (százalékos küszöbbel) túl érzékenynek bizonyultak, és a lemez halkabb zenei részeit is csendnek nézték.
ffmpeg -i ~/vinyl/oldal_a_final.wav \
-af silencedetect=noise=-15dB:d=2 -f null - 2>&1 | grep silence
A -15dB küszöböt a konkrét lemez zajszintjéhez kalibráltuk, fokozatosan lazítva -50dB-ről. A d=2 azt jelenti: minimum 2 másodperces csend számít vágási pontnak.
ffmpeg -i ~/vinyl/oldal_a_final.wav -ss 0 -to 358.08 -c copy szam_01.wav
ffmpeg -i ~/vinyl/oldal_a_final.wav -ss 361.37 -to 636.44 -c copy szam_02.wav
ffmpeg -i ~/vinyl/oldal_a_final.wav -ss 646.04 -to 884.96 -c copy szam_03.wav
ffmpeg -i ~/vinyl/oldal_a_final.wav -ss 889.52 -c copy szam_04.wav
-c copy = nincs újrakódolás, a vágás gyors és veszteségmentes.
sudo apt install flac
flac --best --verify szam_01.wav
--best a legjobb (leglassabb, legkisebb fájlt adó) tömörítési szintet választja, --verify pedig visszafejti és összeveti az eredetivel írás közben — ha bármi eltérés lenne, azonnal jelzi.
ssh -p 1999 felhasznalo@szerver-cim
scp -P 1999 ~/vinyl/oldal_a_final.wav felhasznalo@szerver-cim:/home/felhasznalo/
ssh-nál kisbetűs -p, scp-nél nagybetűs -P a port kapcsolója — gyakori elgépelési hiba.Jelszó helyett SSH‑kulcs használata ajánlott (biztonságosabb, és script‑be sem kell jelszót írni):
ssh-keygen -t ed25519
ssh-copy-id -p 1999 felhasznalo@szerver-cim
RHEL/CentOS‑alapú szervereken (SELinux‑szal) egy root‑ként feltöltött fájl gyakran rossz biztonsági címkét kap, amit a webszerver nem enged kiszolgálni, még helyes Unix‑jogosultságok mellett is:
# ellenőrzés
ls -Z *.wav
# javítás: a helyes webszerver-címke beállítása
chcon -t httpd_sys_content_t fajlnev.wav
arecord -D hw:1,0 -f S32_LE -c 2 -r 192000 -t raw \
| sox -t raw -r 192000 -b 32 -e signed -c 2 - ~/vinyl/NEV.wav silence 1 0.1 0.1%
watch -n 1 ls -lh ~/vinyl/NEV.wav
soxi NEV.wav
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 NEV.wav
sox NEV.wav -n stat
sox NEV.wav -n remix 1 stat
sox NEV.wav -n remix 2 stat
ffmpeg -i NEV.wav -af astats=metadata=1:reset=0 -f null - 2>&1 | grep -i clipped
echo "scale=4; HANGOSABB_RMS / HALKABB_RMS" | bc -l
sox NEV.wav NEV_final.wav remix 1vSZORZO 2v1 gain -n
ffmpeg -i NEV_final.wav -af silencedetect=noise=-15dB:d=2 -f null - 2>&1 | grep silence
ffmpeg -i NEV_final.wav -ss KEZDET -to VEG -c copy szam_01.wav
flac --best --verify szam_01.wav
aplay NEV.wav
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1397", ATTR{idProduct}=="0508", TEST=="power/control", ATTR{power/control}="on"' \
| sudo tee /etc/udev/rules.d/99-usb-audio-no-suspend.rules
sudo udevadm control --reload-rules && sudo udevadm trigger