2,694 Commits over 669 Days - 0.17cph!
Update: enable sound pooling by default
If something goes derp, can be disabled via audio.enablesoundpooling 0
Tests: was explicitly enabled over last 3 days while running all recent changes
Merge: from main
Tests: ran around on craggy with logs
Bugfix: don't leak looping sounds when quick-switching
It's possible that equipped items with sound effects (setup via sound player) can enable-then-disable across 2 frames, before SoundManager picks up the pending play request. If it's a looping sound(like torches burn loop) it would stay alive forever. Now we cleanup the pending requests on disable of sound player.
Tests: mousewheel quickswitched between rock and a torch and observed numbers in audio.printsounds - the burn loop is no longer accumulating.
Update: SoundManager pools internal lists
The pooling effect is minimal, but it achieves 2 small improvements:
- we don't hold lists in memory for sounds that don't reapper for a while - those can be reused in other parts of the code
- audio.printsounds no longer reports 0 active sounds per definintion
Tests: On craggy quickswitched between equipped items. Saw the various sounds appear and disapper in the logs.
Update: microphone drops any sounds it has accumulated on destroy
Tests: tested by playing the flute when exploding the microphone stand connected to a speaker
Update: MiningQuarry drops sound assets when destoyed (though it's invulnerable)
Tests: none, trivial change (same type of changes as previous)
Update: modular car's engine drops all sound resources on disable
Tests: blew up a modular car
Update: AmbianceWaveSounds recycles sounds on disable
Tests: none targetted(same type of change as before), but have been live on my branch for 2d while testing and working on other changes.
Update: Engine blend loop drops it's sound resources on disable
Tests: none, trivial change (same type of change as previous)
Update: Tree now drops it's sound resources on client destruction
- It also drops the Gain mod when fading out sound loop during fall
Tests: cut down a tree, saw relevant audio events in logs
Update: Traveling Vendor drops it's sound resources on client destruction
Tests: none, trivial change (same type of change as previous)
Update: Parachute and Sled drop their sound resources on destroy
Tests: none, trivial changes (same type of change as previous)
Update: CCTV and SpinnerWheel drop their sound resources on disable/destroy
Tests: none, trivial change (same type of change as previous)
Update: Sub, Snowmobile, Tugboar and Train drop their sound resources on disable/kill
- In Snowmobile's case Ski audio was previously (accidentally?) retained when sim stopped
- Train engine used to retain damage and engine reflection sounds (assume an accident/bug)
Tests: none, trivial changes (same type of changes as previously)
Update: CargoShip drops sounds resources on disable
- Also added a couple convenience StopXSound methods, since it has a bunch of different sounds.
Tests: none, trivial change (same type of change as before)
Update: Ferry drops it's sound resources when disabled
Tests: none, trivial change (same type of change as previous)
Bugfix: PatrolHeli now releases modulators alongside the sounds
Tests: none, trivial change
Bugfix: Drone now releases pitch modulator on destruction
Tests: none, trivial change
Update: Modular Vehicle drops sound resources on destruction
Tests: plugged in engine comps on Craggy's spawned vehicle, drove around in it. Put some timed c4 and drove until explosion - confirmed resources got released via logs.
Update: Helicopter now drops sound resources when disabled/retired
- Also fixed a potential NRE when requesting a sound fails
Tests: spawned an attack heli and flew around in it with jumping out at various stages. Also destroyed it to trigger sound recycling.
Bugfix: Bicycle now uses it's coasting sound when not pedaling
Tests: rode the bicycle with pedaling on and off.
Update: Bycicle drops all sound resources when sound definition changes
- Previously it tried to manage lifetime of modulators internally, but since we can pool it'll happen automatically now.
Tests: rode the bike with jumping off during different moments. Noclipped away and back, redid same actions - all stable.
Update: DPV stops all sounds when no longer simulating
In theory, there were edge cases where previously it was possible that some sounds would not be cleaned up.
Tests: rode the DPV, jumped off at various points, picked it up and redeployed. Noclipped around the area
Update: MovementSounds releases sound resources on disable
- Also got rid of IOnParentDestroying implementation - it's handled by OnDisable now
Tests: ran in water. Killed self mid run to test onDisable - all good
Update: Minigun and Fishing Rod drop their sounds on destroy/cleanup
Tests: Spooled up and fired the minigun with switching in between. Fished with switching at various stages(holding, throwing, fish catching, fish pulling).
Bugfix: Ignore sound fadeout requests on retired sounds
Because sound is a shared-ownership resource and we have scenarios where owners don't know that the sound sometimes has been retired, we need to be a bit more permissive with existing cleanup logic.
Tests: Had a fish bite with the fishing rod, started pulling then switched over to a different item, then tried fishing again - with sound pooling this would sometimes throw, but not anymore. Confirmed with audio logs that bad scenario did happen but didn't fail.
Bugfix: AmbienceEmitter now drops occlusion modulator on fade-out
Tests: noclipped around Craggy with audio recycling logs on - no NREs
Merge: from item_pooling
Fixes NRE when saving a player that was killed while crafting items and returned items would stack with existing inventory items
Tests: crafted low grade fuel with 1 extra fat in the inventory, killed before finishing the craft and saved the session on the server - no NRE
Merge: from main
Tests: editor build
Clean: remove CancelTask ReturnItems param
Param was always set to true.
Tests: Crafted to completion and with cancellation (voluntary + killing)
Update: rewrite the same bugfix a bit better
- More explicitly explained why it's needed
Tests: none, trivial change
Bugfix: Release items that we've moved from crafting tasks back to inventory.
Tests: Crafted low grade fuel with 4 fat in inventory, then killed self mid-craft and saved - no NRE
Update: GameSetup can load save with double-quotes
Makes it friendly with explorer's "copy as path" action.
Tests: loaded a procedural save
Merge: from main
Tests: none, trivial changes
Update: Implementing retiring of SoundModifier
Tests: none, trivial change
Optim: Recycle footsteps earlier
Previously sound would get recycled when the effect would be destroyed(1.7s), but it happens much later(instead of 0.5s)
Tests: Ran around on craggy - coast, grasslands, water.
Update: Log Sound stop-and-recycle requests
- Log level 3 for Audio
Tests: observed logs when running around (footsteps)
Update: updating audio debug output to make cross-referencing easier
Tests: Rode a zipline on Craggy, was able to track the looping sound
Bugfix: Zipline stops playing audio when reaching the end
This avoids trying to fade out a sound that was already recycled due GO being destroyed by server. Haven't found a better solution.
Tests: on Craggy with sound pooling enabled, used the zipline twice, then noclipped out in the distance, and rode the zipline twice - no NREs. Logs also didn't show double-retire
Update: rewrote the comment
Forgot to press save in VS before submitting.
Tests: none, trivial change
Update: Allow use of client-side commands for GameSetup in Editor context
This simplifies some testing scenarios.
Tests: Boted craggy with a couple client-only debug commands - they changed as required
Update: add sound logging under audio category
Tests: Ran in editor, confirmed output
Merge: from main
Tests: built in editor
Merge: from soundmodulator_leak
Fixing zipline NRE that my previous change caused. When not pooling, retail the modulators instead of trying to recreate them, since some scripts don't clear them properly.
Tests: rode the zipline twice on Craggy, then noclipped around the island to destroy sounds, then rode the zipline twice again - no NREs
Bugfix: don't clear modulators when not pooling, fixes zipline NRE
This was caused by my previous fix
Tests: rode the zipline twice on Craggy, then noclipped away from the island, and rode the zipline again - no NREs
Merge: from soundmodulator_leak
Fixing an assert flood on client by hiding a check behind soundpooling switch - this restores original wonky behavior.
Tests: On Craggy, flew around the island with noclip to trigger spawning/despawning of sound entities - didn't see any assertions.
Bugfix: when sound pooling is disabled, don't validate if we own the removed modulator
Originally, it didn't check but tried to return to the pool - this change restores this aspect.
Tests: noclipped on craggy across the entire world to cause entitiy destruction - no asserts
Update: Audio RPC codegen
Missed in my previous commit - support for audio.enablesoundpooling.
Tests: enabled the switch at runtime, produced assertions (expected)
Update: RPC Codegen
Somehow missed it despite generating previously.
Tests: validated that I can dynamically switch it(even if it triggers my asserts - it's intentional)
Merge: from soundmodulator_leak
Workarounds the AudioAmbience NREs by disabling pooling (audio.enablesoundpooling).
Tests: on Craggy shot up 20 scientists, rode a horse, cut down trees, placed 100 barricades - no uptick in pooling of sound modulators in telemetry. No old NREs triggered.