Skip to content

Instantly share code, notes, and snippets.

@dev-elle-up
Last active June 19, 2019 03:27
Show Gist options
  • Save dev-elle-up/1885585962b02068686b57ff36ea6c59 to your computer and use it in GitHub Desktop.
Save dev-elle-up/1885585962b02068686b57ff36ea6c59 to your computer and use it in GitHub Desktop.
Capstone Concepts

Capstone Concept - Elle

Problem Statement #1 - Play That Note

When learning to sing or play an instrument, the student must learn how to produce each note and connect that note with its visual representation on a music staff. This is a simpler task with instruments that have many physical keys, such as flute, clarinet, and other woodwinds, but becomes increasingly difficult in brass instruments, fretless string instruments, and voice. I plan to produce a piece of software that will display a image of a music note on a staff to the user and ask the user to play that note. The software will analyze the input and give feedback regarding whether the note they played matches what was displayed.

MVP Feature Set

The minimum viable product will consist of the following features.

  1. Match the note displayed
    • A music note is displayed on the screen
    • The user must play the note
    • The app analyzes the audio it receives (the sound that the user produces)
    • The app displays the result of its analysis to the user (correct / incorrect)
  2. The user gets three attempts to play the correct note.
    • If the note played is incorrect, the user will be asked to try again.
  3. The initial implementation will be designed for beginner cello students and will contain support for notes C2 through D4 displayed on a bass clef.

Potential Additional Features

  1. Hard, medium, and easy mode (more or less precision in the frequency range accepted)
  2. Continuous play. Continuously update the sampled incoming audio and display the note the user is playing on the same staff. When the note played aligns with the note shown, the two visually converge and "sparkle" before the user is given another note to play.
  3. Multiple note play (play these three notes sequentially)
  4. Display whether the note was flat, sharp, or in tune
  5. If the note was incorrect, display (both on a staff and with the letter name) the note that was played
  6. The app plays a note and asks the user to play the 5th, 3rd, octave, diminished 7th, etc. This component can help a user learn to sing/play while another sound is being produced (challenging for new musicians!) as well as learn common chord structures for various types of music (classical, blues, punk, jazz, etc).
  7. Gamification - keep track of points earned by playing a challenge set.
  8. Persisting that score in an account that the user has to log into; possibly only keep this data on their local device.
  9. After two wrong attempts, the correct note is played and they are given one more opportunity to match it.
  10. Give the user buttons to:
  • play the note (the app plays a stored audio file)
  • skip a note
  • select the note or range of notes they want to practice
  1. Add support for the user to select their instrument or voice range.
  2. Add support for treble cleff, alto cleff, and tenor cleff.
  3. Let the user set the number of attempts.

Draft Technology Choices

  • React Native (for Android app) - or - JavaScript (for Web App)
  • Web Audio API: AudioBuffer https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer - interface representing a short audio asset residing in memory
  • Node
  • Pitchfinder (a Node library) https://github.com/peterkhayes/pitchfinder - pitch detection algorithms for Javascript (browser and node)
  • Some method of deployment (web page with download link and files hosted or app store if Android app); must be HTTPS if a web app for Chrome to enable microphone access
  • HTML, CSS, Bootstrap

Additional content, diagrams, wireframes, user flows, etc.

https://www.evernote.com/l/Ag4Lrqfi_ZFAt7PAOjkJJuQWf3JsJjMPWC0

Capstone Concept - Elle

Problem Statement #2 - Browser Manager

We all tend to have ten or so tabs open in each of five or more browser windows at any given time. Then we struggle to find that one tab we're looking for. This browser window manager will helps users organize their browser windows by giving each window a custom name. For example, right now I might have browser windows named EC Project, Capstone Research, CS Fundamentals, and Admin Stuff.

MVP Feature Set

The minimum viable product will consist of the following features.

  1. Add a title bar to the top of a Chrome browser window running on macOS Mojave 10.14.3
  2. Enable the user to click on the title bar and enter a custom name. The default will name the windows with sequential numbers starting at 1.

Potential Additional Features

  1. When the mission control key is pressed, overlay the name of the browser window in a large font
  2. Build an interface that displays the name of each window and all of the tabs that are currently open inside of each window
  3. Add functionality to the display interface that lets the user rename the windows, search for tabs, reorder tabs, move tabs between windows, and close tabs or whole browser windows

Draft Technology Choices

  • Xcode
  • Swift
  • Objective C

(These will depend on whether I make a Chrome browser extension or a desktop app for the Mac.)

Additional content, diagrams, wireframes, user flows, etc.

TBD

@CheezItMan
Copy link

Feedback

Overview

As we talked about earlier, this sounds like a a solid capstone project, really neat. I do suggest that you also have a fallback in case you have trouble with matching pitch to a specific value. I think it can be done and the library you found will work, but I'm a bit nervous about this project depending on solving one killer feature. You might need to link this to a specific type of instrument or otherwise narrow down the problem space.

BTW I note that the diagrams are still (diagrams go here).

Technology choices

React Native or JavaScript (React, Angular or whatever) for a web app will work for the front-end. You might consider some kind of back-end to persist data,. Maybe Google Firebase or Mongo DB, or a Node API.

For deployment you could deploy the front-end with Github pages for a webpage, and a backend to Google Cloud or Azure or AWS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment