Git Product home page Git Product logo

chord-recombinator-web's Introduction

ChordGuru: A Chord Recombinator Web Application

ChordGuru is a music chord identification/recombination web application for students learning about chords in music theory, as well as composers experimenting with various chord combinations given a group of notes for their compositions. The website functions by prompting the user to enter their desired notes through a multitude of input methods, then analyzing the given information through an Express.js backend server and sending chord combinations to the user through JS's Fetch API. Currently, the input methods supported include: interacting with an virtual piano keyboard; creating an audio recording on the website or drag-and-dropping a pre-recorded audio file; placing and modifying notes through a interactive staff builder; and standard text-like input.

This project makes use of Node.js and Express.js for the back-end server, while Bootstrap was utilized in front-end to create a responsive webpage design for various devices and browsers. Requests between client-side and server-side are handled through the Fetch API, and audio note parsing is handled through an Yin-FFT pitch detection algorithm in Python. The website design was created using Figma, an online interface design tool.

Other technologies of note include:

  • Wavesurfer.js & the Web Audio API to create waveform visualizations of audio recordings and live audio streams from the microphone,
  • Vexflow to generate chord results on music staves and to create an interactive staff builder
  • aubio and pydub Python libraries for audio pitch detection and file conversion, respectively

This website, which is currently hosted on glitch.com, can be accessed here (updated as of 09/05/2023). Just keep in mind that it might take a bit of time for the page to load at first, if no one has visited it within the past five minutes (one of Glitch's free account limitations for hosting sites with back-end servers).

How It Works

This is a WIP section for when I've got enough time to sit down and write a description.

...BUT if you're interested, I would recommend you check the schematics/ folder in the project root folder for a rough explanation of the logic behind the chord analysis (Scheme_1.png to Scheme_3.png). Further reading of music set theory can be pursued here:

Note that basic to moderate music theory knowledge is recommended (so at least RCM Basic Harmony/Level 9 Harmony levels of knowledge) for the above links.

To-do:

  • Create design and add implementation of interactive staff/text field input
  • Clean up and restructure code for certain CSS/JS files
  • Hook up sound to results page in chord info row dropdown
  • Optimize Text/Staff Line input page for mobile devices (specifically the interactive staff line, when changing device orientation from portrait to landscape)
  • Add proper home page, instead of redirecting to chords main page (unlikely to accomplish)
  • Add a working "Contact Me" page
  • Add support for analyzing scales
  • Add extra tools, such as a metronome

Run Locally:

Navigate to the root folder of the project and run:

npm install
npm run startLocal

Credits:

Original Python script and project schematics created by Kevin Chen.

chord-recombinator-web's People

Contributors

alexchen2 avatar kchenforyou avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.