[Top][All Lists]

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

Re: [fluid-dev] Proposal: FluidSynth tester program

From: Aere Greenway
Subject: Re: [fluid-dev] Proposal: FluidSynth tester program
Date: Fri, 03 Aug 2012 11:38:58 -0600


Thanks for the additional information. 

Actually, playing piano with the pedal down was how I discovered the trick of avoiding under-runs by limiting the polyphony. 

I was happily playing away (on a 1.5 gigahertz machine), oblivious to the world, when the sound started cutting out.  That made me look, and I noticed the graph of CPU usage had been going up. 

I did a little experimenting with it, and found that when I let up on the pedal, the CPU load went down.  A little more experimentation showed me that if I configured the polyphony of Qsynth down to 64, I could play away with the pedal down, and it wouldn't get under-runs at all.  Also, there was no apparent problem with the sound. 

I assumed (but had no way of finding out if it was fact), that Qsynth would discard the oldest notes when it had new notes to play, and since those notes had already faded to where they couldn't be heard, it didn't make any difference to the audible sound anyway. 

Also by limiting the polyphony parameter, the processor overhead (the real-time overhead) was reduced, at least as displayed by qjackctl. 

So for slow machines, I limit the polyphony, and don't check the "Chorus" and "Reverb" check boxes in Qsynth. 

