Nevron sucks

May 6, 2010 Leave a comment

Nevron sucks, period.

This library is so badly implemented and tested that you can’t go halfway through it without ending up with exceptions and weird things. I strongly advise people to stay away from it considering they are not supporting WPF. There are many reasons I prefer, for example, DevExpress or Telerik over this one.

  • Nevron is obsfuscated. You cannot debug this shit and understand what’s going on. They don’t give you their sources. I was forced to use WinDbg with SOS plugin to try to understand why there was a null exception. Needless to say it was awful to go through that obfuscated mess… and to finally give up.
  • The documentation is a joke. While there are examples, half of them are not providing what you are looking for. The code documentation is missing half of the classes.
  • The stability is far from being their concern. See the latest version, Nevron Vision 2010. It has already nearly 8 service packs, and we are only in May. Imagine the state of the product when they shipped the first version. They wanted to make some marketing by writing 2010 after your product name. In fact, that means you have 2010 bugs instead of 2009.
  • The controls (“UI” part) is no more maintained except for bug fixes. Their NTreeList is crap as you can’t even edit cells. See DevExpress to compare, you’ll see what’s a professional library.
  • Migrating from a version to another one, even between two service packs of 2010, is a pain in the ass. As they had the clever idea to serialize everything in a binary form in the resx file, you can expect a lot of issues when you go into the designer of Visual Studio. As most objects have new properties, the serialized stream has changed and the designer is no more able to open your forms. And of course, you only discover that InitializeComponent fails during runtime. Worse.. they don’t provide any tool to make the migration. The answer on the forum is “save the state of the control to XML and load it back into the updated version”. Thanks !
  • The community around Nevron is poor. If you type an error in Google, you are expecting to find some posts or blogs about the issue. No.. you will end up going in their poor forum with a few users. Nothing compared to DevExpress support and knowledge-base.
  • The main page of  Nevron is ridiculous. You cannot even find the latest version of their product. That seriously sucks.

In short, avoid at all costs that product ! Choose Telerik or DevExpress, you would regret it if you stick to Nevron…

Categories: Uncategorized

About the algorithms in Amazing Slow Downer

May 5, 2010 Leave a comment

I am an enthusiastic  guitar player and as a software engineer, I also like to know what’s going on behind things. While trying to decipher some guitar solo from Steppenwolf, well.. For Ladies Only solo at 3:00, I often use time-stretching tools like Amazing Slow Downer (ASD).

It does a nice job but it’s not free either. So what’s going on in the guts of that beast ? Amazing.

I fired up Ida Pro, started disassembling the exe, paid a look at the strings and found various interesting things:

  • There are many references to a library called SuperVP (Super Vocoder Processing – http://anasynth.ircam.fr/drupal6/?q=english/software/supervp).
  • This C++ lib implements several algorithms for sound processing, analysis, etc. The description on the page tells us that The transformations available are time scaling with and without preservation of the transient signal components
  • The library for version 3.1.2 of ASD was compiled on Mar 1 2007 by Ingvar Nilsson. The lib version is 2.85.9.

We can easily conclude at this point that Amazing Slow Downer is using an advanced phase vocoder as the main algorithm. At the heart of such algorithm, you will find a transformation using STFT (short-time Fourier transform) where the initial waveform is split into small windows where one applies windowing and FFT. The result (frequency/phase/amplitude representation) is then resampled to apply time-scaling and finally, the different parts go through an inverse-STFT to switch back to a waveform.

The main problem with this approach is that without special compensation, the final signal will present some wobbling artifacts. They are caused by sudden changes in the amplitude of the waveform. For example, when a guitar string is picked or a drum kicks in, the amplitude for a given frequency band will quickly rise. That’s something the original phase vocoder doesn’t handle well. To circumvent this, many methods have been studied. The original issue with STFT is that the signal is split into small windows where one assumes that a window contains a stationary signal (ie. the frequencies present in the signal don’t change over time).  That’s not the case with music and to reduce the side-effects caused by this simplification, a solution consists in adjusting the phase for each of the bin present in the spectrum (a bin being a frequency range with an associated energy indication, ie. the amplitude for a given frequency band)

SuperVP seems to be based upon the work of Axel Roebel who elaborated new ways to correct this. The abstract of one of his paper is defined as follow (http://articles.ircam.fr/index.php?Action=ShowArticle&IdArticle=1223&ViewType=1):

In this paper we propose a new method to reduce phase vocoder artifacts during attack transients. In contrast to all transient preservation algorithms that have been proposed up to now the new approach does not impose any constraints on the time dilation parameter for processing transient segments. By means of an investigation into the spectral properties of attack transients of simple sinusoids we provide new insights into the causes of phase vocoder artifacts and propose a new method for transient preservation as well as a new criterion and a new algorithm for transient detection. Both, the transient detection and the transient processing algorithms are designed to operate on the level of spectral bins which reduces possible artifacts in stationary signal components that are close to the spectral peaks classified as transient. The transient detection criterion has a close relation to the transient position and allows us to find an optimal position for reinitializing the phase spectrum. The evaluation of the transient detector by means of a hand labeled data base demonstrates its superior performance compared to a previously published algorithm. Attack transients in sound signals transformed with the new algorithm achieves high quality even if strong dilation is applied to polyphonic signals.

I guess this should give new insights about the “Amazing” prefix. ASD also has several “processing modes”. While it is still unclear what they are doing, they are probably “just” different parameters of the vocoder.

Categories: Uncategorized