Files
meeting-assistant/MeetingAssistant.Tests/RollingAudioBufferTests.cs

43 lines
1.4 KiB
C#

using MeetingAssistant.Recording;
using NAudio.Wave;
namespace MeetingAssistant.Tests;
public sealed class RollingAudioBufferTests
{
[Fact]
public void TryExtractWavReturnsRequestedRangeFromBufferedPcm()
{
var buffer = new RollingAudioBuffer(TimeSpan.FromSeconds(10));
buffer.Append(new AudioChunk(Samples(0, 1, 2, 3), SampleRate: 2, Channels: 1));
buffer.Append(new AudioChunk(Samples(4, 5, 6, 7), SampleRate: 2, Channels: 1));
var wav = buffer.TryExtractWav(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(3));
using var reader = new WaveFileReader(new MemoryStream(wav));
var bytes = new byte[reader.Length];
var read = reader.Read(bytes, 0, bytes.Length);
Assert.Equal(bytes.Length, read);
Assert.Equal(Samples(2, 3, 4, 5), bytes);
}
[Fact]
public void TryExtractWavDropsAudioOutsideRetentionWindow()
{
var buffer = new RollingAudioBuffer(TimeSpan.FromSeconds(1));
buffer.Append(new AudioChunk(Samples(0, 1), SampleRate: 1, Channels: 1));
buffer.Append(new AudioChunk(Samples(2, 3), SampleRate: 1, Channels: 1));
var wav = buffer.TryExtractWav(TimeSpan.Zero, TimeSpan.FromSeconds(1));
Assert.Empty(wav);
}
private static byte[] Samples(params short[] samples)
{
var bytes = new byte[samples.Length * sizeof(short)];
Buffer.BlockCopy(samples, 0, bytes, 0, bytes.Length);
return bytes;
}
}