4.4. fejezet: Hang (.ogg, .wss)
Kezdőlap | << Előző: Anyagok | Hang | Következő: DayZ Tools munkafolyamat >>
Bevezetés
A hangdizájn a DayZ modolás egyik leginkább belemerülős aspektusa. Egy puska dörrenésétől az erdei szélzúgásig a hang kelti életre a játékvilágot. A DayZ az OGG Vorbis formátumot használja elsődleges hangformátumként, és a hanglejátszást a config.cpp-ben definiált CfgSoundShaders és CfgSoundSets réteges rendszerén keresztül konfigurálja. Ennek a csővezetéknek a megértése -- a nyers hangfájltól a térbe helyezett játékbeli hangig -- elengedhetetlen bármilyen modhoz, amely egyéni fegyvereket, járműveket, környezeti effekteket vagy UI visszajelzéseket vezet be.
Ez a fejezet a hangformátumokat, a konfigurációvezérelt hangrendszert, a 3D térbeli hangot, a hangerő és távolság csillapítást, a ciklikus lejátszást és az egyéni hangok DayZ modhoz adásának teljes munkafolyamatát tárgyalja.
Tartalomjegyzék
- Hangformátumok
- CfgSoundShaders és CfgSoundSets
- Hang kategóriák
- 3D térbeli hang
- Hangerő és távolság csillapítás
- Ciklikus hangok
- Egyéni hangok hozzáadása modhoz
- Hanggyártó eszközök
- Gyakori hibák
- Bevált gyakorlatok
Hangformátumok
OGG Vorbis (elsődleges formátum)
Az OGG Vorbis a DayZ elsődleges hangformátuma. Minden egyéni hangot .ogg fájlként kell exportálni.
| Tulajdonság | Érték |
|---|---|
| Kiterjesztés | .ogg |
| Kodek | Vorbis (veszteséges tömörítés) |
| Mintavételi frekvenciák | 44100 Hz (szabványos), 22050 Hz (elfogadható környezeti hangokhoz) |
| Csatornák | Monó (3D hangokhoz) vagy Sztereó (zenéhez/UI-hoz) |
| Minőségi tartomány | -1 és 10 között (5-7 ajánlott játékhangokhoz) |
Fő szabályok az OGG-hoz a DayZ-ben
- A 3D térbeli hangoknak MONO-nak KELL lenniük. Ha sztereó fájlt adsz meg 3D hangnak, a motor nem biztos, hogy megfelelően térbeli hangot csinál belőle, vagy figyelmen kívül hagyhat egy csatornát.
- Az UI és zenei hangok lehetnek sztereók. Nem térbeli hangok (menük, HUD visszajelzés, háttérzene) helyesen működnek sztereóban.
- A mintavételi frekvencia legyen 44100 Hz a legtöbb hanghoz.
WSS (régi formátum)
A WSS régi hangformátum a korábbi Bohemia címekből (Arma sorozat). A DayZ még betöltheti a WSS fájlokat, de az új modoknak kizárólag OGG-t kell használniuk.
CfgSoundShaders és CfgSoundSets
A DayZ hangrendszere kétrétegű konfigurációs megközelítést használ, amelyet a config.cpp-ben definiálunk. Egy SoundShader definiálja, milyen hangfájlt játsszon le és hogyan, míg egy SoundSet definiálja, hol és hogyan hallható a hang a világban.
A kapcsolat
config.cpp
|
|--> CfgSoundShaders (MIT játsszon: fájl, hangerő, frekvencia)
| |
| |--> MyShader hivatkozik --> sound\my_sound.ogg
|
|--> CfgSoundSets (HOGYAN játsszon: 3D pozíció, távolság, térbeli)
|
|--> MySoundSet hivatkozik --> MyShaderA játékkód és más konfigurációk SoundSet-ekre hivatkoznak, soha nem közvetlenül SoundShaderekre.
CfgSoundShaders
A SoundShader a nyers hangos tartalmat és alapvető lejátszási paramétereket definiálja:
class CfgSoundShaders
{
class MyMod_GunShot_SoundShader
{
// Hangfájlok tömbje -- a motor véletlenszerűen választ egyet
samples[] =
{
{"MyMod\sound\gunshot_01", 1}, // {útvonal (kiterjesztés nélkül), valószínűségi súly}
{"MyMod\sound\gunshot_02", 1},
{"MyMod\sound\gunshot_03", 1}
};
volume = 1.0; // Alap hangerő (0.0 - 1.0)
range = 300; // Maximális hallható távolság (méterben)
rangeCurve[] = {{0, 1.0}, {300, 0.0}}; // Hangerő csökkenési görbe
};
};SoundShader tulajdonságok
| Tulajdonság | Típus | Leírás |
|---|---|---|
samples[] | tömb | {útvonal, súly} párok listája. Az útvonal nem tartalmazza a fájl kiterjesztését. |
volume | float | Alap hangerő szorzó (0.0-tól 1.0-ig). |
range | float | Maximális hallható távolság méterben. |
rangeCurve[] | tömb | {távolság, hangerő} pontok tömbje, amely a csillapítást definiálja a távolság függvényében. |
frequency | float | Lejátszási sebesség szorzó. 1.0 = normál, 0.5 = fél sebesség (alacsonyabb hangmagasság), 2.0 = dupla sebesség (magasabb hangmagasság). |
Fontos: A
samples[]útvonal NEM tartalmazza a fájl kiterjesztését. A motor automatikusan hozzáfűzi az.ogg(vagy.wss) kiterjesztést a lemezen található fájl alapján.
CfgSoundSets
A SoundSet egy vagy több SoundShadert csomagol be és definiálja a térbeli és viselkedési tulajdonságokat:
class CfgSoundSets
{
class MyMod_GunShot_SoundSet
{
soundShaders[] = {"MyMod_GunShot_SoundShader"};
volumeFactor = 1.0; // Hangerő skálázás (a shader hangerő felett alkalmazva)
frequencyFactor = 1.0; // Frekvencia skálázás
spatial = 1; // 1 = 3D térbeli, 0 = 2D (HUD/menü)
doppler = 0; // 1 = Doppler effekt engedélyezése
loop = 0; // 1 = folyamatos ismétlés
};
};SoundSet tulajdonságok
| Tulajdonság | Típus | Leírás |
|---|---|---|
soundShaders[] | tömb | SoundShader osztálynevek listája a kombináláshoz. |
volumeFactor | float | További hangerő szorzó a shader hangerő felett alkalmazva. |
frequencyRandomizer | float | Véletlenszerű hangmagasság variáció (0.0 = nincs, 0.1 = +/- 10%). |
spatial | int | 1 3D térbeli hanghoz, 0 2D-hez (UI, zene). |
doppler | int | 1 a Doppler hangmagasság eltolás engedélyezéséhez mozgó forrásoknál. |
loop | int | 1 folyamatos ismétléshez, 0 egyszeri lejátszáshoz. |
distanceFilter | int | 1 az aluláteresztő szűrő alkalmazásához távolságnál (tompított távoli hangok). |
occlusionFactor | float | Mennyire tompítják a falak/terep a hangot (0.0-tól 1.0-ig). |
Hang kategóriák
Fegyverhangok
A fegyverhangok a DayZ legösszetettebb hangjai, jellemzően több SoundSet-et tartalmaznak egyetlen lövés különböző aspektusaihoz:
Lövés leadva
|--> Közeli lövés SoundSet (a "bumm" közelebbről hallva)
|--> Távoli lövés SoundSet (a morajlás/visszhang távolról hallva)
|--> Utózörej SoundSet (a rákövetkező visszhang)
|--> Szuperszonikus csattanás SoundSet (golyó átrepül a fej felett)
|--> Mechanikus SoundSet (zárciklus, tár behelyezés)Környezeti hangok
Környezeti hangok az atmoszférához:
class MyMod_Wind_SoundSet
{
soundShaders[] = {"MyMod_Wind_SoundShader"};
volumeFactor = 0.6;
spatial = 0; // Nem térbeli (környezeti surround)
loop = 1; // Folyamatos ismétlés
};UI hangok
Felületi visszajelzési hangok (gomb kattintások, értesítések):
class MyMod_ButtonClick_SoundSet
{
soundShaders[] = {"MyMod_ButtonClick_SoundShader"};
volumeFactor = 0.8;
spatial = 0; // 2D -- a hallgató fejében szól
loop = 0;
};Járműhangok
A járművek összetett hangkonfigurációkat használnak több komponenssel:
- Motor alapjárat -- ciklikus, hangmagasság változik a fordulatszámmal
- Motor gyorsulás -- ciklikus, hangerő és hangmagasság a gázadással skálázódik
- Gumiabroncs zaj -- ciklikus, hangerő a sebességgel skálázódik
- Dudálás -- kiváltott, ciklikus amíg tartják
- Ütközés -- egyszeri az ütközéskor
3D térbeli hang
A DayZ 3D térbeli hangot használ a hangok játékvilágban való pozícionálásához. Amikor egy fegyver 200 méterre tőled balra dörren, a bal oldali hangszóródból/fülhallgatódból hallod megfelelő hangerő csökkentéssel.
A 3D hang követelményei
- A hangfájlnak monónak kell lennie. Sztereó fájlok nem térbeli hangként jelennek meg helyesen.
- A SoundSet
spatialértékének1-nek kell lennie. Ez engedélyezi a 3D pozícionáló rendszert. - A hangforrásnak világ pozícióval kell rendelkeznie. A motornak szüksége van koordinátákra az irány és távolság kiszámításához.
3D hangok kiváltása szkriptből
// Térbeli hang lejátszása világ pozícióban
void PlaySoundAtPosition(vector position)
{
EffectSound sound;
SEffectManager.PlaySound("MyMod_Rifle_Shot_SoundSet", position);
}
// Hang lejátszása objektumhoz csatolva (együtt mozog vele)
void PlaySoundOnObject(Object obj)
{
EffectSound sound;
SEffectManager.PlaySoundOnObject("MyMod_Engine_SoundSet", obj);
}Hangerő és távolság csillapítás
Tartomány görbe
A SoundShader-ben lévő rangeCurve[] definiálja, hogyan csökken a hangerő a távolsággal. {távolság, hangerő} párok tömbje:
rangeCurve[] =
{
{0, 1.0}, // 0m-nél: teljes hangerő
{50, 0.7}, // 50m-nél: 70% hangerő
{150, 0.3}, // 150m-nél: 30% hangerő
{300, 0.0} // 300m-nél: néma
};Előre definiált hangerő görbék
| Görbe neve | Viselkedés |
|---|---|
"InverseSquare" | Valósághű csökkenés (hangerő = 1/távolság^2). Természetes hangzás. |
"Linear" | Egyenletes csökkenés maximumtól nulláig a tartományon. |
"Logarithmic" | Hangos közelről, gyorsan csökken közepes távolságnál, majd lassan halkulik. |
Ciklikus hangok
A ciklikus hangok folyamatosan ismétlődnek, amíg kifejezetten le nem állítják őket. Motorokhoz, környezeti atmoszférához, riasztásokhoz és bármilyen fenntartott hanghoz használatosak.
Ciklikus lejátszás szkriptből
// Ciklikus hang indítása
EffectSound m_AlarmSound;
void StartAlarm(vector position)
{
if (!m_AlarmSound)
{
m_AlarmSound = SEffectManager.PlaySound("MyMod_Alarm_SoundSet", position);
}
}
// Ciklikus hang leállítása
void StopAlarm()
{
if (m_AlarmSound)
{
m_AlarmSound.Stop();
m_AlarmSound = null;
}
}Hangfájl előkészítése ciklusokhoz
A zökkenőmentes ciklizáláshoz magának a hangfájlnak is tisztán kell ismétlődnie:
- Nulla-átmenet az elején és a végén. A hullámformának mindkét végponton nulla amplitúdónál kell átmennie, hogy elkerülje a kattanást/pattanást az ismétlési pontnál.
- Egyező eleje és vége. A fájl végének zökkenőmentesen kell keverednie az elejével.
- Nincs halkulás be/ki. A halkulások hallhatók lennének minden ismétlésnél.
- Teszteld a ciklust Audacity-ben. Válaszd ki a teljes klipet, engedélyezd a ciklikus lejátszást, és figyelj kattanásokra vagy megszakításokra.
Egyéni hangok hozzáadása modhoz
Teljes munkafolyamat
1. lépés: Hangfájlok előkészítése
- Rögzítsd vagy szerezd be a hangodat.
- Szerkeszd Audacity-ben (vagy az általad preferált hangszerkesztőben).
- 3D hangokhoz: konvertáld monóvá.
- Exportáld OGG Vorbis formátumban (minőség 5-7).
2. lépés: Rendezés a mod könyvtárban
MyMod/
sound/
weapons/
rifle_shot_01.ogg
rifle_shot_02.ogg
ambient/
wind_loop.ogg
ui/
click_01.ogg
config.cpp3. lépés: SoundShaderek definiálása a config.cpp-ben
4. lépés: Hivatkozás a fegyver/tárgy konfigurációból
5. lépés: Építés és tesztelés
- Csomagold a PBO-t (használd a
-packonlyopciót, mivel az OGG fájlok nem igényelnek binarizálást). - Indítsd el a játékot a betöltött moddal.
- Teszteld a hangot a játékban különböző távolságoknál.
Hanggyártó eszközök
Audacity (ingyenes, nyílt forráskódú)
Az Audacity az ajánlott eszköz DayZ hanggyártáshoz:
- Letöltés: audacityteam.org
- OGG export: File --> Export --> Export as OGG
- Monó konverzió: Tracks --> Mix --> Mix Stereo Down to Mono
- Normalizálás: Effect --> Normalize (csúcs beállítása -1 dB-re a vágás megelőzéséhez)
- Zajeltávolítás: Effect --> Noise Reduction
- Ciklus tesztelés: Transport --> Loop Play (Shift+Space)
Egyéb hasznos eszközök
| Eszköz | Cél | Ár |
|---|---|---|
| Audacity | Általános hangszerkesztés, formátum konverzió | Ingyenes |
| Reaper | Professzionális DAW, haladó szerkesztés | $60 (személyes licenc) |
| FFmpeg | Parancssor alapú kötegelt hangkonverzió | Ingyenes |
| Ocenaudio | Egyszerű szerkesztő valós idejű előnézettel | Ingyenes |
Gyakori hibák
1. Sztereó fájl 3D hanghoz
Tünet: A hang nem térbeli, középen szól vagy csak az egyik fülben. Javítás: Konvertáld monóvá exportálás előtt. A 3D térbeli hangokhoz monó hangfájlok szükségesek.
2. Fájl kiterjesztés a samples[] útvonalban
Tünet: A hang nem szól, nincs hiba a naplóban (a motor csendben nem találja a fájlt). Javítás: Távolítsd el az .ogg kiterjesztést a samples[]-ban lévő útvonalból. A motor automatikusan hozzáadja.
// HELYTELEN
samples[] = {{"MyMod\sound\gunshot_01.ogg", 1}};
// HELYES
samples[] = {{"MyMod\sound\gunshot_01", 1}};3. Hiányzó CfgPatches requiredAddons
Tünet: A SoundShaderek vagy SoundSetek nem ismertek fel, a hangok nem szólnak. Javítás: Add hozzá a "DZ_Sounds_Effects" elemet a CfgPatches requiredAddons[] tömbhöz.
4. Túl rövid hatótávolság
Tünet: A hang hirtelen elnémul rövid távolságnál, természetellenesen hat. Javítás: Állítsd a range értéket valósághű értékre. A lövések 300-800m-re hallatszanak, a léptek 20-40m-re, a hangok 50-100m-re.
5. Nincs véletlenszerű variáció
Tünet: A hang ismétlődőnek és mesterségesnek tűnik többszöri hallgatás után. Javítás: Adj meg több mintát a SoundShader-ben és adj frequencyRandomizer-t a SoundSet-hez hangmagasság variációhoz.
6. Vágás / torzítás
Tünet: A hang recseg vagy torzít, különösen közelről. Javítás: Normalizáld a hanganyagodat -1 dB vagy -3 dB csúcsra az Audacity-ben exportálás előtt.
Bevált gyakorlatok
Mindig exportáld a 3D hangokat monó OGG-ként. Ez az egyetlen legfontosabb szabály. A sztereó fájlok nem lesznek térbeliek.
Adj meg 3-5 minta változatot a gyakran hallott hangokhoz (lövések, léptek, becsapódások). A véletlenszerű kiválasztás megelőzi az azonos ismétlődő hangok "géppuska effektusát".
Használj
frequencyRandomizer-t 0.03 és 0.08 között természetes hangmagasság variációhoz. Még az enyhe variáció is jelentősen javítja az észlelt hangminőséget.Állíts be valósághű hatótávolság értékeket. Tanulmányozd a vanilla DayZ hangokat referenciaként. Puska lövés 600-800m tartomány, hangtompított lövés 150-200m, léptek 20-40m.
Rétegezd a hangjaidat. Az összetett hangos események (lövések) több SoundSet-et kell használjanak: közeli lövés + távoli morajlás + utózörej/visszhang.
Tesztelj több távolságnál. Sétálj el a hangforrástól a játékban és ellenőrizd, hogy a csillapítási görbe természetesnek tűnik-e.
Rendezd a hang könyvtáradat. Használj alkönyvtárakat kategóriánként (
weapons/,ambient/,ui/,vehicles/). Egy lapos könyvtár 200 OGG fájllal kezelhetetlen.Tartsd ésszerűen a fájlméreteket. A játék hang nem igényel stúdió minőséget. Az OGG minőség 5-7 elegendő. A legtöbb egyedi hangfájl 500 KB alatt legyen.
Navigáció
| Előző | Fel | Következő |
|---|---|---|
| 4.3 Anyagok | 4. rész: Fájlformátumok és DayZ Tools | 4.5 DayZ Tools munkafolyamat |
