[fluid-dev] Major degradation in sound quality & cpu usage going from Ub
[fluid-dev] Major degradation in sound quality & cpu usage going from Ubuntu 11.04 to 11.10
Sat, 22 Oct 2011 13:11:26 -0600
In trying out FluidSynth on Ubuntu Linux 11.10 (Oneiric Ocelot), I encountered a serious degradation in sound generation (quality), and a much higher CPU usage than in the prior releases.
The CPU-usage problem alone causes MIDI sequences that played fine on FluidSynth on a 1-gigahertz machine, to have many under-runs in JACK, on even a machine twice as fast.
The sound generation problem doesn't appear as obviously, until you play sequences with many different tracks, and many notes playing together (which played well on Ubuntu 11.04, even on slower machines).
What is happening, is that it sounds fine for the first few seconds, then from that point on, in many cases, new notes fail to play. For example, the oboe part may occasionally sound a note, but most of them are missing. Same thing for the flute part, and others.
I noticed this immediately in trying out Ubuntu 11.10, because as a matter of course, I have found it to be a good idea to configure the polyphony parameter (Qsynth setup) to a value of 64, rather than the default of 256. I have been doing this to avoid JACK under-runs, playing the piano sound on FluidSynth with heavy (perhaps sloppy) sustain-pedal usage.
When I set the polyphony value up to 256 (the default), the sequence that failed to play properly, sounded much better, but it was still bad. I had to set the polyphony parameter all the way up to 384 before it seemed to play the piece, but still sounded worse than on earlier releases. I suspect the reason for this, is that newer notes are being discarded instead of older notes (that faded, and are no longer sounding anyway).
Of course, with the entire sound-generation 'table' full all the time (and with 6 times as many notes to be sounded by the processor), the CPU usage has shot up to levels where only my fastest machine can play it at all, where before, they played fine on a 1-gigahertz machine, and even on an 800 megahertz machine (with occasional under-runs).
I experimented with this by setting the polyphony parameter down to 16 (the minimum allowed), and then playing notes, going up the keyboard from left to right. The notes were each held down for about 2 seconds, then I went to the next note. I did not use the sustain pedal.
Several (some) notes past 16 notes, it seemed that most notes (every other note?) would play for maybe 1/4 second, then stop playing, even though the note was still depressed.
I experimented with the sustain pedal, and things seemed actually to work better when using it, though I can't definitively say how.
My suspicion is (and it is only speculation) that complex code for dropping the oldest notes from the sound-generation 'table' has been removed, hoping to reduce overhead, and some other scheme of removing the 'old' notes from being played has been substituted. This new scheme ends up with new notes being discarded in favor of notes already in the sound generation 'table', even though those old notes have already faded to an inaudible level. It also ends up requiring a much larger sound-generation 'table', and every note 'sounded' uses processor time.
In the old version (Ubuntu 11.04, and prior), it seemed to remove the oldest notes (from the sound-generation 'table') in favor of the new notes. So if I set the polyphony level lower (64, or 48), it would sound great, and avoid under-runs, even on a slower machine.
Could someone please comment on this?
I have been relying on Qsynth/Fluidsynth (which has been extraordinarily reliable) as the basis of a major music education initiative, which I am (was) about to unveil.
Everything still works fine using the Soundblaster card emu10k1 hardware synthesizer. But that isn't going to help you if you have a laptop. Qsynth/Fluidsynth is the component that is now failing, and with it failing, I cannot go forward to future Linux releases.
Another work-around would be to use an external synthesizer, but the midisport-firmware package is no longer available in Ubuntu 10.10, so you can't even hook up your external synthesizer without a Soundblaster card (which you can't use on a laptop or half-high machine).