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