[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[fluid-dev] complexity of soundfont synthesis engine

From: Michael Geis
Subject: [fluid-dev] complexity of soundfont synthesis engine
Date: Mon, 19 Sep 2011 14:20:38 -0700 (PDT)


I posted a question on using fluidsynth to extract .sf2 sounds to .wav files a few weeks ago. The answers I received indicated I had to get a better grasp of the subject matter and as a consequence I had to think over what I am doing.

Sorry if this post is perhaps only marginally related to fluidsynth. I am trying to develop a better grasp on soundfonts and fluidsynth may or may not be what I will need to use in my project (which I currently have a hard time telling because of my limited understanding of the subject matter).

I am hoping quite a few people here are familiar with the nitty gritty of the soundfont standard (since fluidsynth implements it) and might be able to help me get a better grasp on what the soundfont standard entails and how to work with it.

So, my original project was to look for ways to extract soundfont samples so friends could use it in a sampler they are writing in supercollider. What that sampler does is essentially loop over the samples and apply envelopes.

I dug into the soundfont spec, which illustrates the synthesis model of soundfonts very roughly as follows:
A wave table oscillator loops over the wavetables, its output is sent through a dynamic low-pass filter. The result is modified by an envelope amplifier (DAHDSR) and then sent to effects units that control pan, reverb and chorus. The modulation engine feeds output of vibrato and modulation LFOs as well as modulation envelopes into various stages of the pipeline above.

We were under the (probably naive) impression that all a sampler needs to do is loop over wave tables and apply envelopes. Seeing that the soundfont specification actually allows for greater complexity makes us wonder whether in order to play soundfonts, the sampler needs to be able to do all the things in the synthesis model. Unless there is a discrepancy between what the specification allows for and what most soundfonts look like in the wild. If a substantial fraction of soundfonts just loop over wave tables and apply envelopes, the sampler might still be useful for that subset of soundfonts if it just grabbed their wave tables and envelope parameters. The answer must be trivial for someone who has used soundfonts for a bit, I must admit it is not clear to me.

Otherwise (i.e. if soundfont generally make full use of all the parts of the synthesis engine laid out in the spec), I see 2 options:
1.Implement the entirety of the synthesis model and use the parsed soundfont parameters as input (That sounds like reimplementing a lot of what fluidsynth already does).
2.Play the soundfonts via fluidsynth and record the output. The sampler then loops over that output and applies envelopes. Does 2. even make sense or is it likely to mangle the sounds? If it is reasonable, how many notes should I have for each pitch? One per pitch or one per envelope phase (i.e. 5 for the DAHDSR envelopes since delay doesn't make a sound) per pitch?

I guess this might be related to how many wave tables are usually used for a given instrument in the soundfont format. One per pitch? One for every envelope phase of every pitch?

My apologies if I am somewhat lacking coherence here, I am still trying to get a decent grasp on the subject matter.

Best regards,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]