Skip to content

Latest commit

 

History

History
16 lines (9 loc) · 3.75 KB

PROPOSAL.md

File metadata and controls

16 lines (9 loc) · 3.75 KB

Synther: Project Proposal

My final project will be an app called Synther that uses Cinder to build a virtual piano keyboard, which can be used to play simple musical pieces on a variety of instruments. The app will map a standard QWERTY keyboard to a virtual piano keyboard, allowing the user to "play" a piano on their computer. At a minimum, Synther will offer a user the ability to play music on a virtual piano keyboard that looks and feels like a real piano, which special features like piano pedals.

As a pianist, I have a fair amount of background knowledge on music. In fact, I have a handful of apps currently installed on my phone that offer virtual keybaord capabitilies (like GarageBand and PianoCompanion), just in case I want to visualize a tune that's stuck in my head. I think it would be interesting to build a similar app that not only plays simple notes, but also offers recording and playback capabilities. I'm also interested in exploring the countless avenues for extension on a simple Synther implementation, like adding the ability to connect to an external synthesizer, loading in MIDI files, and supporting different sounds/instruments. Overall, I think this project would be a great way to implement my own version of a product that I use almost daily: virtual music.

This project can be split into 3 main steps: Building the underlying piano engine, implementing the GUI in Cinder, implementing the special features like loading and playing back compositions. By the end of week 1, I will have build the majority of the piano engine, including all the data structures and classes necessary to represent a virtual keyboard, music notes/rhythm, and musical compositions. Then, during week 2, I will work on connecting the piano engine to a Cinder-based GUI. This will include visualizing the piano and taking user inputs (which will require determining how to store all key-mappings from a QWERTY keyboard to a piano keyboard). Finally, during week 3, I will implement the special features of the project. I will have learn how to handle audio in Cinder and connect my audio engine to the piano engine. During week 3, I will also implement "sustain" feature, mimicking the sustain pedal on a piano. The user will be able to toggle the sustain feature on and off using a special key-bind. This will require me to use flexible audio files that can be adjusted to not only play piano sounds, but also sustain them realistically.

Some components of the timeline above will likely have to be readjusted. For example, I might be able to build both the GUI and audio engine during week 2, which will allow me to spend more time on implementing my special features (loading and saving). I will also likely be able to implement the loading/saving logic during week 2, as a implement my classes. This will give me even more time during week 3, which I could use to begin working on some "stretch goals."

One interesting "stretch goal" will be adding a feature that turns Synther into a rhythm game (like Just Dance or Dance Dance Revolution). This would involve creating a system where notes fall from the top of the screen and the user plays notes on the keyboard in time with the falling notes. This feature could further be extended to allow users to build their own game files. The user could using Synther's loading feature and then load in the file as a game.

An easier stretch goal might be building a recording feature. This feature will allow to the user to save and load music composition.

Edits: December 19 Swapped the sustain feature and the recorder feature on the timeline. While working on the project, the sustain pedal became my major week 3 goal. However, I was unable to complete the recorder, so this is left as a stretch goal that I will revisit at a later time.