PianoPlayer - Automatic fingering generator for piano scores

Overview

PianoPlayer

Codacy Badge Downloads lics DOI

Automatic piano fingering generator.
Find the optimal fingering combination to play a piano score. Optionally visualize it in 3D with vedo.

Download and Install:

pip install pianoplayer

to enable sound you may need to:

sudo apt install libasound2-dev
pip install simpleaudio

Installing without 3D rendering

To only install the core functionality and skip everything else, use the following:

pip install music21
pip install --no-deps pianoplayer

To visualize the output annotated score install the latest musescore, or any other renderer of MusicXML files.

Windows 10 users can place this file: pianoplayer.bat on their desktop (edit the path to your local anaconda or python installation). Check out this link in case of installation problems.

CLI Usage:

Example command line from terminal:
pianoplayer scores/bach_invention4.xml --verbose -n10 -rvzm
will find the right hand fingering for the first 10 measures, pop up a 3D rendering window and invoke musescore.

The output is saved as a MusicXML file with name output.xml.

pianoplayer         # if no argument is given a GUI will pop up (on windows try `python pianoplayer.py`)
# Or
pianoplayer [-h] [-o] [-n] [-s] [-d] [-k] [-rbeam] [-lbeam] [-q] [-m] [-v] [--vedo-speed]
            [-z] [-l] [-r] [-XXS] [-XS] [-S] [-M] [-L] [-XL] [-XXL]
            filename
# Valid file formats: MusicXML, musescore, midi (.xml, .mscz, .mscx, .mid)
#
# Optional arguments:
#   -h, --help            show this help message and exit
#   -o , --outputfile     Annotated output xml file name
#   -n , --n-measures     [100] Number of score measures to scan
#   -s , --start-measure  Start from measure number [1]
#   -d , --depth          [auto] Depth of combinatorial search, [2-9]
#   -rbeam                [0] Specify Right Hand beam number
#   -lbeam                [1] Specify Left Hand beam number
#   --quiet               Switch off verbosity
#   -m, --musescore       Open output in musescore after processing
#   -b, --below-beam      Show fingering numbers below beam line
#   -v, --with-vedo       Play 3D scene after processing
#   -z, --sound-off       Disable sound
#   -l, --left-only       Fingering for left hand only
#   -r, --right-only      Fingering for right hand only
#   -XXS, --hand-size-XXS Set hand size to XXS
#   -XS, --hand-size-XS   Set hand size to XS
#   -S, --hand-size-S     Set hand size to S
#   -M, --hand-size-M     Set hand size to M
#   -L, --hand-size-L     Set hand size to L
#   -XL, --hand-size-XL   Set hand size to XL
#   -XXL, --hand-size-XXL Set hand size to XXL

GUI Usage:

Just type pianoplayer in a terminal (or double click the pianoplayer.bat file), then:

newgui

  • press Import Score (valid formats: musescore, MusicXML, MIDI, PIG)
  • press GENERATE (output.xml is written)
  • press Musescore to visualize the annotated score
  • press 3D Player to show the animation (Press Esc to quit the application)

Example output, as displayed in musescore:

(If fingering numbers are not visible enough try -b option.)

bachinv4

pianoplayer3d

How the algorithm works:

The algorithm minimizes the fingers speed needed to play a sequence of notes or chords by searching through feasible combinations of fingerings.

One possible advantage of this algorithm over similar ones is that it is completely dynamic, which means that it takes into account the physical position and speed of fingers while moving on the keyboard and the duration of each played note. It is not based on a static look-up table of likely or unlikely combinations of fingerings.

Fingering a piano score can vary a lot from individual to individual, therefore there is not such a thing as a "best" choice for fingering. This algorithm is meant to suggest a fingering combination which is "optimal" in the sense that it minimizes the effort of the hand avoiding unnecessary movements.

Parameters you can change:

  • Your hand size (from 'XXS' to 'XXL') which sets the relaxed distance between thumb and pinkie.
  • The beam number associated to the right hand is by default nr.0 (nr.1 for left hand). You can change it with -rbeam and -lbeam command line options.
  • Depth of combinatorial search, from 3 up to 9 notes ahead of the currently playing note. By default the algorithm selects this number automatically based on the duration of the notes to be played.

