[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [fluid-dev] Fluidsynth internal structures
From: |
Josh Green |
Subject: |
Re: [fluid-dev] Fluidsynth internal structures |
Date: |
Mon, 02 Feb 2009 18:42:21 -0800 |
On Sun, 2009-02-01 at 12:23 -0800, jimmy wrote:
> Hi folks,
>
> I know Miguel(???) was working on a reimplementation of FS using CPP. Plus,
> some folks here are looking to modularize FS. You may want to use some kind
> of dictionary, or table look up for some of the structures (objects) used in
> FS. Hopefully for a more efficient and a little faster real-time look up.
>
> For what it's worth, I have been tracing through some of the FS code and find
> that the structure:
>
> fluid_sfont_t
>
> can be a virtual pointer to a font structure of type:
>
> fluid_defsfont_t
>
> which contains a pointer to a "preset" structure:
>
> fluid_preset_t
>
> There is a preset for each prog_num in each soundbank(s) of a soundfont. As
> used in
>
> fluid_defsfont.c : fluid_defsfont_get_preset()
>
> The fluid_preset_t is a link-list structure pointing to the next
> fluid_preset_t structure. Basically, that function walks through consecutive
> presets:
>
> preset for bank 0 prog 0
> preset for bank 0 prog 1
> preset for bank 0 prog 2
> . . .
> preset for bank 0 prog 128
>
> follow by presets for any additional instrument bank(s), and drum bank 128.
> This lookup is used for every prog_change.
>
> That's a simple and straigh forward way to implement the system using linear
> link-list, but can be very inefficient for look up time.
>
> Best regards,
>
> Jimmy
>
Indeed, but that is only during program change time, which isn't as
critical as note-on time. As we have been discussing, FluidSynth will
likely move to using libInstPatch for instrument management, which does
things a bit differently and in a more optimized fashion (in particular
for the note-on case).
Josh