feat(06-02): add freqCfgs parameter to RunSynthesis
- Change RunSynthesis signature to accept injected config map (D-10) - Replace hardcoded synth.ClassFreqConfigs with passed-in freqCfgs - Update all three RunSynthesis calls in encode tests to pass synth.ClassFreqConfigs
This commit is contained in:
+3
-2
@@ -41,9 +41,10 @@ func EncodeMP3(outputPath string, frames [][2]float64, sampleRate int) error {
|
|||||||
|
|
||||||
// RunSynthesis consumes a slice of WindowSnapshots, renders audio via OscillatorBank,
|
// RunSynthesis consumes a slice of WindowSnapshots, renders audio via OscillatorBank,
|
||||||
// and encodes to MP3 at outputPath.
|
// and encodes to MP3 at outputPath.
|
||||||
|
// freqCfgs is the merged config map from config.Load (D-10: injected, not hardcoded).
|
||||||
// Returns an error if zero packets were captured (D-16 / OUT-03).
|
// Returns an error if zero packets were captured (D-16 / OUT-03).
|
||||||
// The zero-packet guard runs BEFORE file creation to avoid leaving an empty file on disk.
|
// The zero-packet guard runs BEFORE file creation to avoid leaving an empty file on disk.
|
||||||
func RunSynthesis(snapshots []classify.WindowSnapshot, outputPath string) error {
|
func RunSynthesis(snapshots []classify.WindowSnapshot, outputPath string, freqCfgs map[classify.TrafficClass]synth.FreqConfig) error {
|
||||||
// D-16 / OUT-03: Zero-packet guard — check BEFORE creating output file
|
// D-16 / OUT-03: Zero-packet guard — check BEFORE creating output file
|
||||||
var totalPackets int64
|
var totalPackets int64
|
||||||
for _, snap := range snapshots {
|
for _, snap := range snapshots {
|
||||||
@@ -54,7 +55,7 @@ func RunSynthesis(snapshots []classify.WindowSnapshot, outputPath string) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Render all windows to stereo frames
|
// Render all windows to stereo frames
|
||||||
bank := synth.NewBank(1.0, synth.ClassFreqConfigs) // tau=1.0s per D-07
|
bank := synth.NewBank(1.0, freqCfgs) // tau=1.0s per D-07
|
||||||
var allFrames [][2]float64
|
var allFrames [][2]float64
|
||||||
for _, snap := range snapshots {
|
for _, snap := range snapshots {
|
||||||
frames := bank.RenderWindow(snap)
|
frames := bank.RenderWindow(snap)
|
||||||
|
|||||||
+3
-3
@@ -53,7 +53,7 @@ func TestMP3Valid(t *testing.T) {
|
|||||||
tmpFile.Close()
|
tmpFile.Close()
|
||||||
defer os.Remove(tmpPath)
|
defer os.Remove(tmpPath)
|
||||||
|
|
||||||
if err := RunSynthesis(snaps, tmpPath); err != nil {
|
if err := RunSynthesis(snaps, tmpPath, synth.ClassFreqConfigs); err != nil {
|
||||||
t.Fatalf("RunSynthesis: %v", err)
|
t.Fatalf("RunSynthesis: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ func TestZeroPacketError(t *testing.T) {
|
|||||||
tmpPath := "/tmp/netsynth-should-not-exist-" + t.Name() + ".mp3"
|
tmpPath := "/tmp/netsynth-should-not-exist-" + t.Name() + ".mp3"
|
||||||
defer os.Remove(tmpPath)
|
defer os.Remove(tmpPath)
|
||||||
|
|
||||||
err := RunSynthesis([]classify.WindowSnapshot{}, tmpPath)
|
err := RunSynthesis([]classify.WindowSnapshot{}, tmpPath, synth.ClassFreqConfigs)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected error for empty snapshot slice, got nil")
|
t.Fatal("expected error for empty snapshot slice, got nil")
|
||||||
}
|
}
|
||||||
@@ -118,7 +118,7 @@ func TestZeroPacketError(t *testing.T) {
|
|||||||
{Counts: map[classify.TrafficClass]int64{}, TotalPackets: 0, WindowIndex: 0},
|
{Counts: map[classify.TrafficClass]int64{}, TotalPackets: 0, WindowIndex: 0},
|
||||||
{Counts: map[classify.TrafficClass]int64{}, TotalPackets: 0, WindowIndex: 1},
|
{Counts: map[classify.TrafficClass]int64{}, TotalPackets: 0, WindowIndex: 1},
|
||||||
}
|
}
|
||||||
err2 := RunSynthesis(zeroSnaps, tmpPath2)
|
err2 := RunSynthesis(zeroSnaps, tmpPath2, synth.ClassFreqConfigs)
|
||||||
if err2 == nil {
|
if err2 == nil {
|
||||||
t.Fatal("expected error for zero-packet snapshots, got nil")
|
t.Fatal("expected error for zero-packet snapshots, got nil")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user