Remove bridge.newSynthState & add 1 to RandSeed during Render calls, so now an empty struct corresponds to the Sointu default behavior.

This commit is contained in:
Veikko Sariola
2020-10-28 20:03:21 +02:00
parent 8183c698da
commit 23e8bc0c5f
3 changed files with 9 additions and 11 deletions

View File

@ -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
}

View File

@ -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")
}

View File

@ -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)
}