Giter VIP home page Giter VIP logo

maikully / tablator Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 42.81 MB

Webapp that converts a sequence of notes or a midi file to guitar tabs, using a dynamic programming algorithm to find the best fingering sequences

Home Page: http://tablator.herokuapp.com/

License: MIT License

Procfile 0.01% Shell 0.02% Python 96.92% PowerShell 0.01% HTML 0.01% CSS 0.04% JavaScript 0.21% C 1.87% Cython 0.37% C++ 0.40% Fortran 0.11% Forth 0.02% Nushell 0.02%
dynamic-programming guitar midi music music-theory

tablator's Introduction

Tablator

Tablator is a webapp that converts a sequence of notes or midi file into a guitar tab.

App link: http://tablator.herokuapp.com

When playing a passage, for every note, a guitarist must choose which finger to use to fret the string and, unless the note only can be played on one string, which string to play the note on. This choice greatly impacts the playability of the passage: a better fingering means an easier time playing. This program uses a dynamic programming algorithm to find the three best possible fingering sequences for a sequence of notes.

All possible fingering paths can be represented as a series of columns of nodes, where each column represents a note and every node represents a fingering for that note. Each fingering has three properties: which finger was used, which string was used, and which fret was pressed. Each path follows the series from left to right, using exactly one node per column.

graph

The cost function for the transition between two notes is calculated using the difference between the displacement in frets and the displacement in finger used (assuming all four fingers can comfortably cover exactly one fret). Higher frets also produce higher cost.

Currently, the program will only work on monophonic data. For any polyphonic beats (if two consecutive notes have the exact same note-on time), the program uses one of the notes. Any notes outside the range of the chosen instrument will be octave-shifted in.

Features

  • compose a line using a virtual keyboard and view its best tabs
  • import a midi file and view its best tabs
  • set a capo or adjust the cost settings
  • make tabs for bass or alternate tunings
  • play the midi file out loud
  • download the tab as a txt file

Local Installation

Tablator requires Node.js and Python to run locally.

Starting the frontend (React) server:

cd frontend
npm i
npm start

Starting the backend (python) server:

pip3 install -r requirements.txt
python3 base.py

Todo:

  • time representation between notes can be improved
  • get chords working
  • display note fingerings alongside note
  • display as score using Lilypond
  • option to octave shift
  • add option to not prioritize open strings or lower frets
  • option to download composed midi
  • capo
  • fix negative difficulty values when prioritizing higher
  • add custom tunings
  • option to ignore fret height
  • piano input
  • leave out similar tabs
  • add bass tabs
  • add loading throbber
  • double-digit frets being cut in half at wrap
  • add sample midi
  • download buttons for tabs
  • display cost for tab
  • notes after a long pause being cut off
  • have tab length change based on screen width
  • all three buttons showing with fewer than three versions available
  • remainder notes not showing

tablator's People

Contributors

maikully avatar

Stargazers

L# avatar

Watchers

 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.