Add meeting assistant speech and summary automation

This commit is contained in:
2026-05-21 09:55:39 +02:00
parent 1e97d2b9ff
commit 48d98d9cbb
63 changed files with 5143 additions and 151 deletions
@@ -0,0 +1,49 @@
using MeetingAssistant.Transcription;
using NAudio.Wave;
namespace MeetingAssistant.Speakers;
public sealed class WavSpeakerSnippetExtractor : ISpeakerSnippetExtractor
{
public Task<byte[]> ExtractSnippetAsync(
string audioPath,
IReadOnlyList<TranscriptionSegment> speakerSegments,
CancellationToken cancellationToken)
{
if (speakerSegments.Count == 0 || !File.Exists(audioPath))
{
return Task.FromResult<byte[]>([]);
}
var start = speakerSegments.Min(segment => segment.Start);
var end = speakerSegments.Max(segment => segment.End);
if (end <= start)
{
return Task.FromResult<byte[]>([]);
}
using var reader = new WaveFileReader(audioPath);
using var output = new MemoryStream();
using (var writer = new WaveFileWriter(output, reader.WaveFormat))
{
reader.CurrentTime = start;
var bytesRemaining = reader.WaveFormat.AverageBytesPerSecond * (end - start).TotalSeconds;
var buffer = new byte[reader.WaveFormat.AverageBytesPerSecond];
while (bytesRemaining > 0)
{
cancellationToken.ThrowIfCancellationRequested();
var bytesToRead = (int)Math.Min(buffer.Length, bytesRemaining);
var bytesRead = reader.Read(buffer, 0, bytesToRead);
if (bytesRead == 0)
{
break;
}
writer.Write(buffer, 0, bytesRead);
bytesRemaining -= bytesRead;
}
}
return Task.FromResult(output.ToArray());
}
}