forked from MoonsideGames/MoonWorks
fix StaticSoundInstance race condition and state
parent
5df08727c1
commit
c037b4cb69
|
@ -1 +1 @@
|
|||
Subproject commit 63071f2c309f6fc2193de1c6b85da0e31df80040
|
||||
Subproject commit 590cc3537f64d3b118f0001a2f2c111fcbd2b23f
|
|
@ -274,10 +274,11 @@ namespace MoonWorks.Audio
|
|||
{
|
||||
if (AvailableInstances.Count == 0)
|
||||
{
|
||||
AvailableInstances.Push(new StaticSoundInstance(Device, this, autoFree));
|
||||
AvailableInstances.Push(new StaticSoundInstance(Device, this));
|
||||
}
|
||||
|
||||
var instance = AvailableInstances.Pop();
|
||||
instance.AutoFree = autoFree;
|
||||
UsedInstances.Add(instance);
|
||||
return instance;
|
||||
}
|
||||
|
|
|
@ -32,21 +32,14 @@ namespace MoonWorks.Audio
|
|||
}
|
||||
}
|
||||
|
||||
public bool AutoFree { get; }
|
||||
public bool AutoFree { get; internal set; }
|
||||
|
||||
internal StaticSoundInstance(
|
||||
AudioDevice device,
|
||||
StaticSound parent,
|
||||
bool autoFree
|
||||
StaticSound parent
|
||||
) : base(device, parent.FormatTag, parent.BitsPerSample, parent.BlockAlign, parent.Channels, parent.SamplesPerSecond)
|
||||
{
|
||||
Parent = parent;
|
||||
AutoFree = autoFree;
|
||||
|
||||
if (AutoFree)
|
||||
{
|
||||
device.AddAutoFreeStaticSoundInstance(this);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Play()
|
||||
|
@ -87,6 +80,11 @@ namespace MoonWorks.Audio
|
|||
|
||||
FAudio.FAudioSourceVoice_Start(Voice, 0, operationSet);
|
||||
State = SoundState.Playing;
|
||||
|
||||
if (AutoFree)
|
||||
{
|
||||
Device.AddAutoFreeStaticSoundInstance(this);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Pause()
|
||||
|
|
Loading…
Reference in New Issue