Weekly status update July 25th to 31st
this week was again about bug fixing and performance testing. The fixes I did last week to the Fluidsynth sample based volume were not really good and opened up other bugs. It was possible that a division by zero happens which in return causes the volume to into infinity and effectively killing all sound. (Because the reverb takes on the infinity and it never gets down to a normal value again)
I also "refixed" the OS X distortion bug. The main problem was that the last value I calculated during a cycle would be n-1 (for n samples) but actually it makes sense to calculate up to n. Because I de- or increase the volume after the sample is rendered out - this makes the last value calculated gain value the first of the new cycle. This also ensures that I never need to calculate a value for position 0 (which lead to the division by zero bug).
I also revived the optimizations in Fluidsynth. When I first removed them I thought they wouldn't help that much - but they do! Here is a example of the first part of Beethoven's 9th symphony and the active voice count. The master in this graph doesn't have the optimizations.
But even with the optimizations the performance is far from close to 2.0.3 on the RPi 2. Lasconic and I are thinking if it is really necessary to have sample accurate volume in Fluidsynth. But I also like look if I can optimize the current version a bit more (I like to run a profiler to find out which part of the code takes the most time).
I also implemented most of the things I like to have for the soundbanks. But I don't want to talk to much about it today - there are a lot of different opinions and I thought I'll just show you what I have in a little screencast tomorrow and then there could be a discussion how I'll change it for the final Version.
So you will read and see more tomorrow!