Hi Element - a belated thanks for your detailed advice, which we've looked into. I agree #3 seems the most practical way forward for us. --Ien
On Thu, Feb 16, 2017 at 12:00 PM, Element Green <elem...@elementsofsound.org > wrote: > Hello Ien, > > This seems like a pretty complicated problem to tackle for all scenarios. > However, I think it wouldn't be too hard to try and handle the majority of > cases. > > The perceived volume of an instrument depends on at least the following > factors: > * The number of simultaneously synthesized samples for a given note event > * The amplitude of the sample data > * The velocity of the note on event > * The attenuation at the instrument level (local or global zone) > * The attenuation at the preset level (local or global zone) > * Low pass filter settings > * Reverb level > * Chorus level > * Panning (left/right volume) > * Volume envelope > * Modulation envelope to filter cutoff > > As you can see there is a lot that affects the volume which isn't volume > specific. Whats more, many of these are likely to vary in the affect they > have on volume from one SoundFont synthesizer to the next. > > I would approach this with several possible solutions and decide which one > would be the best for your particular requirements. The flexibility of > SoundFont files provides a lot of ways to do things, which could affect the > volume in uncommon ways (for example mucking about with modulators). > > Some ideas: > > 1. Simple volume calculation > - Calculate perceived instrument zone volumes from the sample data and > loop parameters > - Adjust volume attenuation on individual instrument zones to normalize > note volume across the instrument > - Possibly adjust preset level volume attenuation to adjust for other > factors which affect the entire instrument > > > 2. Adjust by calculated volume > - More in depth version of #1 for calculating perceived output volume. > Factor in other parameters (sample layering, low pass filter, reverb, > chorus, etc). > > > 3. Adjust by synthesized output volume > - Utilize FluidSynth in an automated fashion to synthesize note events, > measure output and set attenuation accordingly. > > > If I was tasked with doing this, I'd likely use libInstPatch and it's > Python binding. For #3 it might be difficult to utilize FluidSynth from > Python, so that might be best tackled with C code using libInstPatch's > native API. > > I would probably start with something like #1 and see how well it does in > practice. Then incrementally add additional factors into the perceived > volume calculations, until a generally satisfactory result is found. > > However, solution #3 would remove the necessity to calculate perceived > output volume from all the SoundFont parameters and just measure the output > directly from the resulting synthesis. This could be done in faster than > realtime. This may end up actually being the easiest route in some ways, > though a lot of FluidSynth specific volume affect behavior would come into > play, which may not correlate well with other SoundFont synthesizers. > > Hopefully you have found these thoughts useful. > > Cheers! > > Element > > > > > > > On Tue, Feb 14, 2017 at 8:55 PM, Ien Cheng <i...@alum.mit.edu> wrote: > >> Hi all - >> >> When generating sound with FluidSynth, wome soundfonts sound "louder" or >> "softer" than others, using the same volume/velocity numbers. >> >> Is there any way to programmatically normalize the perceived volume >> across soundfonts, perhaps by inspection of certain soundfont properties? >> >> All the best, Ien >> >> _______________________________________________ >> fluid-dev mailing list >> fluid-dev@nongnu.org >> https://lists.nongnu.org/mailman/listinfo/fluid-dev >> >> > > _______________________________________________ > fluid-dev mailing list > fluid-dev@nongnu.org > https://lists.nongnu.org/mailman/listinfo/fluid-dev > >
_______________________________________________ fluid-dev mailing list fluid-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/fluid-dev