Example #1
0
        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);
        }
Example #3
0
        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
        }
Example #5
0
 public void FreeNative(EntityManager man, Entity e, ref AudioNativeClip audioNativeClip)
 {
     AudioNativeCalls.FreeAudio(audioNativeClip.clipID);
 }