This happens always if the input stream stops (for example, if the MPD
is paused). If the timing is not reset in this case, the program starts
spamming the target with UDP packets, resulting in unpredictable
animation behaviour.
This is accomplished by providing a wrapped reference to the
SignalProcessing instance of the Rust program as a global Lua variable.
The wrapper class implements mlua::UserData, wraps the relevant
SignalProcessing methods and provides them as Lua methods.
So far, this is implemented for get_energy_in_band() only.
Now an arbitrary number of samples can be read and appended to the FFT
block. Old samples will be dropped such that only BLOCK_LEN samples
are in the memory buffer. Currently one half of the FFT block is
replaced per update.