Giter Site home page Giter Site logo

improve's Introduction

ImproVe: A Scientific Aid to Improvisation

Introduction

The goal of this project is to provide beginner musicians with constantly adjusted suggestions.

It can be easily adjusted for any instrument, and adapted to all kinds of consonance models.

Currently, it gives you a somewhat accurate fretboard-looking suggestion thing.

alt text

Notes

Because the analysis is (ideally) objective, by estimating sound roughness, the suggestions do not take into account any cultural parts of perceived consonance and dissonance. This could potentially help a musician to break out of habits and explore music outside of trained norms.

On the other hand, because the analysis is still a couple levels of abstractions removed from the actual perception of dissonance, a lot of information is lost, and up to the composer to estimate, by instinct or traditional music theory.

Requirements

The dependencies is SDL2 and SDL2-ttf (or libsdl2-dev and libsdl2-ttf-dev for linux)

For the terminal display you will need a modern terminal, with true-colour and termcaps support.

You also need cargo, but that's a bit of a given for any rust project.

Run with cargo run, help with cargo run -- -h

If experiencing lag, consider cargo run --release and the -o option, which allows the program to 'skip' audio data.

To Do

Features

  • Audio feedback mode ?
  • Change parameters at runtime
  • Other displays than guitar
  • Better smoothing of dissonance curve over octaves
  • Make the note graph indicate value not just diff to other values
  • Changing the ratio of discarded frequencies
  • Chord display
  • Put back dissonance exp lookup table to accelerate load time

Output quality

  • Use actual sample of the targeted instrument
  • Use a more scientific secondary beatings estimate (dissonance over time)
  • Option for a music theory approach instead of the current formula
  • Remove masking unless it shows to actually be working

Code

  • use OCTAVE const for different octave sizes
  • rename Frequency to Component, and Frequency.value to Component.frequency
  • rename fourier_thread to scoring_thread or similar
    • use ThreadBuilder::name

improve's People

Contributors

lgarczyn 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.