On 10/09/2012 11:13 AM, Kjetil Matheussen wrote:
Hi,
I'm embedding FluidSynth as an instrument in the Radium music editor
(http://users.notam02.no/~kjetism/radium).
It works fine (thanks for the great work!), but the memory usage was
sometimes shockingly high because fluidsynth reloads
entire soundfonts for every new synth, even if the soundfont was
already
used in a different synth.
Maybe I have misunderstood something, but instead of spending
several
more hours trying to figure out if I had misunderstood
something, I modified fluidsynth to cache already loaded sampledata
from
soundfonts.
Here's the patch:
http://users.notam02.no/~kjetism/fluid_defsfont_patch.diff
Please let me know if there's anything that's needed to do in order
for
you to use it.
I also have a question: Can delete_fluid_defsfont and
fluid_defsfont_load_sampledata be called from different threads at
the
same time?
In so, we also need a lock protecting the global list of cached
sampledata.
Hi Kjetil and thanks for your patch!
You're correct in your last sentence - as of how it works today, I'd
say fluidsynth client software expects to be able to call
fluid_defsfont_* in parallel. So yes, it needs to be protected.
Another thing we need to verify is that the sampledata is read-only
once it's been bigendian converted. If it is not, chances are that
two
threads would both modify the sampledata, causing problems.
Element - you've been more into this part of FluidSynth than I, would
you mind confirming that the sampledata is strict read-only and there
are no hacks that change it?