6.3 Audio sistēma
Stundas uzdevums: Pievienot mūziku, skaņas efektus un audio buses spēlei.
80 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~20 min) - atskaņo pirmo skaņu · 2. uzdevums (~25 min) - pievieno fona mūziku ar pāreju · 3. uzdevums (~20 min) - sakārto skaļumu ar audio bus · Iesniegšana (~5 min).
Pirms sāc: atver savu spēli. Sagatavo divus audio failus: vienu īsu efektu un vienu garāku mūziku. Ja tādu nav, lejupielādē bezmaksas skaņas no freesound.org vai opengameart.org.
Teorija: Godot audio
Godot audio sistēma izmanto AudioStreamPlayer nodes ar audio bus arhitektūru.
using Godot;
// Atskaņot SFX
AudioStreamPlayer sfx = GetNode<AudioStreamPlayer>("SFX");
sfx.Stream = ResourceLoader.Load<AudioStream>("res://sounds/jump.ogg");
sfx.Play();
// Mūzika ar fade-in
private void PlayMusicFadeIn(string path)
{
musicPlayer.Stream = ResourceLoader.Load<AudioStream>(path);
musicPlayer.VolumeDb = -30;
musicPlayer.Play();
CreateTween().TweenProperty(musicPlayer, "volume_db", -10.0, 2.0); // fade up
}
Audio buses: Master → Music, SFX, Voice. Lietotājs var pielāgot katru atsevišķi.
Kā šo izmantot projektā
Atceries: ar redzamu efektu editorā nepietiek. Paskaidro, kura C# klase glabā stāvokli, kura metode to maina un kā Godot node struktūra izmanto šo kodu.
Pārbaudi: UI signāli, audio darbības, debug izvade un publicēšanas sagatave ir sasaistīta ar C# spēles stāvokli.
public class PolishCheckpoint
{
public string Lesson = "6.3 Audio sistēma";
public bool UsesCSharp = true;
public bool ConnectsUiSignals = true;
public bool RoutesAudioEvents = true;
public bool VerifiesExportBuild = true;
}
Praktiskie uzdevumi
1. uzdevums -
Atskaņo pirmo skaņu
Beigās spēle noskanēs, kad kaut kas notiek.
- Ievelc audio failu projekta mapē, piemēram
res://sounds/jump.ogg. - Pievieno scēnai
AudioStreamPlayermezglu ar nosaukumuSFX. - Pārliecinies, ka faila sākumā ir
using Godot;. - Paņem mezglu ar
AudioStreamPlayer sfx = GetNode<AudioStreamPlayer>("SFX");. - Izsauc
sfx.Play();lēciena vai savākšanas brīdī. - Būvē un pārbaudi skaņu.
- Izsauc notikumu ļoti ātri vairākas reizes un pieraksti, kas notiek ar skaņu.
Gatavs, kad: notikuma brīdī atskan skaņa, un tu esi pierakstījis, kas notiek, atkārtojot to ļoti ātri.
2. uzdevums -
Pievieno fona mūziku ar pāreju
Beigās mūzika sāksies mīksti, nevis uzreiz pilnā skaļumā.
- Pievieno otru
AudioStreamPlayerar nosaukumuMusic. - Iestati tā audio failu un ieslēdz atkārtošanos importa iestatījumos.
- Iestati sākumā skaļumu uz
music.VolumeDb = -40;. - Izveido Tween, kas vienā sekundē paceļ skaļumu līdz 0 dB.
- Palaid un ieklausies, vai mūzika ienāk pakāpeniski.
- Pievieno arī izejošu pāreju, kad spēle beidzas.
- Pieraksti, kāpēc skaļumu mēra decibelos, nevis procentos.
Gatavs, kad: mūzika ienāk pakāpeniski, atkārtojas bez pauzes un beigās izgaist.
3. uzdevums -
Sakārto skaļumu ar audio bus
Beigās spēlētājs varēs atsevišķi regulēt mūziku un efektus.
- Atver apakšā cilni Audio.
- Izveido divus jaunus bus:
MusicunSFX. - Piesaisti katru atskaņotāju savam bus Inspector panelī.
- Pievieno iestatījumu logam divus
HSlidermezglus. - Savieno tos ar
AudioServer.SetBusVolumeDb(AudioServer.GetBusIndex("Music"), valueDb);. - Pārbaudi, ka mūzikas slīdnis nemaina efektu skaļumu.
- Iestati mūziku uz nulli un pārbaudi, ka efekti joprojām skan.
Gatavs, kad: abi slīdņi darbojas neatkarīgi: izslēdzot mūziku, skaņas efekti joprojām atskan.
Papildu uzdevums - Saglabā skaļuma iestatījumus
Ja pamatdarbs ir gatavs, atceries spēlētāja izvēli.
- Saglabā abu bus skaļumu JSON failā ar 5.3 stundas
SaveManager. - Ielādē tos spēles startā.
- Iestati slīdņu pozīcijas pēc ielādētajām vērtībām.
- Aizver spēli un palaid no jauna.
- Pārbaudi, ka skaļums palicis tāds, kādu to atstāji.
Gatavs, kad: pēc spēles restarta skaļuma slīdņi ir tajā pašā vietā, kur tu tos atstāji.
Ko sagatavo
Stundas mērķis: Tavā spēlē skan skaņas efekti un fona mūzika ar mīkstām pārejām, un mūziku ar efektiem var regulēt atsevišķi caur diviem audio bus.
GitHub krātuvē jābūt:
- README.md ievietota video saite ar skaņu, kurā dzirdama mūzikas ienākšana un vismaz viens skaņas efekts.
- Ekrānuzņēmums ar Audio cilni, kurā redzami tavi divi bus.
- C# fails ar audio kodu.
- README.md: kāpēc skaļumu mēra decibelos un kāpēc mūziku un efektus tur atsevišķos bus.
Kā iesniedz: Veic commit un push. Skolotāja norādītajā vietā ievieto tikai GitHub krātuves saiti; visiem prasītajiem failiem, README.md pierakstiem un pierādījumiem jābūt pašā krātuvē.
Biežākās kļūdas
- Skaņa nestrādā: stream nav ielādēts vai bus mute.
- Lag music start: OGG fails liels - ielādē to ar
ResourceLoader.Loadjau līmeņa sākumā. - SFX cuts off: Lieto pool, lai daudzi vienlaikus.
Godot ekrānuzņēmumi
Koda piemērs (paplašināts)
using Godot;
using System.Collections.Generic;
public partial class AudioManager : Node
{
private readonly List<AudioStreamPlayer> sfxPool = new();
private AudioStreamPlayer musicPlayer;
private const int PoolSize = 8;
public override void _Ready()
{
for (int i = 0; i < PoolSize; i++)
{
AudioStreamPlayer player = new AudioStreamPlayer();
player.Bus = "SFX";
AddChild(player);
sfxPool.Add(player);
}
musicPlayer = new AudioStreamPlayer();
musicPlayer.Bus = "Music";
AddChild(musicPlayer);
}
public void PlaySfx(string path)
{
foreach (AudioStreamPlayer player in sfxPool)
{
if (!player.Playing)
{
player.Stream = ResourceLoader.Load<AudioStream>(path);
player.Play();
return;
}
}
}
public void PlayMusic(string path)
{
musicPlayer.Stream = ResourceLoader.Load<AudioStream>(path);
musicPlayer.Play();
}
}