internal void OnWaveBankDestroyed() { IsDisposed = true; if (bankData != IntPtr.Zero) { if (bankDataLen != IntPtr.Zero) { FNAPlatform.FreeFilePointer(bankData); bankDataLen = IntPtr.Zero; } else { FAudio.FAudio_close(bankData); } bankData = IntPtr.Zero; } handle = IntPtr.Zero; selfReference = null; }
public SoundBank(AudioEngine audioEngine, string filename) { if (audioEngine == null) { throw new ArgumentNullException("audioEngine"); } if (String.IsNullOrEmpty(filename)) { throw new ArgumentNullException("filename"); } IntPtr bufferLen; IntPtr buffer = TitleContainer.ReadToPointer(filename, out bufferLen); FAudio.FACTAudioEngine_CreateSoundBank( audioEngine.handle, buffer, (uint)bufferLen, 0, 0, out handle ); FNAPlatform.FreeFilePointer(buffer); engine = audioEngine; selfReference = new WeakReference(this, true); dspSettings = new FAudio.F3DAUDIO_DSP_SETTINGS(); dspSettings.SrcChannelCount = 1; dspSettings.DstChannelCount = engine.channels; dspSettings.pMatrixCoefficients = Marshal.AllocHGlobal( 4 * (int)dspSettings.SrcChannelCount * (int)dspSettings.DstChannelCount ); engine.RegisterPointer(handle, selfReference); IsDisposed = false; }