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
Marsyas - Music Analysis, Retrieval and Synthesis for Audio Signals

Welcome to MARSYAS. MARSYAS is a software framework for rapid prototyping of audio applications, with flexibility and extensibility as primary concer

Marsyas Developers Group 364 Oct 31, 2022
Linear Prediction Coefficients estimation from mel-spectrogram implemented in Python based on Levinson-Durbin algorithm.

LPC_for_TTS Linear Prediction Coefficients estimation from mel-spectrogram implemented in Python based on Levinson-Durbin algorithm. 基于Levinson-Durbin

Zewang ZHANG 58 Nov 17, 2022
Open-Source Tools & Data for Music Source Separation: A Pragmatic Guide for the MIR Practitioner

Open-Source Tools & Data for Music Source Separation: A Pragmatic Guide for the MIR Practitioner

IELab@ Korea University 0 Nov 12, 2021
Python game programming in Jupyter notebooks.

Jupylet Jupylet is a Python library for programming 2D and 3D games, graphics, music and sound synthesizers, interactively in a Jupyter notebook. It i

Nir Aides 178 Dec 09, 2022
A simple voice detection system which can be applied practically for designing a device with capability to detect a baby’s cry and automatically turning on music

Auto-Baby-Cry-Detection-with-Music-Player A simple voice detection system which can be applied practically for designing a device with capability to d

2 Dec 15, 2021
Praat in Python, the Pythonic way

Parselmouth - Praat in Python, the Pythonic way Parselmouth is a Python library for the Praat software. Though other attempts have been made at portin

Yannick Jadoul 786 Jan 09, 2023
An 8D music player made to enjoy Halloween this year!🤘

HAPPY HALLOWEEN buddy! Split Player Hello There! Welcome to SplitPlayer... Supposed To Be A 8DPlayer.... You Decide.... It can play the ordinary audio

Akshat Kumar Singh 1 Nov 04, 2021
This Bot can extract audios and subtitles from video files

Send any valid video file and the bot shows you available streams in it that can be extracted!!

TroJanzHEX 56 Nov 22, 2022
python wrapper for rubberband

pyrubberband A python wrapper for rubberband. For now, this just provides lightweight wrappers for pitch-shifting and time-stretching. All processing

Brian McFee 106 Nov 28, 2022
:notes: Cross-platform music player

Exaile Exaile is a music player with a simple interface and powerful music management capabilities. Features include automatic fetching of album art,

Exaile 327 Dec 19, 2022
A python package for calculating the PESQ.

PyPESQ (WIP) Pypesq is a python wrapper for the PESQ score calculation C routine. It only can be used in evaluation purpose. INSTALL pip install https

Jingdong Li 269 Dec 18, 2022
A lightweight yet powerful audio-to-MIDI converter with pitch bend detection

Basic Pitch is a Python library for Automatic Music Transcription (AMT), using lightweight neural network developed by Spotify's Audio Intelligence La

Spotify 1.4k Jan 01, 2023
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
Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums)

LAKH MuseNet MIDI Dataset Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums) Bonus: Choir on Channel 10 Please CC

Alex 6 Nov 20, 2022
Audio pitch-shifting & re-sampling utility, based on the EMU SP-1200

Pitcher.py Free & OS emulation of the SP-12 & SP-1200 signal chain (now with GUI) Pitch shift / bitcrush / resample audio files Written and tested in

morgan 13 Oct 03, 2022
Desktop music recognition application for windows

MusicRecognizer Music recognition application for windows You can choose from which of the devices the recording will be made. If you choose speakers,

Nikita Merzlyakov 28 Dec 13, 2022
Real-time audio visualizations (spectrum, spectrogram, etc.)

Friture Friture is an application to visualize and analyze live audio data in real-time. Friture displays audio data in several widgets, such as a sco

Timothée Lecomte 700 Dec 31, 2022
An audio digital processing toolbox based on a workflow/pipeline principle

AudioTK Audio ToolKit is a set of audio filters. It helps assembling workflows for specific audio processing workloads. The audio workflow is split in

Matthieu Brucher 238 Oct 18, 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
DeepMusic is an easy to use Spotify like app to manage and listen to your favorites musics.

DeepMusic is an easy to use Spotify like app to manage and listen to your favorites musics. Technically, this project is an Android Client and its ent

Labrak Yanis 1 Jul 12, 2021