/* * VideoKit * Copyright © 2025 Yusuf Olokoba. All Rights Reserved. */ #nullable enable namespace VideoKit.Sources { using System; using Clocks; /// /// Media source for recording audio buffers from a `VideoKitAudioManager`. /// internal sealed class AudioManagerSource : IDisposable { #region --Client API-- /// /// Create an audio manager source. /// /// Audio manager. /// Handler to receive audio buffers. /// Clock for generating timestamps. public AudioManagerSource ( VideoKitAudioManager audioManager, Action handler, IClock? clock = null ) { this.audioManager = audioManager; this.handler = handler; this.clock = clock; audioManager.OnAudioBuffer += OnAudioBuffer; } public void Dispose () => audioManager.OnAudioBuffer -= OnAudioBuffer; #endregion #region --Operations-- private readonly VideoKitAudioManager audioManager; private readonly Action handler; private readonly IClock? clock; private void OnAudioBuffer (AudioBuffer srcBuffer) { using var audioBuffer = new AudioBuffer( srcBuffer.sampleRate, srcBuffer.channelCount, srcBuffer.data, clock?.timestamp ?? 0L ); handler(audioBuffer); } #endregion } }