diff --git a/bridge/bridge.go b/bridge/bridge.go index a162039..a767999 100644 --- a/bridge/bridge.go +++ b/bridge/bridge.go @@ -94,7 +94,9 @@ func (synth *Synth) Render(state *SynthState, buffer []float32) error { return errors.New("Render writes stereo signals, so buffer should have even length") } maxSamples := len(buffer) / 2 + state.RandSeed += 1 // if you initialize with empty struct, you will get randseed 1 which is sointu default behavior errcode := C.su_render((*C.Synth)(synth), (*C.SynthState)(state), (*C.float)(&buffer[0]), C.int(maxSamples)) + state.RandSeed -= 1 if errcode > 0 { return errors.New("Render failed") } @@ -124,7 +126,9 @@ func (synth *Synth) RenderTime(state *SynthState, buffer []float32, maxtime int) } samples := C.int(len(buffer) / 2) time := C.int(maxtime) + state.RandSeed += 1 // if you initialize with empty struct, you will get randseed 1 which is sointu default behavior errcode := int(C.su_render_time((*C.Synth)(synth), (*C.SynthState)(state), (*C.float)(&buffer[0]), &samples, &time)) + state.RandSeed -= 1 if errcode > 0 { return -1, -1, errors.New("RenderTime failed") } @@ -185,9 +189,3 @@ func (s *SynthState) Release(voice int) { cs := (*C.SynthState)(s) cs.SynthWrk.Voices[voice].Release = 1 } - -func NewSynthState() *SynthState { - s := new(SynthState) - s.RandSeed = 1 - return s -} diff --git a/bridge/bridge_test.go b/bridge/bridge_test.go index 0da25b0..e3ff3d2 100644 --- a/bridge/bridge_test.go +++ b/bridge/bridge_test.go @@ -31,15 +31,15 @@ func TestBridge(t *testing.T) { if err != nil { t.Fatalf("bridge compile error: %v", err) } - state := bridge.NewSynthState() + var state bridge.SynthState state.Trigger(0, 64) buffer := make([]float32, 2*su_max_samples) - err = synth.Render(state, buffer[:len(buffer)/2]) + err = synth.Render(&state, buffer[:len(buffer)/2]) if err != nil { t.Fatalf("first render gave an error") } state.Release(0) - err = synth.Render(state, buffer[len(buffer)/2:]) + err = synth.Render(&state, buffer[len(buffer)/2:]) if err != nil { t.Fatalf("first render gave an error") } diff --git a/song/song_test.go b/song/song_test.go index b837d5c..a889919 100644 --- a/song/song_test.go +++ b/song/song_test.go @@ -42,8 +42,8 @@ func TestSongRender(t *testing.T) { if err != nil { t.Fatalf("Compiling patch failed: %v", err) } - state := bridge.NewSynthState() - buffer, err := song.Render(synth, state) + var state bridge.SynthState + buffer, err := song.Render(synth, &state) if err != nil { t.Fatalf("Render failed: %v", err) }