{"id":20154752,"url":"https://github.com/misterixi/noteanalyser","last_synced_at":"2026-05-16T06:37:13.472Z","repository":{"id":43667409,"uuid":"447195198","full_name":"MisterIXI/Noteanalyser","owner":"MisterIXI","description":"A university project - Analysing piano audio with FFT","archived":false,"fork":false,"pushed_at":"2024-07-11T10:01:15.000Z","size":2212,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-07T05:05:51.469Z","etag":null,"topics":["raspberry-pi","university-project"],"latest_commit_sha":null,"homepage":"https://misterixi.github.io/NoteanalyserPreview/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MisterIXI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-01-12T11:41:35.000Z","updated_at":"2024-07-11T10:01:18.000Z","dependencies_parsed_at":"2024-11-13T23:39:56.734Z","dependency_job_id":null,"html_url":"https://github.com/MisterIXI/Noteanalyser","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/MisterIXI/Noteanalyser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterIXI%2FNoteanalyser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterIXI%2FNoteanalyser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterIXI%2FNoteanalyser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterIXI%2FNoteanalyser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MisterIXI","download_url":"https://codeload.github.com/MisterIXI/Noteanalyser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterIXI%2FNoteanalyser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33092744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["raspberry-pi","university-project"],"created_at":"2024-11-13T23:28:19.763Z","updated_at":"2026-05-16T06:37:13.458Z","avatar_url":"https://github.com/MisterIXI.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Summary\nThis program takes live input from the default microphone, and performs a frequency analysis to recognize the played note on a piano. (Or a direct generated sine wave)\nThis is a university project for \"MUME\" under Maximilian Mengel.\n\n[Click here](https://misterixi.github.io/NoteanalyserPreview/) for a rendered Preview of the 3D Model. Alternatively you can visit the [Fusion 360 shared Link](https://a360.co/3uYjknz) to get a manual view of the model file. :)  \nPictures and building instructions are found [here on prusaprinters.com](https://www.prusaprinters.org/prints/139324-noteanalyser)  \nAnd a short Demo is uploaded here on Youtube: https://youtu.be/D2MXBKhizrM\n\n![Noteanalyser](./pics/Analyser_pic.webp)\n# Compatibility\nThis program was designed and tested on a Raspberry Pi 4 (8GB) with Raspbian Lite.\nYou can probably run this on other Systems, but keep in mind that if you enable the LED or LCD option the program will not run if you are not on an Raspi or don't have an i2c LCD connected.\n\n# Installation\nRequired Programms:\nplease install the following programms with your package manager (sudo apt-get install [...])\n- make\n- cmake\n- g++\n- gnuplot (optional if you never activate plotting)  \n\nYou can install everything at once like so on debian (and raspbian)  \n```sudo apt-get install make cmake g++ gnuplot```\n\nAfter this you can simply run the provided installation script with:  \n```sudo ./install_dependencies```  \n\nNote that this script will attempt to download and install every depencies it finds as missing in the system including compiling. It might take a few minutes to run, but afterwards everything should be ready.  \nIt will create the directory **lib/** which you can delete after running the script since it is only a working directory. The dependencies themselves will be installed to the system accordingly.\n\nTo compile the program you now only need to type ```make``` in the parent directory.\n\n# Usage\nThe Programm features 4 Flags:\n- \"-S\": activates the Screen (requires the program to be run as root)\n- \"-L\": uses LEDs to output results (requires the program to be run as root)\n- \"-G\": outputs the results to files and uses gnuplot to graph them into .png\n- \"-M\": Recognize multiple Notes instead of a single one  \n  \nYou can set the defaults of these flags at the top of the \"AnalyserDefinitions.h\".\n\n# Hardware assembly  \nYou can find the main assembly instructions [here on prusaprinters.com](https://www.prusaprinters.org/prints/139324-noteanalyser).  \nIn Short: The whole project was designed with M3 threaded heatinsterts in mind together with M3x6 screws. You can use longer screws everywhere except for the LCD screws and the LEDHolder part.\n\n# How it works\nHere an example of E4, G4 and B4(/H4) being pressed at the same time. With a too much noise.\n1. Recording 0.5s of data from the microphone\n![Raw values](./pics/raw.png)\n2. This is then first scaled to to try and match the offset in loudness of the values\n![Scaled values](./pics/scaled.png)\n3. Now we filter to only the peaks and try to remove any noise around them.\n![Filtered values](./pics/filtered.png)\n4. As a last step we remove the overtones.\n![OTs removed](./pics/OTremoval.png)\n\nThis is an intentional unclean example to show a few things:\nThe problem with the hard scaling at the low end introduces a lot of noise. Which in turn makes the further steps more difficult. But we found without the scaling the lower notes often don't get picked up enough, which led to false recognition of the overtones.\nFurther tweaking of the parameters should alleviate most of these issues.  \nSteps 2 and 3 could both use some improvements. Specifically the filter step has trouble with kicking early notes. This also comes from the notes being very close together at the low end.  \nIn the end this cycle has recognized the correct notes, but the noise also made a few false positives. Which will filter down to two wrong notes in the output (every peak gets matched with the closed frequency of a note, even when that frequency was already \"found\")\n\n# Autostart\nTo configure the program to start automatically at boot you have to add the following line to the `/etc/crontab`:  \n`@reboot root /home/pi/Noteanalyser/startNoteanalyser \u0026`  \n(Of course change the path to the script accordingly) This will call the script which waits for 20 seconds after boot to wait for the intialisation of the microphone. After that it starts the program in the background.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterixi%2Fnoteanalyser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmisterixi%2Fnoteanalyser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterixi%2Fnoteanalyser/lists"}