Limitations

  • Some specific fingering combinations, considered too unlikely in the first place, are excluded from the search (e.g. the 3rd finger crossing the 4th).
  • Hands are always assumed independent from each other.
  • In the 3D representation with sounds enabled, notes are played one after the other (no chords), so the tempo within the measure is not always respected.
  • Small notes/ornaments are ignored.
Comments
  • cannot find vtkplotter package

    cannot find vtkplotter package

    I receive the following error on Windows 10 and Ubuntu 18.04 as well after I import a score and click on 3D player in the GUI.

    VirtualKeyboard: cannot find vtkplotter package. Not installed?
    Try:
    (sudo) pip install --upgrade vtkplotter
    

    Any idea?

    bug 
    opened by kohanyirobert 10
  • Problem installing

    Problem installing

    Hello! The last month, i've been trying to install this program, but i just can't seem to do it. I never worked with python before, but i managed to get pip install working now. When i put in the pip install --upgrade pianoplayer , it says :

    Collecting pianoplayer Using cached pianoplayer-2.1.0.tar.gz (1.2 MB) Collecting music21 Using cached music21-5.7.2.tar.gz (18.5 MB) Collecting vtkplotter Using cached vtkplotter-2020.3.1.tar.gz (18.4 MB) ERROR: Could not find a version that satisfies the requirement vtk (from vtkplotter->pianoplayer) (from versions: none) ERROR: No matching distribution found for vtk (from vtkplotter->pianoplayer)

    when i then try to open the batch file, it just flashes and dissapears. Could someone please help me out? Thank you! Regards, Brend

    opened by BrendRR 10
  • Suggestion to UI

    Suggestion to UI

    Instead of writing fingering numbers as lyrics, could you consider using MuseScore's fingering notation? I think it would be more ergonomic and aesthetically more pleasing.

    opened by mhoangvslev 8
  • pianoplayer) (from versions: none) ERROR: No matching distribution found for vtk (from vtkplotter->pianoplayer)"">

    " Using cached vtkplotter-2020.3.1.tar.gz (18.4 MB) ERROR: Could not find a version that satisfies the requirement vtk (from vtkplotter->pianoplayer) (from versions: none) ERROR: No matching distribution found for vtk (from vtkplotter->pianoplayer)"

    Hi, I'm trying to install this for windows 10 and I get this error when I enter "pip install --upgrade pianoplayer" what should I do? I'm using python 3.8.5 if that matters.

    opened by gabezilla52 6
  • AttributeError: 'Instrument' object has no attribute 'tie'

    AttributeError: 'Instrument' object has no attribute 'tie'

    I'm getting the following error when running pianoplayer "xy.mid" --verbose -n10 -rvz (tested on Windows with Python 3.8 & 3.7, and on Manjaro python 3.8)

    Traceback (most recent call last):
      File "/home/anton/.local/bin/pianoplayer", line 195, in <module>
        rh.noteseq = reader(sf, beam=args.rbeam)
      File "/home/anton/.local/lib/python3.8/site-packages/pianoplayer/scorereader.py", line 51, in reader
        if n.tie and (n.tie.type=='continue' or n.tie.type=='stop'): continue
    AttributeError: 'Instrument' object has no attribute 'tie'
    
    opened by IngoOutgo 4
  • Errors package

    Errors package

    I downloaded the 2000 most popular piano sheet music from Musescore, as mxl.

    I ran the lastest pip version of pianoplayer on all of the files (on XXS setting), and started getting errors, like https://github.com/marcomusy/pianoplayer/issues/21 and others (python errors).

    Here I share an archive of all of the files that had execution errors (148 out of 2000), in the hope this helps you make this system more robust.

    File names are constructed from musescore ID, and title, so you can always trace back to musescore.com in order to see the file.

    errors.zip

    opened by AmitMY 4
  • Hand size keeps defaulting to M, MuseScore3 not showing fingering

    Hand size keeps defaulting to M, MuseScore3 not showing fingering

    Running this on Windows, so not sure how much of it has to do with this!

    Whenever I try to run it from either the GUI or command line using -S, -XS, etc, it defaults to M. It also seems to run through it twice (e.g., I see 'Your hand span set to size-M which is 17.22 cm (max relaxed distance between thumb and pinkie)' appear twice with the fingering output following it.

    Additionally, opening the output.xml file in MuseScore3 does not show any fingering, just the music. Scanning through the output file XML doesn't seem to clearly show any fingering.

    My apologies if this has already been addressed - I've searched through the issues and haven't seen anything in regard to these two issues!

    opened by kchurch05 3
  • Exception in Tkinter Callback

    Exception in Tkinter Callback

    Love this program as it's very helpful in learning fingering for new songs but getting an Exception in Tkinter calklback on a couple scores and hoping you might be able to help?

    Saving score to output.xml
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\Matth\anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
      File "C:\Users\Matth\anaconda3\Scripts\pianoplayer", line 93, in generateCMD
        sf.write('xml', fp='output.xml')
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\__init__.py", line 252, in write
        return super().write(*args, **kwargs)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\base.py", line 2562, in write
        return formatWriter.write(self, regularizedConverterFormat, fp, subformats, **keywords)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\converter\subConverters.py", line 927, in write
        dataBytes = generalExporter.parse()
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\musicxml\m21ToXml.py", line 363, in parse
        outObj = self.fromGeneralObject(obj)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\musicxml\m21ToXml.py", line 399, in fromGeneralObject
        outObj = meth(obj)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\musicxml\m21ToXml.py", line 411, in fromScore
        scOut = sc.makeNotation(inPlace=False)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\__init__.py", line 13127, in makeNotation
        **subroutineKeywords)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\__init__.py", line 6040, in makeNotation
        bestClef=bestClef)
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\__init__.py", line 5765, in makeMeasures
        inPlace=inPlace,
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\makeNotation.py", line 577, in makeMeasures
        'within any measures' % (e, start, end))
    music21.exceptions21.StreamException: cannot place element Piano with start/end 180.0/180.0 within any measures
    

    On a different score I get the following error:

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\Matth\anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
      File "C:\Users\Matth\anaconda3\Scripts\pianoplayer", line 89, in generateCMD
        self.lh.noteseq = reader(sf, beam=self.LeftHandBeam)
      File "C:\Users\Matth\anaconda3\lib\site-packages\pianoplayer\scorereader.py", line 32, in reader
        strm = sf.parts[beam].flat
      File "C:\Users\Matth\anaconda3\lib\site-packages\music21\stream\iterator.py", line 328, in __getitem__
        e = fe[k]
    IndexError: list index out of range
    

    I did some research and found the following: This error occurs when you run a program using the Canvas library (used from Unit 2 onwards) more than once. This is a known problem with Canvas, and is not caused by your programming. The only solution is to close all Python windows then re-run IDLE after each time you run your program.

    Not sure if the above is relevant. Any idea on how to fix the issue?

    bug 
    opened by mathiasjg 3
  • Exception on loading a music xml file

    Exception on loading a music xml file

    Windows 7, x64 system with python 3.6.

    I get an exception after loading a XML file. The program first prints the following

    Your hand span set to size-M which is 17.22 cm
    (max relaxed distance between thumb and pinkie)
    Reading beam 0 with 63 objects in stream.
    meas.1   finger:2 on C4         v=0.1      [2, 2, 3, 2, 5, 4] d:
    meas.1   finger:2 on C4         v=0.1      [2, 3, 2, 5, 4] d:5
    meas.2   finger:3 on D4         v=0.1      [3, 2, 5, 4, 2] d:5
    meas.2   finger:2 on C4         v=0.1      [2, 5, 4, 2, 2] d:5
    meas.2   finger:5 on F4         v=0.1      [5, 4, 2, 2, 3] d:5
    meas.3   finger:4 on E4         v=0.1      [4, 2, 2, 3, 2] d:5
    meas.3   finger:2 on C4         v=0.6      [2, 2, 3, 2, 5, 4] d:
    meas.3   finger:2 on C4         v=0.8      [2, 3, 2, 5, 4] d:5
    meas.4   finger:3 on D4         v=0.9      [3, 2, 5, 4, 1] d:5
    meas.4   finger:2 on C4         v=0.8      [2, 5, 4, 1, 1] d:5
    meas.4   finger:5 on G4         v=3.3      [5, 4, 1, 1, 5] d:5
    meas.5   finger:4 on F4         v=3.3      [4, 1, 1, 5, 3] d:5
    meas.5   finger:1 on C4         v=3.2      [1, 1, 5, 3, 2, 1] d:
    meas.5   finger:1 on C4         v=4.0      [1, 5, 3, 2, 1] d:5
    meas.6   finger:5 on C5         v=1.3      [5, 4, 3, 2, 1] d:5
    meas.6   finger:4 on A4         v=0.8      [4, 3, 2, 1, 5] d:5
    meas.6   finger:3 on F4         v=0.4      [3, 2, 1, 5, 5] d:5
    meas.7   finger:2 on E4         v=0.7      [2, 1, 5, 5, 4, 2] d:
    meas.7   finger:1 on D4         v=0.6      [1, 5, 5, 4, 2, 4] d:
    meas.7   finger:5 on B-4        v=0.5      [5, 5, 4, 2, 4, 3] d:
    meas.7   finger:5 on B-4        v=0.6      [5, 4, 2, 4, 3] d:5
    meas.8   finger:4 on A4         v=0.5      [4, 2, 4, 3, 1] d:5
    meas.8   finger:2 on F4         v=0.7      [2, 4, 3, 1, 2] d:5
    meas.8   finger:4 on A4         v=0.9      [4, 3, 1, 2, 1] d:5
    meas.9   finger:3 on G4         v=0.9      [3, 2, 3, 2, 5] d:5
    meas.9   finger:2 on C4         v=0.1      [2, 3, 2, 5, 4] d:5
    meas.10   finger:3 on D4        v=0.1      [3, 2, 5, 4, 2] d:5
    meas.10   finger:2 on C4        v=0.1      [2, 5, 4, 2, 3] d:5
    meas.10   finger:5 on F4        v=0.1      [5, 4, 2, 3, 2] d:5
    meas.11   finger:4 on E4        v=0.8      [4, 2, 3, 2, 5] d:5
    meas.11   finger:2 on C4        v=0.8      [2, 3, 2, 5, 4] d:5
    meas.12   finger:3 on D4        v=0.9      [3, 2, 5, 4, 1] d:5
    meas.12   finger:2 on C4        v=2.6      [2, 5, 4, 1, 5] d:5
    meas.12   finger:5 on G4        v=1.9      [5, 4, 1, 5, 3] d:5
    meas.13   finger:4 on F4        v=2.1      [4, 1, 5, 3, 1] d:5
    meas.13   finger:1 on C4        v=2.6      [1, 5, 3, 2, 1] d:5
    meas.14   finger:5 on C5        v=1.3      [5, 4, 3, 2, 1] d:5
    meas.14   finger:4 on A4        v=0.8      [4, 3, 2, 1, 5] d:5
    meas.14   finger:3 on F4        v=0.6      [3, 2, 1, 5, 4] d:5
    meas.15   finger:2 on E4        v=0.6      [2, 1, 5, 4, 2] d:5
    meas.15   finger:1 on D4        v=0.4      [1, 5, 4, 2, 3] d:5
    meas.15   finger:5 on B-4       v=0.3      [5, 4, 2, 3, 2] d:5
    meas.16   finger:4 on A4
    meas.16   finger:2 on F4
    meas.16   finger:3 on G4
    meas.17   finger:2 on F4
    meas.17   finger:1 on C4
    meas.17   finger:1 on C4
    meas.18   finger:5 on A4
    meas.18   finger:3 on F4
    meas.18   finger:4 on G4
    meas.19   finger:0 on F4
    Your hand span set to size-M which is 17.22 cm
    (max relaxed distance between thumb and pinkie)
    

    and then throws an exception

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1705, in __call
    __
        return self.func(*args)
      File "pianoplayer", line 89, in generateCMD
        self.lh.noteseq = reader(sf, beam=self.LeftHandBeam)
      File "C:\Program Files\Python36\lib\site-packages\pianoplayer\scorereader.py",
     line 32, in reader
        strm = sf.parts[beam].flat
      File "C:\Program Files\Python36\lib\site-packages\music21\stream\iterator.py",
     line 328, in __getitem__
        e = fe[k]
    IndexError: list index out of range
    

    I have attached the xml file that causes this error. Any pointers to this would be very helpful. TIA

    hb.zip

    opened by GitterHubber 3
  • Odd results for some accidentals

    Odd results for some accidentals

    This is a neat piece of software -- thanks for writing it!

    I've been playing with it a bit and noticed that for some "weird" accidentals like Cb the program outputs bizarre fingering choices. If I rewrite the note as B the fingering makes much more sense. I haven't tried the other comparable accidentals (B#, E#, Fb) to know if this is a general or specific problem (nor have I looked at double sharps or double flats). You may not even be actively working on this software anymore, but in case you are this is a minor issue that could use correcting. Thanks!

    Best, Jeffrey

    opened by jncarey 3
  • Double sharps are not recognized

    Double sharps are not recognized

    So for this score: https://musescore.com/user/147231/scores/1029831

    I get many errors:

    ERROR note not found F##

    Definitely makes sense why it's not recognized, just wanted to let you know in case you want to fix

    opened by AmitMY 2
  • On Windows

    On Windows

    "pip install pianoplayer" gives

    ERROR: Cannot install pianoplayer==1.0.0, pianoplayer==1.1.0, pianoplayer==1.1.1, pianoplayer==2.0.0, pianoplayer==2.0.1, pianoplayer==2.0.4, pianoplayer==2.0.5, pianoplayer==2.0.6, pianoplayer==2.0.7 and pianoplayer==2.1.0 because these package versions have conflicting dependencies.

    opened by AllTheProjects 1
  • Cannot visualize: `ERROR: texture file wood1 does not exist`

    Cannot visualize: `ERROR: texture file wood1 does not exist`

    Hello. I'm trying to visualize my MIDI file with this command:

    pianoplayer midi_file.midi -vz
    

    However, the command fails with these errors:

    [vedo.mesh.py:463] ERROR: texture file wood1 does not exist
    [vedo.mesh.py:463] ERROR: texture file wood1 does not exist
    Traceback (most recent call last):
      File "/home/hiroki/.local/bin/pianoplayer", line 224, in <module>
        vk = VirtualKeyboard(songname=xmlfn)
      File "/home/hiroki/.local/lib/python3.9/site-packages/pianoplayer/vkeyboard.py", line 41, in __init__
        self.build_keyboard()
      File "/home/hiroki/.local/lib/python3.9/site-packages/pianoplayer/vkeyboard.py", line 91, in build_keyboard
        self.vp += Text('PianoPlayer ^'+__version__+" ",
    NameError: name 'Text' is not defined
    

    I couldn't find the texture files on my computer. How can I get them?

    opened by toku-sa-n 3
  • No output.xml

    No output.xml

    After the program is finished processing, there is no output.xml file, or it is nowhere to be found. The first time running the program, it was found in the folder, but no longer. Also, the GUI Musescore function does not work, returning 'musescore' is not recognized as an internal or external command, operable program or batch file..

    opened by ztianhan 0
  • Timing information units ?

    Timing information units ?

    Hi,

    I am trying to understand the data in the INote class, in particular self.time and self.duration

    https://github.com/marcomusy/pianoplayer/blob/master/pianoplayer/scorereader.py#L20

    What are their units ? Are they measured in seconds or are they relative to another time reference ?

    Cheers

    opened by nyue 0
Releases(2.2.0)
Owner
Marco Musy
EMBL
Marco Musy
Manipulate audio with a simple and easy high level interface

Pydub Pydub lets you do stuff to audio in a way that isn't stupid. Stuff you might be looking for: Installing Pydub API Documentation Dependencies Pla

James Robert 6.6k Jan 01, 2023
Inner ear models for Python

cochlea cochlea is a collection of inner ear models. All models are easily accessible as Python functions. They take sound signal as input and return

98 Jan 05, 2023
A Youtube audio player for your terminal

AudioLine A lightweight Youtube audio player for your terminal Explore the docs » View Demo · Report Bug · Request Feature · Send a Pull Request About

Haseeb Khalid 26 Jan 04, 2023
Pythonic bindings for FFmpeg's libraries.

PyAV PyAV is a Pythonic binding for the FFmpeg libraries. We aim to provide all of the power and control of the underlying library, but manage the gri

PyAV 1.8k Jan 03, 2023
Real-Time Spherical Microphone Renderer for binaural reproduction in Python

ReTiSAR Implementation of the Real-Time Spherical Microphone Renderer for binaural reproduction in Python [1][2]. Contents: | Requirements | Setup | Q

Division of Applied Acoustics at Chalmers University of Technology 51 Dec 17, 2022
Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art!

osu-Extract Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art! Requirements python3 mutagen pillow Us

William Carter 2 Mar 09, 2022
python script for getting mp3 files from yaoutube playlist

mp3-from-youtube-playlist python script for getting mp3 files from youtube playlist. Do your non-tech brown relatives ask you for downloading music fr

Shuhan Mirza 7 Oct 19, 2022
Music player and music library manager for Linux, Windows, and macOS

Ex Falso / Quod Libet - A Music Library / Editor / Player Quod Libet is a music management program. It provides several different ways to view your au

Quod Libet 1.2k Jan 07, 2023
A simple python script to play bell sound in your system infinitely, just for fun and experimental purposes

A simple python script to play bell sound in your system infinitely, just for fun and experimental purposes

نافع الهلالي 1 Oct 29, 2021
A collection of python scripts for extracting and analyzing acoustics from audio files.

pyAcoustics A collection of python scripts for extracting and analyzing acoustics from audio files. Contents 1 Common Use Cases 2 Major revisions 3 Fe

Tim 74 Dec 26, 2022
Algorithmic Multi-Instrumental MIDI Continuation Implementation

Matchmaker Algorithmic Multi-Instrumental MIDI Continuation Implementation Taming large-scale MIDI datasets with algorithms This is a WIP so please ch

Alex 2 Mar 11, 2022
Conferencing Speech Challenge

ConferencingSpeech 2021 challenge This repository contains the datasets list and scripts required for the ConferencingSpeech challenge. For more detai

73 Nov 29, 2022
This is a python package that turns any images into MIDI files that views the same as them

image_to_midi This is a python package that turns any images into MIDI files that views the same as them. This package firstly convert the image to AS

Rainbow Dreamer 4 Mar 10, 2022
LibXtract is a simple, portable, lightweight library of audio feature extraction functions.

LibXtract LibXtract is a simple, portable, lightweight library of audio feature extraction functions. The purpose of the library is to provide a relat

Jamie Bullock 215 Nov 16, 2022
Python audio and music signal processing library

madmom Madmom is an audio signal processing library written in Python with a strong focus on music information retrieval (MIR) tasks. The library is i

Institute of Computational Perception 1k Dec 26, 2022
SolidMusic rewrite version, need help

Telegram Streamer Bot This is rewrite version of solidmusic, but it can't be deployed now, help me to make this bot running fast and good. If anyone w

Shohih Abdul 63 Jan 06, 2022
Learn chords with your MIDI keyboard !

miditeach miditeach is a music learning tool that can be used to practice your chords skills with a midi keyboard 🎹 ! Features Midi keyboard input se

Alexis LOUIS 3 Oct 20, 2021
Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists with a Plex server.

PlexMusicSync Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists (m3u, m3u8) with a Plex server. The song file

Tom Goetz 9 Jul 07, 2022
Python library for audio and music analysis

librosa A python package for music and audio analysis. Documentation See https://librosa.org/doc/ for a complete reference manual and introductory tut

librosa 5.6k Jan 06, 2023
PianoPlayer - Automatic fingering generator for piano scores

PianoPlayer - Automatic fingering generator for piano scores

Marco Musy 571 Jan 02, 2023