unsafe protected override void OnDispose() { DirectSoundWorld.criticalSection.Enter(); if (soundBuffers.Count != freeSoundBuffers.Count) { Log.Fatal("DirectSound.OnDispose: soundBuffers.Count == freeSoundBuffers.Count"); } for (int n = soundBuffers.Count - 1; n >= 0; n--) { IDirectSoundBuffer *soundBuffer = (IDirectSoundBuffer *)soundBuffers[n].ToPointer(); IDirectSoundBuffer.Release(soundBuffer); } soundBuffers.Clear(); freeSoundBuffers.Clear(); if (waveFormat != null) { NativeUtils.Free((IntPtr)waveFormat); waveFormat = null; } DirectSoundWorld.criticalSection.Leave(); base.OnDispose(); }
unsafe protected override void PreDetachVirtualChannel() { OpenALSoundWorld.criticalSection.Enter(); Al.alSourceStop(alSource); OpenALSoundWorld.CheckError(); if (currentSound is OpenALDataBufferSound) { if (currentSound is OpenALFileStreamSound) { OpenALSoundWorld.Instance.fileStreamRealChannels.Remove(this); } if (streamBuffer != null) { NativeUtils.Free((IntPtr)streamBuffer); streamBuffer = null; streamBufferSize = 0; } } Al.alSourcei(alSource, Al.AL_BUFFER, 0); OpenALSoundWorld.CheckError(); currentSound = null; OpenALSoundWorld.criticalSection.Leave(); }
unsafe protected override void PreDetachVirtualChannel() { DirectSoundWorld.criticalSection.Enter(); DirectFileStreamSound currentFileStreamSound = currentSound as DirectFileStreamSound; if (currentFileStreamSound != null) { DirectSoundWorld.Instance.fileStreamRealChannels.Remove(this); } if (currentSound3DBuffer != null) { IDirectSound3DBuffer8.Release(currentSound3DBuffer); currentSound3DBuffer = null; } if (currentSoundBuffer != null) { IDirectSoundBuffer.Stop(currentSoundBuffer); currentSound.FreeBuffer(currentSoundBuffer); currentSoundBuffer = null; } if (streamBuffer != null) { NativeUtils.Free((IntPtr)streamBuffer); streamBuffer = null; } needStopAfterBufferRead = false; streamBufferLength = 0; needStopVirtualChannel = false; currentSound = null; DirectSoundWorld.criticalSection.Leave(); }