The software on the surface player is what is responsible for differentiating our project from a modern record player. Rather than just playing music directly from a record, the laser detection is processed and altered by wavetable normalization. The software is also responsible for controlling the motor and outputting it over continous steps.
Given that we all wanted to build a project interface between multiple inputs and outputs – a laser, motor, camera, speakers, and addressable LEDs – we determined that splitting the modules into seperate classes made sense. The current iteration of the project calls simpler update functions from a central executable. Building this feature enables us to build more and more features later on, making it easy to extend the software's capabilities.
Camera
This module handles detection and isolation of the laser line from the camera's raw video feed, and generates a profile object based on the side profile of the object on the turn table. This profile is then passed to the Audio and LEDs modules as input data for their respective operations.
This module generates playable audio using the pyo server based on a profile generated by the Camera module. It converts the profile object into a wavetable - a playable sample which is looped as the program runs. It also applies audio effects to the generated signal.
This module controls the laser diode, which is attached to a GPIO pin of the Raspberry Pi. When the program is initialized, the laser turns on; when it is quit the laser turns off.