Element Green
---------- Forwarded message ----------
From: "element1green" <element1gr...@gmail.com>
Date: Jan 2, 2016 11:33 AM
Subject: Re: [fluid-dev] question on linear interpolation
To: "FluidSynth mailing list" <fluid-dev@nongnu.org>
Cc:

Use capital -O0 for the optimization.

Element
On Jan 2, 2016 10:58 AM, "Brad Stewart" <brads...@fastmail.us> wrote:

> Yes, I am building the shell.  Interestingly, it stores the executable in
> a hidden directory <workspace>/fluidsynth/src/.libs
>
> The console window only displays the shell and I see no error messages.
> I'll need to figure out how to display internal printf messages.
>
> I am having problems building a debug variant.  I tried adding -g -o0 but
> get many build errors.  This might be due to the way Eclipse sets up
> autotools.  Any quick hints?
>
> --Brad
>
>
>
> On 01/02/2016 08:08 AM, Element Green wrote:
>
> Hello Brad,
>
> It sounds like you really need to get debugging working.  From what you
> said about the "interp num" command, I assume you are building the
> fluidsynth command shell.  Do you get any relevant error messages on the
> console (probably the same terminal you are running fluidsynth from - but
> may be hidden if you are accessing the shell through TCP for example).
> Make sure you are able to see console messages, since there may be some
> useful error messages getting output.
>
> When running the interp command it should
> call fluid_synth_set_interp_method().  I would get debugging working and
> set a breakpoint on that function and make sure it is doing all the calls
> to fluid_channel_set_interp_method() for every channel.
>
> Best regards,
>
> Element
>
> On Sat, Jan 2, 2016 at 4:57 AM, Marcus Weseloh <mar...@weseloh.cc> wrote:
>
>> Hi Brad,
>>
>> Out of curiosity I checked that the interp setting actually had an
>> effect by adding printf statements to the relevant functions. The
>> fluid_rvoice_dsp_interpolate_linear function is called just fine if
>> you set "interp 1" in the FluidSynth shell. Seems like you've got a
>> problem with your devel setup...
>>
>> Cheers,
>>
>>     Marcus
>>
>> 2016-01-02 0:33 GMT+01:00 Brad Stewart <brads...@fastmail.us>:
>> > So I recompiled the code and added a return at the beginning of the
>> function
>> > fluid_rvoice_dsp_interpolate_linear (fluid_rvoice_dsp_t *voice).
>> >
>> > I also tried adding a for(;;) and a printf.
>> >
>> > I tried several interp num commands (with num from 0 to 7) but it seems
>> it
>> > never gets to this function.  All audio sounds as it should.
>> >
>> > Could you comment please?
>> >
>> > Thanks,
>> > Brad
>> >
>> > P.S.  I imported the project into Eclipse Mars using import "existing
>> tools
>> > as Autotools project".  It compiled with some warnings.  It seems to
>> run OK.
>> > But I was unable to build a debug version of it so I could use gdb to
>> trace
>> > through the code.
>> >
>> >
>> >
>> >
>> >
>> > On 12/31/2015 03:36 PM, Brad Stewart wrote:
>> >
>> > Could you confirm that "interp 1" command line invokes the Linear
>> > Interpolation function?
>> > Thanks,
>> > Brad
>> >
>> >
>> >
>> > On Thu, Dec 31, 2015, at 01:36 PM, Element Green wrote:
>> >
>> > Hello Brad,
>> >
>> > To my knowledge the audio sample data is used as is in FluidSynth.  The
>> > sample rate of the data and the current pitch of a voice determine how
>> it
>> > gets interpolated.  So I believe your analysis is correct, that
>> > interpolating between two identical values will yield that value with
>> the
>> > linear interpolation algorithm, regardless of where in between the two
>> > points the new interpolated point lies.  The higher order interpolation
>> > algorithms will be affected by additional sample points though, so it
>> would
>> > not be true in those cases unless additional consecutive points had the
>> same
>> > value (for the number of points used by the interpolation algorithm).
>> >
>> > At this point I'm not sure what you are asking anymore though.
>> >
>> > Best regards,
>> >
>> > Element
>> >
>> >
>> > On Thu, Dec 31, 2015 at 12:38 PM, Brad Stewart <brads...@fastmail.us>
>> wrote:
>> >
>> >
>> > Hi Mr Green,
>> >
>> > Yes, I am carrying the fractional part.  In my case, it's 12 bits and I
>> > shift right by 4 to get the upper 8 bits to index to the coefficient
>> table.
>> >
>> > But let me cite an example,
>> > Suppose I have x[i]=100 and x[i+1]=100 (which occurs often in a lower
>> note
>> > frequency).
>> >
>> > Assume after looking up the coefficient table, you get coeffs[0] = .3
>> and
>> > coeffs[1] = .7
>> > So if you do the math,
>> > out=100*.3 + 100*.7 = 100.  So no change.
>> > In my case, I can have 4 consecutive values of 100 (at note = 60) as
>> shown
>> > in the previous images.
>> >
>> > So any of the coefficients in the table will return a value and
>> 1-value, if
>> > the current sample and then next are the same, the output is always the
>> > original value.  So in the general case where sampe[i]=sample[i+1],
>> >
>> > out = sample* frac + sample*(1-frac) = sample*(frac +1 -frac) = sample =
>> > out.
>> >
>> > This is why I was asking if you're adding to the data set by
>> up-sampling,
>> > pre-filtering, or  something else.  This is hinted at in the paper by
>> Olli
>> > Niemitalo.
>> > I suppose you that the interpolated value could be stuffed back into the
>> > original data (recursion) but I don't see that occurring in
>> > fluid_voice_dsp.c.
>> >
>> > Brad
>> >
>> >
>> >
>> >
>> > On Wed, Dec 30, 2015, at 07:21 PM, Element Green wrote:
>> >
>> > Hello Brad,
>> >
>> >
>> > On Wed, Dec 30, 2015 at 7:42 PM, Brad Stewart <brads...@fastmail.us>
>> wrote:
>> >
>> > Hi,
>> >
>> > I'm developing an embedded project using some of the code in FluidSynth.
>> >
>> > The target is an ARM Cortex M4 and am using integer math.  Most of the
>> > coefficients are in Q15 format.
>> >
>> > So far, I'm able to generate different notes with sound font files and
>> use
>> > some of the CMSIS DSP libraries to generate high order IIR filters.
>> >
>> > But I am having no luck with any interpolation routines.  I ran some
>> tests
>> > using the command line version of FluidSynth on a laptop running Ubuntu
>> 14.
>> >
>> > I created a sine wave sound font (using Swami) with a sample rate of
>> 20050
>> > Hz, root note is 86.  It's looping over several cycles.  The image
>> > Midi_60_no_interpolation.jpg picture shows the result with no
>> interpolation
>> > (I get the exact same results on my embedded platform).  This is using
>> > "interp 0".  (Note that the ringing is due to the sinc function in the
>> Codec
>> > filter/decimator.)
>> >
>> > If I then set "interp 1", I get the image as shown in
>> > Midi_60_linear_interpolation.jpg which is a major improvement.
>> >
>> > I have reviewed the code inside fluid_voice_dsp.c and have set up my
>> program
>> > to emulate the equations.  I converted the floating point coefficients
>> to
>> > Q15 format.  It seems to do exactly what it's supposed to do.  Yet I
>> see no
>> > improvement what-so-ever except at higher note values.
>> >
>> > However...I don't see how linear interpolation can work.  If you have
>> > straight lines (i.e. the "steps" in the first waveform), a linear
>> > interpolation won't change anything since the current sample and the
>> next
>> > sample are the same over several samples.
>> >
>> > Are you up-sampling before you to do the linear interpolation? I didn't
>> see
>> > any evidence in the code. Or do you simply take the loop sample as is
>> and
>> > step through it using dsp_phase_index?  I don't think the bi-quad post
>> > filter has an effect since it has a very high cut-off.  Nor should the
>> > reverb or chorus blocks have any effect (since they're disabled anyway
>> in my
>> > test).
>> >
>> > What am I missing?
>> >
>> > Thanks for your time and consideration.  Any advice or insight is
>> > appreciated.  I really like FluidSynth.
>> >
>> > Brad Stewart
>> > P.S.  I also implemented the 4th order interpolation but it didn't
>> change
>> > anything--I still get the "stepped" waveform. (At 50MHz clock, the M4
>> can
>> > process 128 samples in <1uS with sound fonts stored in internal Flash
>> > memory.  Pretty impressive.)
>> >
>> >
>> >
>> >
>> > Let me make sure I understand your situation correctly..  So you have
>> taken
>> > the interpolation code in fluid_rvoice_dsp.c and adapted it to integer
>> math
>> > and there is something wrong with the ported code, since it is not
>> > interpolating as expected.
>> >
>> > It has been a while since I delved into the interpolation code and I
>> did not
>> > originally write it (though I did muck about in that area a bit).  If
>> you
>> > look at the fluid_rvoice_dsp_config() routine you will see that it
>> > initializes the interpolation tables, including interp_coeff_linear,
>> which
>> > essentially stores 2 tables of linearly increasing and decreasing values
>> > from 0 to 1.  These values are then used depending on the current sample
>> > index fraction (think of the current sample pointer as being at a
>> position
>> > which may be in between 2 consecutive samples - the fraction
>> component).  If
>> > the fractional position is closer to the first sample, then it will
>> have a
>> > higher weight in the linear calculation of the sample value which gets
>> > synthesized.  I hope that makes sense and perhaps you already knew this
>> -
>> > seeing as you have done this port.
>> >
>> > I would make sure that your ported code retains this fractional sample
>> > pointer component and is using it properly and that your linear
>> coefficients
>> > table is properly initialized.  You should be able to see this stuff at
>> work
>> > by single stepping the code and looking at the calculations to see if
>> they
>> > are behaving as expected.
>> >
>> > Hope that helps.  Maybe I did not get your scenario right though, if so,
>> > please explain in more detail.
>> >
>> > Best regards,
>> >
>> > Element Green
>> >
>> >
>> > _______________________________________________
>> > fluid-dev mailing list
>> > fluid-dev@nongnu.org
>> > https://lists.nongnu.org/mailman/listinfo/fluid-dev
>> >
>> >
>> > --
>> >   Brad Stewart
>> >   brads...@fastmail.us
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > 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
>>
>
>
>
> _______________________________________________
> fluid-dev mailing 
> listfluid-dev@nongnu.orghttps://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

Reply via email to