Rókalyuk (aka wormhole) vs. StepMania, no meg a használhatatlan Realtek "hangkártyák"

Kezdjük a legeslegelején. ASIO4All ide vagy oda, csodálatosabbnál csodálatosabb driverupdate-ek ide vagy oda, a Realtek hangkártyák semmilyen komolyabb célra nem használhatók. Hardverszinten nem tudok részletesebben nyilatkozni róluk, de a drivereik… Imádom, amikor downgrade-elnem kell drivert, mert az új még rosszabb meg ilyenek. Nagy küzdelem árán ki lehet belőle csikarni valami 26 msec latency-t, ami pont semmire nem jó. Úgyhogy tényleg vegyétek komolyan, amit írtam: a Realtek hangkártyák a legjobban KIKAPCSOLVA működnek. (Ha lesz valami komolyabb, rendszerszinten letiltom, nincs szükség hulladékra a rendszerben.)

Az örök, nagy tapasztalat: vihetsz le bárhova akárhányszázezer értékű technikát, kábelből, adapterből, átalakítóból mindig kevés lesz. Nem tudom, ezzel még hányszor fogom megszívni, de mostmár komolyan gondolkodom egy mindenes kábelkészleten, mert ez így tűrhetetlen. Hasonló problémák kiváltására született a következő agyament technikai megoldás, ami az ágyúval verebet fejbe tipikus esete.

A probléma: szeretnénk áthidalni egy keverő és egy számítógép közötti távolságot. (Lásd: nincs elég hangkábel.) Ez kb. olyan 20 méter. A zene, ami szólna, a laptopon futó StepMania (DDR-szoftver, még gyengébbek kedvéért: ritmusjáték) kimenete. Ezt kellene eljuttatni a másik pontba. Rendelkezésre áll még egy laptop, wifi / UTP kábel dögivel.

Megoldás: a két gép közé az UTP kábellel szülj egy gigabites LAN-t. Telepíts a StepMania-s gépre egy VST hostot (én a VSThost nevűt használtam hihi, ami egyébként egy roppant kellemes kis ósulis tesztkörnyezet VST-knek vagy ha szekvencer nélkül akarsz VSTi-ket használni. Mostmár van double precision változata is…). Aztán a VSThost-ot etesd meg a wormhole nevű VST effekttel. A másik gépen (ez volt az én notim) is nyiss egy VST hostot (itt már stílszerűen Ableton Live futott, nem tudom érzékeled-e… :D ) és ott is egy wormhole. Innentől a wormhole a hálózaton át tudja tolni szépen az egyik gépen futó bemenetéről az adatot a másik gépen futó kimenetére. (És ezt egész sok sávval meg tudja csinálni amúgy.) Azon a gépen, amin a játék megy, csak rá kell állítani a wormhole bemenetére a Windows-os sztereo keverőt, innentől a StepMania-s gépen fut a játék, a másik játék meg a keverő mellé, ahonnan már van elég hosszú kábel és a technikából már jöhet is ki a hang.

Józanabbak fejében azért itt már jópár kérdés felmerül. Főképp latency terén. Előre szólok, nem teljesen értem az egész rendszernek a működését, mert ahhoz jópár nem annyira nyilvánvaló mechanizmust kéne tesztelni. Annyit tudok, hogy mókásabbnál mókásabb hack-ek árán (amiben az ötpercenkénti alt-tab is benne volt, de erről majd később…) sikerült valami játszható latency-t kialakítani. Összegzem a tapasztalatokat:

  • mindkét laptop Realtek hangkártyával van szerelve, na olyan volt az ASIO4All konfigjuk is (1024 sample alá be se próbálj menni, hardverbuffer esélytelen stb.); csak itt összeszedhettünk 26 msec-et oldalanként.

  • a wormhole bufferméret-beállítása eléggé vicces. Gigabites LAN-on olyat produkált, hogy sírtam tőle: egyik pillanatban 0 buffermérettel hibátlanul megy percekig (!!!), aztán a másikban elkezd szanaszét hullani a hang. (Mi lett volna WLAN-on, ahol még packetloss is van?) De ugyanezt változó rendszerességgel megcsinálja 1500 sample-ös bufferrel is… és ezt az Aion-féle feketemágia fixálja ki jól.

  • Aion-féle feketemágia: Alt-Tabozz a StepMania-ról a VSThost-ra majd vissza, a prioritásváltástól valahogy helyrejön a buffer annyira, hogy ne akadjon és megint megy egy darabig. (Próbáltam én okoskodni, hogy a VSThost majd kap egy kis érdekes prioriást - volt ott még time critical is, ne félj… - de esélytelen.)

Most ha itt egy elméleti latency-számítás jönne, az igen vicces eredményt hozna. Jön ki a StepMania-ból a hang DirectX-en (gondolom én, ez a jobbik eset…), aztán valahogy a sztereo keverőből visszajut az ASIO-s inputra (nah, itt van plusz latency vagy se? Szerintem van…. ). Wormhole barátunk megkapja, áttolja a LAN-on. A másik oldalon levő wormhole-os buffer szedi össze a cuccot (megintcsak vicces ugye…), aztán még rá az ASIO-s kimeneti latency és kijutott a jel. Őszintén szólva fogalmam sincs, hogy ebből hogy jött ki játszható latency. Sokat segített volna rajta egy komolyabb hangkártya, de akkor már inkább megvettük volna azt a 20 méter RCA-t :D

Mai mesénk tanulsága: vagy legyél bekattant Live-os mint Scorchio, vagy legyen nálad kábel, vagy hagyd a fenébe.

Mai mesénk tanulsága játékfejlesztőknek: ha már zenés játékot írsz, rakj bele olyan library-t, ami képes detektálni az elérhető hangkártya-meghajtófelületeket és használd dinamikusan a legjobbat. Nem hiszem el, hogy nem lett volna jobb, ha minimum 70 msec-kel pontosabb a Stepmania…