{"id":20210799,"url":"https://github.com/bluekeyes/hanon","last_synced_at":"2025-10-26T14:44:21.519Z","repository":{"id":146499335,"uuid":"67575209","full_name":"bluekeyes/hanon","owner":"bluekeyes","description":"Record and evaluate Hanon piano exercises","archived":false,"fork":false,"pushed_at":"2017-04-08T21:10:41.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-13T21:33:14.391Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bluekeyes.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-07T05:33:25.000Z","updated_at":"2016-09-07T05:34:01.000Z","dependencies_parsed_at":"2023-07-16T04:16:22.032Z","dependency_job_id":null,"html_url":"https://github.com/bluekeyes/hanon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluekeyes%2Fhanon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluekeyes%2Fhanon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluekeyes%2Fhanon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluekeyes%2Fhanon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bluekeyes","download_url":"https://codeload.github.com/bluekeyes/hanon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241652903,"owners_count":19997574,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T05:49:28.868Z","updated_at":"2025-10-26T14:44:21.464Z","avatar_url":"https://github.com/bluekeyes.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Hanon\n=====\n\nA command line tool to record and evaluate MIDI performances of exercises from\nHanon's `The Virtuoso Pianist`_.\n\nThe feature set is quite limited at the moment, with only features needed for\nmy own practicing.\n\nExercises\n---------\n\n- **Part 1**: 1 - 6\n\n.. _The Virtuoso Pianist: https://en.wikipedia.org/wiki/Charles-Louis_Hanon#The_Virtuoso_Pianist\n\nUsage\n-----\n\nA MIDI keyboard is required to use this tool. To record all exercises and graph\nthe results::\n\n    hanon -g\n\nTo record specific exercises::\n\n    hanon -e 1,2 -g\n\nSee ``hanon --help`` for full usage details:\n\n.. code-block::\n   usage: hanon [-h] [-e EXERCISES] [-b BPM] [-i INTERFACE] [-c CHANNEL]\n               [-t TIME] [-d DIR] [-a PATH] [-g] [-l]\n\n   Record and grade Hanon exercises\n\n   optional arguments:\n   -h, --help            show this help message and exit\n   -e EXERCISES, --exercises EXERCISES\n                           comma-separated list of expected excercises\n   -b BPM, --bpm BPM     expected beats per minute\n   -i INTERFACE, --interface INTERFACE\n                           MIDI interface to record\n   -c CHANNEL, --channel CHANNEL\n                           MIDI channel to record\n   -t TIME, --time TIME  Seconds to wait for events before stopping\n   -d DIR, --recording-dir DIR\n                           path to recordings directory\n   -a PATH, --analyze PATH\n                           analyze a saved recording\n   -g, --graph           print graphs with statistics\n   -l, --list            list MIDI interfaces and exit\n\n   With no arguments, the program promts for an interface, then waits for the\n   first \"Note On\" event on that interface. It then records all events until a\n   period of 5 seconds with no events. The recording is saved to the default\n   output directory and statistics about the performance are printed to the\n   console.\n\nSample output::\n\n    Exercise #1\n    ===========\n    extra notes: 1, missed notes: 0\n    avg delay: 15.16 (left: 12.79, right: 17.52)\n\n    avg delay by finger (left)\n    ───────────────────────────────────────────────────────────────────────────────\n    1  18.25 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    2  12.29 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    3   8.23 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    4  14.80 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    5  13.40 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n\n    avg delay by finger (right)\n    ───────────────────────────────────────────────────────────────────────────────\n    1  18.69 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    2  13.83 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    3  23.82 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    4  16.90 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    5  12.42 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n\n    avg velocity by finger (left)\n    ───────────────────────────────────────────────────────────────────────────────\n    1  73.55 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    2  52.41 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    3  55.24 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    4  54.45 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    5  65.62 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n\n    avg velocity by finger (right)\n    ───────────────────────────────────────────────────────────────────────────────\n    1  65.76 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    2  55.41 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    3  54.03 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    4  61.62 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n    5  65.72 │▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluekeyes%2Fhanon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbluekeyes%2Fhanon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluekeyes%2Fhanon/lists"}