private void StartReadBuffer() { Debug.Assert(_readBuffer == null); // OnAudioFilterRead reads the variable concurrently, but the update is atomic // so we don't need a lock. _readBuffer = _source.CreateReadBuffer(); }
private void StopReadBuffer() { lock (_readBufferLock) { // Under lock so OnAudioFilterRead won't use the buffer while/after it is disposed. _readBuffer.Dispose(); _readBuffer = null; } }
// Must be called within Unity main thread. private void StartStreaming() { Debug.Assert(_readBuffer == null); // OnAudioFilterRead reads the variable concurrently, but the update is atomic // so we don't need a lock. _readBuffer = Track.CreateReadBuffer(); _isLive = true; IsStreaming = true; AudioStreamStarted.Invoke(this); }
// Must be called within Unity main thread. private void StopStreaming() { _isLive = false; AudioStreamStopped.Invoke(this); IsStreaming = false; lock (_readBufferLock) { // Under lock so OnAudioFilterRead won't use the buffer while/after it is disposed. _readBuffer.Dispose(); _readBuffer = null; } }