/*
* 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
}
}