public void FreeNative(EntityManager man, Entity e, ref AudioNativeClip audioNativeClip) { if (!man.HasComponent <AudioClipUsage>(e)) { return; } AudioClipUsage audioClipUsage = man.GetComponentData <AudioClipUsage>(e); bool clipIsPlaying = audioClipUsage.playingRefCount > 0; if (clipIsPlaying) { AudioNativeCalls.SoundSourcePropertyMutexLock(); AudioNativeCalls.SoundSourceSampleMutexLock(); } AudioNativeCalls.FreeAudio(audioNativeClip.clipID); DynamicBuffer <AudioClipCompressed> audioClipCompressed = man.GetBuffer <AudioClipCompressed>(e); audioClipCompressed.ResizeUninitialized(0); if (clipIsPlaying) { AudioNativeCalls.SoundSourcePropertyMutexUnlock(); AudioNativeCalls.SoundSourceSampleMutexUnlock(); } }
public void FreeNative(EntityManager man, Entity e, ref AudioNativeClip audioNativeClip) { #if ENABLE_DOTSRUNTIME_PROFILER ProfilerStats.AccumStats.memAudioCount.Accumulate(-1); int mem = AudioNativeCalls.GetRequiredMemory(audioNativeClip.clipID); ProfilerStats.AccumStats.memAudio.Accumulate(-mem); ProfilerStats.AccumStats.memReservedAudio.Accumulate(-mem); ProfilerStats.AccumStats.memUsedAudio.Accumulate(-mem); ProfilerStats.AccumStats.audioSampleMemory.Accumulate(-mem); #endif AudioNativeCalls.FreeAudio(audioNativeClip.clipID); }
protected override void OnUpdate() { base.OnUpdate(); TinyEnvironment env = World.TinyEnvironment(); AudioConfig ac = env.GetConfigData <AudioConfig>(); AudioNativeCalls.PauseAudio(ac.paused); EntityCommandBuffer ecb = new EntityCommandBuffer(Allocator.Temp); Entities .WithNone <AudioClipLoadFromFileAudioFile>() .ForEach((Entity e, ref AudioNativeClip tag) => { AudioNativeCalls.FreeAudio(tag.clipID); ecb.RemoveComponent <AudioNativeClip>(e); }); ecb.Playback(EntityManager); ecb.Dispose(); }
protected override void OnUpdate() { base.OnUpdate(); var mgr = EntityManager; AudioConfig ac = GetSingleton <AudioConfig>(); AudioNativeCalls.PauseAudio(ac.paused); ReinitIfDefaultDeviceChanged(); ReinitIfNoAudioConsumed(ac.paused); // Remove any lingering AudioNativeSources which may have had their AudioSource // removed, otherwise we will continue playing looping clips Entities .WithStructuralChanges() .WithNone <AudioSource>() .ForEach((Entity e, ref AudioNativeSource source) => { AudioNativeCalls.Stop(source.sourceID); mgr.RemoveComponent <AudioNativeSource>(e); }).Run(); // Remove any lingering AudioNativeClips which may have had their AudioClip // removed, otherwise we will continue holding on to those resources Entities .WithStructuralChanges() .WithNone <AudioClipLoadFromFileAudioFile>() .ForEach((Entity e, ref AudioNativeClip tag) => { AudioNativeCalls.FreeAudio(tag.clipID); mgr.RemoveComponent <AudioNativeClip>(e); }).Run(); #if ENABLE_DOTSRUNTIME_PROFILER ProfilerStats.AccumStats.audioDspCPUx10.value = (long)(AudioNativeCalls.GetCpuUsage() * 10); #endif }
public void FreeNative(EntityManager man, Entity e, ref AudioNativeClip audioNativeClip) { AudioNativeCalls.FreeAudio(audioNativeClip.clipID); }