DEMO:
Below is a demo of the prototype for Sound Printer.
Sound Printer is a project that reimagined the Voyager Golden Record, an extraordinary artifact launched into space in 1977 aboard the Voyager spacecraft as a message to potential extraterrestrial life, will look like in the future. The users are responsible to select or create any audio or visual artifacts that will be saved inside this artifact as a reflection of us humans' lives.
For this prototype, I developed a visualization interface for audio signals. Based on the premise that analog waveforms offer greater stability than digital sound, they were selected as the most realistic medium for interstellar communication. I integrated various waveform types into the system. Visually, the design utilizes an oscilloscope style to synchronize strictly with the audio output.
Reflection Prompts:
technical approaches
In this part I will mainly discuss the functions and classes that I have currently designed, as well as how they were used to realize the effects in current demo.
In the setup function, I initialize with three different classes: SoundEngine, Oscilloscope, and UserInterface.
Oscilloscope is responsible for the visualization drawn in the middle of the canvas, while UserInterface renders all the characters on the canvas. They are all controlled by the properties within SoundEngine, so I would like to explain about my composition of the SoundEngine class.
Inside the SoundEngine object, there are several properties that all used to decide the output sound.
1. this.types: this property decides which kind of waveform is adopted.
2. this.typeIndex: this property is used to track the index within the this.types array.
3. this.playing: this property is used to track whether the oscillator should make sounds or not.
And all the rest properties are used to generate sounds for the oscillator.
For the methods,
update(): as the comments showed, the update function mainly maps the mouse coordinates to the frequency and amplitude to change the sounds when the user drag the mouse around the canvas.
togglePlay(): set the sound on if user pressed the mouse, and change the this.playing to true, else vice versa.
switchType(): switch around the waveform types if the user pressed the key "T" to change wave.Â
A set of getter functions to get the value of different properties, and can be called by other classes.
A good example is the code on the left, within the UserInterface I directly called the getCurrentFreq() function to dynamically access the current value for the frequency in the oscillator which may change over time.
2. Next Steps
Below are some concepts that I want to achieve for this program:
1) A decoder guide: imagine extraterrestrial life receive this record, they must have some guidance to listen to this, so the user should work out a way to draw a guidance for them, which should be a shared canvas which can be constantly manipulated.
2) The Payload Limit: Since a record can only contain a limited amount of information, the users should have a voting system for what should be included. So after creation, the users should name their works, and save them inside a database.
3. Feedback
Based on the feedback from my partner, two main issues were identified. First, the visual patterns fluctuate too rapidly, which may cause visual discomfort or dizziness. Second, the connection to the storytelling is not strong enough, indicating a need for clearer user guidance. On the positive side, the interface successfully captures a strong retro aesthetic.