Public Access
Implement meeting assistant v1
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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,
|
||||
[System.Runtime.CompilerServices.EnumeratorCancellation] CancellationToken cancellationToken)
|
||||
{
|
||||
await foreach (var _ in audio.WithCancellation(cancellationToken))
|
||||
{
|
||||
}
|
||||
|
||||
foreach (var segment in segments)
|
||||
{
|
||||
yield return segment;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user