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

65 lines
2.3 KiB
C#

using MeetingAssistant.Recording;
using MeetingAssistant.Transcription;
namespace MeetingAssistant.Tests;
public sealed class AzureSpeechRecognitionPipelineTests
{
[Fact]
public async Task FinishedTranscriptUsesLiveDiarizedAzureSegments()
{
await using var pipeline = new AzureSpeechRecognitionPipeline(
new StaticTranscriptionProvider(
[
new TranscriptionSegment(TimeSpan.Zero, TimeSpan.FromSeconds(1), "Guest-1", "hello"),
new TranscriptionSegment(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), "Guest-2", "there")
]));
await pipeline.InitializeAsync(CancellationToken.None);
await pipeline.WriteAsync(new AudioChunk([1, 0], 16000, 1), CancellationToken.None);
await pipeline.CompleteAsync(CancellationToken.None);
var liveSegments = new List<TranscriptionSegment>();
await foreach (var segment in pipeline.ReadLiveTranscriptAsync(CancellationToken.None))
{
liveSegments.Add(segment);
}
var finishedSegments = await pipeline.ReadFinishedTranscriptAsync(
"ignored.wav",
new SpeechRecognitionPipelineOptions(5),
CancellationToken.None);
Assert.Equal(liveSegments, finishedSegments);
Assert.Collection(
finishedSegments,
first => Assert.Equal("Guest-1", first.Speaker),
second => Assert.Equal("Guest-2", second.Speaker));
}
private sealed class StaticTranscriptionProvider : IStreamingTranscriptionProvider
{
private readonly IReadOnlyList<TranscriptionSegment> segments;
public StaticTranscriptionProvider(IReadOnlyList<TranscriptionSegment> segments)
{
this.segments = segments;
}
public async IAsyncEnumerable<TranscriptionSegment> TranscribeAsync(
IAsyncEnumerable<AudioChunk> audio,
SpeechRecognitionPipelineOptions options,
[System.Runtime.CompilerServices.EnumeratorCancellation] CancellationToken cancellationToken)
{
await foreach (var _ in audio.WithCancellation(cancellationToken))
{
}
foreach (var segment in segments)
{
yield return segment;
}
}
}
}