restructure audio cleanup
parent
450b08cbd8
commit
385783a846
|
@ -64,12 +64,16 @@ namespace MoonWorks.Audio
|
|||
};
|
||||
}
|
||||
|
||||
protected override unsafe void DisposeUnmanagedState()
|
||||
protected override unsafe void Dispose(bool disposing)
|
||||
{
|
||||
if (OwnsBufferData)
|
||||
if (!IsDisposed)
|
||||
{
|
||||
NativeMemory.Free((void*) BufferDataPtr);
|
||||
if (OwnsBufferData)
|
||||
{
|
||||
NativeMemory.Free((void*) BufferDataPtr);
|
||||
}
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,9 +90,16 @@ namespace MoonWorks.Audio
|
|||
/// <summary>
|
||||
/// Unloads the Ogg data, freeing resources.
|
||||
/// </summary>
|
||||
public override void Unload()
|
||||
public override unsafe void Unload()
|
||||
{
|
||||
DisposeUnmanagedState();
|
||||
if (Loaded)
|
||||
{
|
||||
FAudio.stb_vorbis_close(VorbisHandle);
|
||||
NativeMemory.Free((void*) FileDataPtr);
|
||||
|
||||
VorbisHandle = IntPtr.Zero;
|
||||
FileDataPtr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -136,17 +143,5 @@ namespace MoonWorks.Audio
|
|||
(uint) lengthInBytes,
|
||||
true);
|
||||
}
|
||||
|
||||
protected override unsafe void DisposeUnmanagedState()
|
||||
{
|
||||
if (Loaded)
|
||||
{
|
||||
FAudio.stb_vorbis_close(VorbisHandle);
|
||||
NativeMemory.Free((void*) FileDataPtr);
|
||||
|
||||
VorbisHandle = IntPtr.Zero;
|
||||
FileDataPtr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,9 +99,16 @@ namespace MoonWorks.Audio
|
|||
/// <summary>
|
||||
/// Unloads the qoa data, freeing resources.
|
||||
/// </summary>
|
||||
public override void Unload()
|
||||
public override unsafe void Unload()
|
||||
{
|
||||
DisposeUnmanagedState();
|
||||
if (Loaded)
|
||||
{
|
||||
FAudio.qoa_close(QoaHandle);
|
||||
NativeMemory.Free((void*) FileDataPtr);
|
||||
|
||||
QoaHandle = IntPtr.Zero;
|
||||
FileDataPtr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -153,17 +160,5 @@ namespace MoonWorks.Audio
|
|||
((UInt64)(bytes[4]) << 24) | ((UInt64)(bytes[5]) << 16) |
|
||||
((UInt64)(bytes[6]) << 8) | ((UInt64)(bytes[7]) << 0);
|
||||
}
|
||||
|
||||
protected override unsafe void DisposeUnmanagedState()
|
||||
{
|
||||
if (Loaded)
|
||||
{
|
||||
FAudio.qoa_close(QoaHandle);
|
||||
NativeMemory.Free((void*) FileDataPtr);
|
||||
|
||||
QoaHandle = IntPtr.Zero;
|
||||
FileDataPtr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,5 +36,14 @@ namespace MoonWorks.Audio
|
|||
/// <param name="filledLengthInBytes">How much data was actually filled in by the decode.</param>
|
||||
/// <param name="reachedEnd">Whether the end of the data was reached on this decode.</param>
|
||||
public abstract unsafe void Decode(void* buffer, int bufferLengthInBytes, out int filledLengthInBytes, out bool reachedEnd);
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (!IsDisposed)
|
||||
{
|
||||
Unload();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,23 +19,16 @@ namespace MoonWorks.Audio
|
|||
Device.AddResourceReference(SelfReference);
|
||||
}
|
||||
|
||||
protected virtual void DisposeManagedState() { }
|
||||
protected virtual void DisposeUnmanagedState() { }
|
||||
|
||||
protected void Dispose(bool disposing)
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!IsDisposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
DisposeManagedState();
|
||||
|
||||
Device.RemoveResourceReference(SelfReference);
|
||||
SelfReference.Free();
|
||||
}
|
||||
|
||||
DisposeUnmanagedState();
|
||||
|
||||
IsDisposed = true;
|
||||
}
|
||||
}
|
||||
|
@ -43,18 +36,11 @@ namespace MoonWorks.Audio
|
|||
~AudioResource()
|
||||
{
|
||||
#if DEBUG
|
||||
// If the graphics device associated with this resource was already disposed, we assume
|
||||
// that your game is in the middle of shutting down.
|
||||
if (!IsDisposed && Device != null && !Device.IsDisposed)
|
||||
{
|
||||
// If you see this log message, you leaked a graphics resource without disposing it!
|
||||
// This means your game may eventually run out of native memory for mysterious reasons.
|
||||
Logger.LogWarn($"A resource of type {GetType().Name} was not Disposed.");
|
||||
}
|
||||
// If you see this log message, you leaked an audio resource without disposing it!
|
||||
// We can't clean it up for you because this can cause catastrophic issues.
|
||||
// You should really fix this when it happens.
|
||||
Logger.LogWarn($"A resource of type {GetType().Name} was not Disposed.");
|
||||
#endif
|
||||
|
||||
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||
Dispose(disposing: false);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -214,10 +214,5 @@ namespace MoonWorks.Audio
|
|||
PlaybackInitiated = false;
|
||||
base.Reset();
|
||||
}
|
||||
|
||||
protected override void DisposeManagedState()
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,5 +145,22 @@ namespace MoonWorks.Audio
|
|||
buffers[i] = (IntPtr) NativeMemory.Alloc(BufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
protected override unsafe void Dispose(bool disposing)
|
||||
{
|
||||
if (!IsDisposed)
|
||||
{
|
||||
Stop();
|
||||
|
||||
for (int i = 0; i < BUFFER_COUNT; i += 1)
|
||||
{
|
||||
if (buffers[i] != IntPtr.Zero)
|
||||
{
|
||||
NativeMemory.Free((void*) buffers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -565,10 +565,14 @@ namespace MoonWorks.Audio
|
|||
);
|
||||
}
|
||||
|
||||
protected override void DisposeUnmanagedState()
|
||||
protected override unsafe void Dispose(bool disposing)
|
||||
{
|
||||
NativeMemory.Free(pMatrixCoefficients);
|
||||
FAudio.FAudioVoice_DestroyVoice(Handle);
|
||||
if (!IsDisposed)
|
||||
{
|
||||
NativeMemory.Free(pMatrixCoefficients);
|
||||
FAudio.FAudioVoice_DestroyVoice(Handle);
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue