Bound runtime sync analysis
This commit is contained in:
parent
c64fd9050e
commit
200186d4d5
8 changed files with 112 additions and 37 deletions
|
|
@ -11,7 +11,8 @@ public sealed class MimirAudioSynchronizationAnalyzer
|
|||
public IReadOnlyList<MimirAudioSynchronizationReport> Analyze(
|
||||
IEnumerable<MimirRollingStreamBuffer> buffers,
|
||||
string referenceSourceId,
|
||||
double approximateTimelineSeconds)
|
||||
double approximateTimelineSeconds,
|
||||
IReadOnlySet<string>? candidateSourceIds = null)
|
||||
{
|
||||
var audioBuffers = buffers
|
||||
.Where(buffer => buffer.Descriptor.Kind == MimirStreamKind.Audio)
|
||||
|
|
@ -47,6 +48,11 @@ public sealed class MimirAudioSynchronizationAnalyzer
|
|||
continue;
|
||||
}
|
||||
|
||||
if (candidateSourceIds != null && !candidateSourceIds.Contains(buffer.Descriptor.SourceId))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var commonEndNs = Math.Min(referenceLatest.Value.TimestampNs, buffer.Latest?.TimestampNs ?? 0);
|
||||
var candidateSamples = ExtractMonoWindow(buffer, out var candidateBlock);
|
||||
if (candidateSamples.Length == 0 || candidateBlock == null)
|
||||
|
|
@ -363,7 +369,11 @@ public sealed class MimirAudioSynchronizationAnalyzer
|
|||
return (0.0, 0.0, 0);
|
||||
}
|
||||
|
||||
var candidateByEvent = candidateObservations.ToDictionary(observation => observation.EventIndex);
|
||||
var candidateByEvent = candidateObservations
|
||||
.GroupBy(observation => observation.EventIndex)
|
||||
.ToDictionary(
|
||||
group => group.Key,
|
||||
group => group.OrderByDescending(observation => observation.Energy).First());
|
||||
var delays = new List<(double Delay, double Weight)>();
|
||||
foreach (var reference in referenceObservations)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue