Public Access
43 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|