forked from Manuel/meeting-assistant
feat: add local Resemblyzer speaker recognition
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using MeetingAssistant.Speakers;
|
||||
|
||||
namespace MeetingAssistant.Tests;
|
||||
|
||||
public sealed class SpeakerIdentityMergerTests
|
||||
{
|
||||
[Fact]
|
||||
public void MergeIntoRetainsNewestDistinctVoiceVectorsUpToConfiguredLimit()
|
||||
{
|
||||
var now = DateTimeOffset.UtcNow;
|
||||
var target = new SpeakerIdentity
|
||||
{
|
||||
CanonicalName = "Chris",
|
||||
VoiceVectors =
|
||||
[
|
||||
Vector("oldest", 1, now.AddMinutes(-4)),
|
||||
Vector("duplicate", 2, now.AddMinutes(-3))
|
||||
]
|
||||
};
|
||||
var source = new SpeakerIdentity
|
||||
{
|
||||
VoiceVectors =
|
||||
[
|
||||
Vector("duplicate", 2, now.AddMinutes(-2)),
|
||||
Vector("newer", 3, now.AddMinutes(-1)),
|
||||
Vector("newest", 4, now)
|
||||
]
|
||||
};
|
||||
|
||||
SpeakerIdentityMerger.MergeInto(target, source, maxSnippets: 3, maxVoiceVectors: 3);
|
||||
|
||||
Assert.Equal(["duplicate", "newer", "newest"], target.VoiceVectors.Select(vector => vector.Fingerprint).Order());
|
||||
Assert.All(target.VoiceVectors, vector => Assert.Same(target, vector.SpeakerIdentity));
|
||||
}
|
||||
|
||||
private static SpeakerVoiceVector Vector(string fingerprint, byte value, DateTimeOffset createdAt)
|
||||
{
|
||||
return new SpeakerVoiceVector
|
||||
{
|
||||
ModelId = "model",
|
||||
Dimensions = 256,
|
||||
VectorBytes = Enumerable.Repeat(value, 256 * sizeof(float)).ToArray(),
|
||||
Fingerprint = fingerprint,
|
||||
CreatedAt = createdAt
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user