Buzztrax / buzztrax

Buzztrax is a modular music composer for Linux.
buzztrax.org
GNU Lesser General Public License v2.1
114 stars 13 forks source link

"Gaps" in Buzzmachines cause silence in downstream machines #110

Open dlbeswick opened 3 years ago

dlbeswick commented 3 years ago

image

As seen above, the symsin is set up to make a very quick pulse; a click. The PanzerDelay echoes every four ticks and the freeverb has a very long reverb.

What I see is that the freeverb only outputs when the PanzerDelay is actually outputting something; the reverb doesn't tail off as expected.

Always calling GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_GAP) in gst_bml_transform_transform_ip_* fixes this issue, and the reverberation happens as it should.

Is this a BML issue or freeverb issue, or something else?

Example song here: bug-bml-gaps.txt

ensonic commented 3 years ago

This code https://github.com/Buzztrax/buzztrax/blob/69288014de74ba0831761bfa0f49745778b561b8/src/gst/bml/common.c#L1092 is checking results from buzzmachine effects https://github.com/Buzztrax/buzztrax/blob/master/src/gst/bml/gstbmltransform.c#L346 and sets the gap flag is the buffer is all silence.

Luckily we do have the source for panzerdelay and it see to return the has_data flag: https://github.com/Buzztrax/buzzmachines/blob/master/FSM/PanzerDelay/PanzerDelay.cpp#L724

Also the freeverb plugin seems to explicitly hand the gap flag: https://github.com/GStreamer/gst-plugins-bad/blob/master/gst/freeverb/gstfreeverb.c#L919

Sounds like some printf debugging is due :/