The 8 Bit Choice – A Music 256A Final Project Proposal
By Andrew Best - 11/02/09
There is currently a thriving sub-genre of the electronic music scene that is focused on the use of retro hardware from the 80s and early 90s. This sub-genre has many names including Chiptune, Low-Tech, Micromusic, and Demoscene. The hardware involved includes old game consoles and handhelds, like the NES and Gameboy, and old computers such as the Commodore 64. Not everyone can afford or learn to operate the antiquated equipment needed to compose and perform Chiptune music. Also, hooking up MIDI controllers to authentic 8-bit equipment can be a painful task. For this reason, there is a need for software emulation that can approximate the signature 8-bit sound. There is also the possibility for 8-bit to fuse with modern technology to create something new and neat, something incr8able.
The 8 Bit Choice (8-Bitch) is a polyphonic music synthesizer with graphical waveform editor. The synthesizer accepts MIDI input with polyphony and velocity support. Users see the waveform that is currently in use in a GUI window. Users may edit the current waveform using a pixel grid similar to a fully zoomed in graphical drawing program (such as Microsoft Paint). Users may load and save waveforms (patches) to and from disk and choose from a few standard choices like sine, saw, square, and noise.
Graphical Editor: Users are provided with a 256x256 pixel grid in which they can draw arbitrary waveforms by clicking with the mouse. Only one pixel is allowed per column. Since the full dynamic range is divided into 256 distinct values, these waveforms can be categorized as 8-bit. An example of a minimal waveform editing GUI is shown below.
Audio Generation: The displayed waveform represents one period of the audio output stream. The currently displayed waveform is loaded into a unit generator that is capable of holding samples of the arbitrary waveform. The MIDI note adjusts the speed at which the unit generator cycles through the waveform to generate audio samples for output. Appropriate expansion/interpolation is needed so that the waveforms can be played at an arbitrary frequency. The system is calibrated by knowing that exactly one period of the output audio stream is shown in the GUI window.
Loading and Saving: The user is presented with Load and Save buttons that, when clicked, pop up appropriate file dialog boxes. Since each patch will be stored in an individual file, there is no limit on how many can be stored. Standard waveforms like sine, saw, square, and noise can be accessed through keyboard shortcuts.
Waveform Editor: The waveform editor will be written using the OpenGL API. The mouse callback functions will contain logic needed for editing the waveform. A UIPixel class will be written support clickable squares. A global array will contain the on/off state for each pixel. The rule will be enforced that only one pixel per column may be in the on state.
Audio Generation: The unit generator will constantly maintain synchronization with the state of the waveform editor. There will be a function that transforms the pixel on/off state of the editor into samples for the output buffer. There will be an algorithm to calculate the correct period of the output by performing expansion to the correct number of samples per pixel.
ADSR: Modern music synthesizes virtually always have an adjustable volume envelope. A typical Attack, Decay, Sustain, and Release envelope will be added. Sliders will be available to the user to control the amount of each part of the envelope.
Pitch Bend/Mod Wheel: The pitch bend and mod wheel should be hooked up to meaningful parameters of the sound. A simple lowpass filter on the output could be added for the mod wheel to control.
Arpeggiators: One of the classic sounds from game consoles is the chord that is created by arpeggiated notes. The GUI should allow the user to select various standard arpeggios and adjust the speed.
Quantize Input: One other possible feature is the quantization of an input signal into an 8-bit resolution for pass-through.
1. 11/09/09 – Design Complete
2. 11/16/09 - Waveform display and editing.
3. 11/23/09 - Audio Generation
4. 11/30/09 – ADSR / Waveform (Patch) saving and loading
5. 12/07/09 - Arpeggiators