Over a dozen small performance optimizations
* Memoization for linspace generation
* Removed unnecessary copies
* Limited the rate at which information is printed. Excessive `print()` output was causing issues for some SSH users
Previously there was no limit to the number of bytes that could be sent per packet. This commit enforces a limit on the amount of pixel information per packet.
Add limitation note saying that even numbers of pixels must be used. Clarify that the 256-pixel maximum limitation only applies to the ESP8266. Add note saying that these restrictions will be fixed in a future update
Zero pads the audio time samples until the length is equal to the next largest power of two. This improves the algorithmic complexity of the FFT calculations.
Initialized the Hamming window when the module is loaded instead of every loop.
Replaced a call to numpy.roll() with direct array index manipulation.
Move Stereo Mix info into a new section called "Audio Input". Add some additional information about virtual audio devices for Linux and OSX as well. Add new block diagram showing the different input topologies.
Replaced if statements with #if preprocessor macros.
Replaced one #ifdef macro with #if.
Changed `int secondTimer` to `uint32_t secondTimer` to avoid signed/unsigned integer comparison. The `millis()` function returns `uint32_t`.
Removed asterix output from FPS output.
* Resolved an issue with the ESP8266 where gamma correction would be
performed twice. Changed GAMMA_CORRECTION to SOFTWARE_GAMMA_CORRECTION
to make a distinction between software and firmware gamma correction.
The ESP8266 does firmware gamma correction and dithering, while the
Raspberry Pi uses slightly more inferior software gamma correction.
Changed the software gamma table to match the gamma table used in the
ESP8266 firmware.
* Improved the spectrum visualization by using one of the color channels
to visualize the absolute value of the temporal derivative of the
spectrum. Also added a feature to reject the "common mode" spectral
components, which is analogous to the spectral DC component.
* Signficantly improved the GUI and added a frequency adjustment slider.
Adjusting the frequency range has a big impact on the visualization
output. Recommend using a high frequency range (something like 4 kHz -
10 kHz) when running the scrol visualization.