Add song target evidence records
This commit is contained in:
parent
8f2372d9d9
commit
37c580c800
10 changed files with 750 additions and 62 deletions
|
|
@ -36,7 +36,21 @@ public sealed class IpaTrialOrchestratorTests
|
|||
[new PrimitiveTimelineFact("contact_release_peak", "contact:contact", "released_flow", .12f, "flow", 2, 2, "release witness")]);
|
||||
|
||||
await IpaTrialResultCultCacheStore.UpsertResultsAsync(store, [result]);
|
||||
await IpaTrialResultCultCacheStore.UpsertSongChallengeEvidenceAsync(
|
||||
store,
|
||||
[
|
||||
new SongChallengeEvidenceDocument(
|
||||
"challenge-a:logmel-band-stats",
|
||||
"challenge-a",
|
||||
"logmel-band-stats",
|
||||
"text/csv",
|
||||
"band,mean,abs_delta_mean\n0,-1.2,.3",
|
||||
"sha256:evidence",
|
||||
"reference.wav",
|
||||
"2026-05-29T12:00:00.0000000Z")
|
||||
]);
|
||||
var loaded = await IpaTrialResultCultCacheStore.ReadResultsAsync(store);
|
||||
var evidence = await IpaTrialResultCultCacheStore.ReadSongChallengeEvidenceAsync(store);
|
||||
|
||||
var single = Assert.Single(loaded);
|
||||
Assert.Equal("trial-a", single.TrialId);
|
||||
|
|
@ -44,6 +58,9 @@ public sealed class IpaTrialOrchestratorTests
|
|||
Assert.Contains(single.Metrics, metric => metric.Name == "log_mel_cosine");
|
||||
Assert.Contains(single.KnownLies, lie => lie.Contains("not an IPA sample", StringComparison.Ordinal));
|
||||
Assert.Contains(single.TimelineFacts, fact => fact.Name == "contact_release_peak" && fact.Value > 0);
|
||||
var evidenceDocument = Assert.Single(evidence);
|
||||
Assert.Equal("logmel-band-stats", evidenceDocument.Kind);
|
||||
Assert.Contains("abs_delta_mean", evidenceDocument.Content, StringComparison.Ordinal);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
|||
|
|
@ -65,6 +65,40 @@ public sealed class PatchScriptTests
|
|||
Assert.Equal(.01f, lane.Modulator.Bias, 5);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParserSupportsStrudelLikePatternAndScaleSugar()
|
||||
{
|
||||
var patch = PatchScript.Parse("""
|
||||
scale name=lead_scale path=/seq/pitch freqs=493.883,587.33,659.255,698.457 degrees=0,1,3,2 step=.2
|
||||
pattern name=lead_gate path=/seq/gate pattern=x.-x step=.1 high=.8 low=.05
|
||||
voice wave=saw freq=@/seq/pitch gain=@/seq/gate sustain=30 decay=.2
|
||||
""");
|
||||
|
||||
Assert.Contains(patch.Parameters, parameter => parameter.Path == "/seq/pitch" && parameter.Unit == "Hz");
|
||||
Assert.Contains(patch.Parameters, parameter => parameter.Path == "/seq/gate");
|
||||
var scale = Assert.Single(patch.ControlCurves, curve => curve.Name == "lead_scale");
|
||||
Assert.Equal(ControlCurveInterpolation.Hold, scale.Interpolation);
|
||||
Assert.True(scale.Loop);
|
||||
Assert.Equal([493.883f, 587.33f, 698.457f, 659.255f], scale.Points.Select(point => point.Value).ToArray());
|
||||
var gate = Assert.Single(patch.ControlCurves, curve => curve.Name == "lead_gate");
|
||||
Assert.Equal([.8f, .05f, .05f, .8f], gate.Points.Select(point => point.Value).ToArray());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParserSupportsNamedScaleIntervals()
|
||||
{
|
||||
var patch = PatchScript.Parse("""
|
||||
scale path=/seq/pitch root=440 scale=minor-pentatonic-plus-tritone degrees=0,1,2,3 step=.25
|
||||
voice freq=@/seq/pitch gain=.1
|
||||
""");
|
||||
|
||||
var curve = Assert.Single(patch.ControlCurves);
|
||||
Assert.Equal(440, curve.Points[0].Value, 3);
|
||||
Assert.Equal(523.251f, curve.Points[1].Value, 3);
|
||||
Assert.Equal(587.33f, curve.Points[2].Value, 3);
|
||||
Assert.Equal(622.254f, curve.Points[3].Value, 3);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParserSupportsVoiceVowelFrames()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue