Engine slots are called from different threads, so strictly spoken they must be locked against race conditions. 
In this case this might not be required because it is synced due to thread priority and the fact that the user only uses on looping control at a time.

Here some hints: 
* call getCurrentSample() only once, because the value might change during the slot execution 
* On 32 bit targets there is a risk for reading a corrupt (half written currentSample)
 We can avoid this by introducing a contolObject for this (or reduce the precision to float).
* The same for all other member variable (its a bit scary, why does it work anyway?)