I also have made use of configuring for my user-ID,  a security limits file (in the "/etc/security/limits.d" folder.  I got this very helpful tip from David.  Without that, I wouldn't have been able to use Qsynth at all in Ubuntu 11.10 and 12.04. 

It appears that the system overhead has increased in recent releases to where a "/etc/security/limits.d" configuration file in absolutely necessary (unless you have a really fast machine). 

- Aere

On Fri, 2012-08-03 at 08:39 -0500, S. Christian Collins wrote:
Even on my Intel Core i7 (2.8 GHz quad-core) I am able to get Fluidsynth to cause xruns when playing really fast on a stereo piano sound that I have (voice polyphony at 256).  As I am playing fast arpeggios with the pedal down, I can watch the jack dsp load (as reported by Cadence) go higher and higher until a slew of xruns all hit at once, ruining the sound.  I have jack latency set at 2 buffers of 256 samples.  I haven't tested this with older versions, but it doesn't seem right to me that FluidSynth should fail like this on such a fast processor.  The CPU usage doesn't even seem to be very high at all.

Here is the piano SoundFont I was testing this with: https://dl.dropbox.com/u/8126161/Splendid%20Grand-normal%20FluidSynth%20v2.tar.bz

You may keep the SoundFont for your own personal use, but please don't spread it around.  While the samples are in the public domain, the sample programming was done for a commercial project, and I don't think the copyright holders would be happy about me publishing it online.

How to reproduce: Using the first preset in the SoundFont, hold down the pedal and go nuts.  When playing very fast (I have a master's degree in piano performance), it doesn't take long for me to start getting xruns.

Aere, how can I test the version from the PPA so I can compare?  Also, how do you pronounce your name?  I'm just curious :)


On 08/02/2012 05:31 PM, Aere Greenway wrote:

David and all:

I spent some time today trying to run the test on my 450 megahertz machine.  It was good that I did, in that I was able (finally) to successfully run the test. 

The release-candidate fluidsynth will not successfully play my demo-pieces on a 450 megahertz machine, while your PPA for Ubuntu 11.10 (that I re-packaged for 12.04) plays it perfectly, and without any under-runs.  That's a pretty significant difference. 

Here are the details of the testing I performed:

I first applied updates for anything with "pulse" (as in pulseaudio) in it, as well as anything with "alsa" in it - specifically libasound2. 

I then tried running the test, but qjackctl still crashed. 

I got some diagnostic information on it, but where you said there is no dependency of fluidsynth on jack, I totally removed (purged) jackd and qjactctl, and re-installed them. 

I noticed in what got re-installed, it used jackd2, where your build process seems to insist on jackd1.  Also, your build process seems to install development versions of jackd, but re-installing used non-development versions. 

After re-installing, qjackctl and qsynth initialized successfully!  So I was now in-business. 

I then brought up Rosegarden, and played the demo-piece that qsynth has been unable to play without your PPA version of libfluidsynth1. 

It start out okay, but within a few seconds, the sound that was generated was crashing chords, one per second, with short pauses in between each second.  There were many under-runs, and the system was performing sluggishly.  It took me a quite awhile to get the mouse cursor over to where I could click the Rosegarden "Stop" button, and then it took awhile to finally stop. 

I then followed your instructions on how to un-install the release-candidate fluidsynth, restoring the original, and ran the test again. 

This time, it played flawlessly, though at the end, qjackctl showed a few under-runs (which I hadn't heard). 

I hadn't checked if the under-runs were there when I re-connected Rosegarden to Qsynth, so I cleared the under-run count and played it through again. 

Before starting it, I noticed the "Reverb" check-box of Qsynth was checked, which adds overhead (I don't even try the "Chorus" check-box on slow machines).  So before starting the piece, I un-checked the "Reverb" check-box. 

It played flawlessly all the way through, without a single under-run.  While it was playing, the RT-percentage displayed by qjackctl was hovering around 70%.

Just to be thorough, I re-selected the "Reverb" check-box of Qsynth, and played it through again. 

It again played flawlessly, with no under-runs, though the RT-percentage displayed by qjackctl was now hovering around 79% (so reverb added about 9 percent to the real-time overhead). 

My conclusions from the testing, are that the increased real-time percentage I observed in my faster machine's Ubuntu partition was indeed an indicator of big problems for slower machines.  The testing showed that the release-candidate fluidsynth could not play the demo piece at all on a 450 megahertz machine. 

I really hope that newer versions of fluidsynth will not abandon slower machines altogether.  If there are features that have been added that are adding the overhead, it would be good to have some way of turning these features off, rather than abandoning the slower machines. 

By the way, if you would like to test with this infamous demo piece, I will be happy send it to you as an attachment, a MIDI (.mid) file. 

Also, it is good to be aware that another thing I configure differently to avoid overhead on slower machines, is to set the polyphony parameter to 64 (rather than the default of 256). 

On the faster machine (the Ubuntu partition) that succeeded in playing the piece, I also limited the polyphony configuration value to 64. 

Now that I can run the tests on that machine, please let me know if there is further testing you would like me to run, or if you have a fixed-version to test. 

- Aere

On Thu, 2012-08-02 at 17:55 +0200, David Henningsson wrote:
On 08/02/2012 07:45 AM, Aere Greenway wrote:
> David:
> I ran the test on a partition I was planning on replacing (to minimize
> risk to my other testing).
> A side-effect of that decision, is that it was done on a non-updated
> system.  In fact, the crash-report generated for it, indicated it wasn't
> reportable because of an obsolete version of libasound.so (or something
> like that).
> I didn't update it because updates on a 450 megahertz machine take a lot
> of time, and I was going to replace the partition anyway.
> It seemed to me (as I watched the build process) that it was complaining
> about jackd1 vs. jackd2.

Please verify that you're still running the jack version you expect. If 
the build process switched jack version for you, you can switch it back 
(just install the right version again). This is just because the 
development package is not switching as well as the library package in 
Debian. FluidSynth can run against either version.

> But when I went to get the listings of the
> build process, the file (written by abiword, which also had significant
> problems in this release) had somehow been garbled, and could not be
> read by Libre Office - so I lost my build listings!
> I am pretty sure the build process was what caused problems for
> qjackctl, because I only use that machine for testing, and the last
> thing I (most likely) did on it was the same test I was trying to run
> with the new fluidsynth.  I'm sure it was successful before, because I
> always run those tests on new systems.
> I did not manually copy any '.so' files.
> Here is what I was able to collect of the problem:
> address@hidden <mailto:address@hidden>:~$ gdb qjackctl
> GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
> Copyright (C) 2012 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i686-linux-gnu".
> For bug reporting instructions, please see:
> <http://bugs.launchpad.net/gdb-linaro/>...
> "/usr/bin/qjackctl": not in executable format: File format not recognized

Hrm, next time instead run "gdb /usr/lib/qjackctl/qjackctl.real", as 
qjackctl is a wrapper script. :-/

> (gdb)
> 12:37:43.266 Patchbay deactivated.
> 12:37:43.361 Statistics reset.
> 12:37:43.659 ALSA connection change.
> 12:37:43.751 D-BUS: Service not available (org.jackaudio.service aka
> jackdbus).
> 12:37:43.828 JACK is starting...
> 12:37:43.831 /usr/bin/jackd -dalsa -dhw:0 -r44100 -p1024 -n2
> 12:37:43.905 ALSA connection graph change.
> 12:37:43.908 JACK was started with PID=1670.
> jackd 0.121.2
> Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn
> and others.
> jackd comes with ABSOLUTELY NO WARRANTY
> This is free software, and you are welcome to redistribute it
> under certain conditions; see the file COPYING for details
> JACK compiled with System V SHM support.
> loading driver ..
> apparent rate = 44100
> creating alsa driver ... hw:0|hw:0|1024|2|44100|0|0|nomon|swmeter|-|32bit
> control device hw:0
> 12:37:48.293 Server configuration saved to "/home/aere/.jackdrc".
> 12:37:48.325 Statistics reset.
> 12:38:06.453 Client activated.
> cannot read result for request type 6 from server (Connection reset by peer)
> cannot read server event (Success)
> cannot continue execution of the processing graph (Bad file descriptor)
> cannot continue execution of the processing graph (Bad file descriptor)
> cannot continue execution of the processing graph (Bad file descriptor)
> cannot continue execution of the processing graph (Bad file descriptor)
> cannot continue execution of the processing graph (Bad file descriptor)
> cannot continue execution of the processing graph (Bad file descriptor)

A tip could be to take a photo with a digital camera / phone instead of 
hand-copying - it's up to you what you find simplest.

> jackd crashed with signal 7 in pa_shm_create_rw
> StacktraceTop
> pa_shm_create_rw() from /usr/lib/i386-linux-gnu/libpulsecommon-1.1.so
> pa_mempool_new() from /usr/lib/i386-linux-gnu/libpulsecommon-1.1.so
> pa_context_new_with_proplist() from /usr/lib/i386-linux-gnu/libpulse.so.0
> pa_context_new() from /usr/lib/i386-linux-gnu/libpulse.so.0
> conf_pulse_hook_load_if_running() from
> /usr/lib/i386-linux-gnu/alsa-lib/libasound_module_conf_pulse.so

This is related to alsa-plugins or pulseaudio, not fluidsynth. If 
upgrading *everything* is hard, you should try upgrading at least all 
packages beginning with "pulseaudio", "libpulse" or "libasound". I saw a 
Launchpad bug with the same stack trace, and the bug reporter said it 
was resolved with an update.

> Please be aware that I consider the testing (done on an Ubuntu
> partition) to have been successful.  I just wanted to find out if the
> increased overhead causes it to no longer work on my slowest machine.


// David



fluid-dev mailing list

fluid-dev mailing list



reply via email to

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