[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[fluid-dev] Re: Changes checked into CVS
From: |
Mihail Zenkov |
Subject: |
[fluid-dev] Re: Changes checked into CVS |
Date: |
Wed, 22 Nov 2006 02:57:01 +0200 |
On Tue, 21 Nov 2006 21:36:16 +0000
Josh Green <address@hidden> wrote:
> I just checked in some changes into CVS.
>
> Including:
> - Dithering now performed for 16 bit output (thanks to Zenkov Mihail)
> - Bug fix to 100% CPU consumption problem with "default" ALSA device
> - Some minor bug fixes to ALSA sequencer code
> - Other minor stuff not worth mentioning
>
>
> Some info/questions for Zenkov Mihail concerning the dithering:
>
> I modified your patch a bit for several reasons and I wanted to check
> with you to make sure I didn't break something in the process.
>
> A variable "dither_index" was added to the fluid_synth_t structure, so
> that the dithering buffer index is per synth instead of a static var in
> a function (would be a problem if multiple synths were running).
>
> - I re-enabled the call to dev->callback in fluid_alsa_audio_run_s16
> since this is part of the API (don't want to break it if someone is
> using it)
But it have big overhead: many buffers, many purposeless copy of memory.
> - A new function fluid_synth_dither_s16() is now used to do the float to
> 16 bit conversion (with dithering) in fluid_alsa_audio_run_s16, this
> function is not part of the public API
>
> - The test for the dither index wrap around was (if nr > DITHER_SIZE),
> which I think should be (if nr >= DITHER_SIZE)
>
Yes, you right.
> - I removed the roundf calls since they seem to require a special
> -std=c99 compiler switch, which makes me doubt it works in Windows.
Without roundf() 0.5f (or 0.9f) = 0.
We can do dithering without roundf():
- d = rand() / (float)RAND_MAX - 0.5f;
+d = rand() / (float)RAND_MAX * 2.0f - 1.0f;
but it have worse THD.
> Instead the float sample is just multiplied by 32767.0 and
> rand_table[0][di] is added and then the value gets clipped to the range
> -32768 - 32767 and finally the value is integer truncated when it gets
> assigned to the 16 bit value. Hopefully that is OK?
Better multiple by 32767 - max_dither_amp
with roudf() max_dither_amp = 1
without roudf() max_dither_amp = 2
> I must admit, I had trouble hearing the difference between the new
> changes and the old. There does seem to be something different, but I
> can't quite point it out. Perhaps I don't have very good musically
> trained ears ;) Then again, perhaps I broke something when making
> changes to your patch, although I did also test your patch directly.
It not very complicate. Just set gain very low (0.0001) and set maximum
loudness in amp and mixer ;)
> I did discover another bug in the process. There seems to be a rather
> explosive audio problem with some instruments played at very high notes.
> I suspect a filter issue (there were several similar issues in the
> past). Not sure at this point how to fix it though.
I try reproduce this tomorrow. Can you describe way to reproduce this
(sound font - better link to download, instrument, other settings)?
> Thanks again for the contribution. Cheers!
> Josh Green
>
>
- [fluid-dev] Dither, Mihail Zenkov, 2006/11/10
- Re: [fluid-dev] Dither, Josh Green, 2006/11/13
- [fluid-dev] Changes checked into CVS, Josh Green, 2006/11/21
- [fluid-dev] Re: Changes checked into CVS,
Mihail Zenkov <=
- Re: [fluid-dev] Re: Changes checked into CVS, Josh Green, 2006/11/24
- Re: [fluid-dev] Re: Changes checked into CVS, Mihail Zenkov, 2006/11/24
- Re: [fluid-dev] Re: Changes checked into CVS, Josh Green, 2006/11/24
- Re: [fluid-dev] Re: Changes checked into CVS, Mihail Zenkov, 2006/11/24
- Re: [fluid-dev] Re: Changes checked into CVS, Rui Nuno Capela, 2006/11/24
- Re: [fluid-dev] Re: Changes checked into CVS, Josh Green, 2006/11/26