{"id":27566808,"url":"https://github.com/egordm/libtempo","last_synced_at":"2025-04-20T18:01:25.513Z","repository":{"id":62575994,"uuid":"142356623","full_name":"egordm/libtempo","owner":"egordm","description":"C++ / Python library with signal processing and tempo estimation utilities.","archived":false,"fork":false,"pushed_at":"2018-10-12T22:47:11.000Z","size":62163,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-21T14:58:10.687Z","etag":null,"topics":["armadillo","cpp","music-information-retrieval","signal-processing"],"latest_commit_sha":null,"homepage":"","language":"C++","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/egordm.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2018-07-25T21:38:34.000Z","updated_at":"2024-03-13T21:34:50.000Z","dependencies_parsed_at":"2022-11-03T20:44:28.023Z","dependency_job_id":null,"html_url":"https://github.com/egordm/libtempo","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egordm%2Flibtempo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egordm%2Flibtempo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egordm%2Flibtempo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egordm%2Flibtempo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/egordm","download_url":"https://codeload.github.com/egordm/libtempo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249939564,"owners_count":21348546,"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":["armadillo","cpp","music-information-retrieval","signal-processing"],"created_at":"2025-04-20T18:01:08.247Z","updated_at":"2025-04-20T18:01:25.493Z","avatar_url":"https://github.com/egordm.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# LibTempo\nC++ / Python library for signal processing and tempo information extraction.\n\n## CLI\n**MP3, FLAC and WAV audio formats are supported.**\n### [Downloads](https://github.com/EgorDm/libtempo/releases)\n### Examples\n* [Megadeth - Five Magics](https://github.com/EgorDm/libtempo/raw/master/docs/assets/magics.png)\n* [Led Zeppelin - Stairway To Heaven](https://github.com/EgorDm/libtempo/raw/master/docs/assets/stairway.png)\n* [DragonForce - Valley of the Damned](https://github.com/EgorDm/libtempo/raw/master/docs/assets/valley_of.png)\n\n### Usage\n```bash\nlibtempo [audio] {OPTIONS}\n```\n```\n    OPTIONS:\n\n      -h, --help                        Display the help menu\n      Basic\n        -t[preferred_bpm],\n        --preferred_bpm=[preferred_bpm]   (Default: 130) BPM around which the\n                                          real bpm will be chosen.\n        --bpm_rounding_precision=[bpm_rounding_precision]\n                                          (Default: 0.500000) Precision of the\n                                          BPM before correction..\n        -s[smooth_length],\n        --smooth_length=[smooth_length]   (Default: 20.000000) Length in seconds\n                                          over which the tempogram will be\n                                          stabilized to extract a steady tempo.\n        -l[min_section_length],\n        --min_section_length=[min_section_length]\n                                          (Default: 10.000000) Minimum length\n                                          for a tempo section in seconds.\n        --max_section_length=[max_section_length]\n                                          (Default: 40.000000) Maximum section\n                                          length in seconds after which section\n                                          is split in half.\n      Advanced\n        --bpm_window=[bpm_window]         BPM range which to check for tempo\n                                          peaks.\n        -m[tempo_multiples...],\n        --tempo_multiples=[tempo_multiples...]\n                                          Tempo multiples to consider when\n                                          searching for correct offset\n        --ref_tempo=[ref_tempo]           (Default: 60) Reference tempo defining\n                                          the partition of BPM into tempo\n                                          octaves for calculating cyclic\n                                          tempogram.\n        --tempo_window=[tempo_window]     (Default: 8) Analysis window length in\n                                          seconds for calculating tempogram.\n        --octave_divider=[octave_divider] (Default: 120) Number of tempo classes\n                                          used for representing a tempo octave.\n                                          This parameter controls the\n                                          dimensionality of cyclic tempogram.\n        --triplet_weight=[triplet_weight] (Default: 3.000000) Weight of the\n                                          triplet intensity which will be adeed\n                                          to its base intensity.\n        --bpm_doubt_window=[bpm_doubt_window]\n                                          (Default: 2.000000) Window around\n                                          candidate bpm which to search for a\n                                          more fine and correct bpm.\n        --bpm_doubt_step=[bpm_doubt_step] (Default: 0.100000) Steps which to\n                                          take inside the doubt window to fine\n                                          tune the bpm.\n        --click_track_subdivision=[click_track_subdivision]\n                                          (Default: 8) Click subdivision for the\n                                          click track.\n      Output Flags\n        -c[generate_click_track],\n        --generate_click_track=[generate_click_track]\n                                          (Default: 1) Wether or not a click\n                                          track should be generated\n        -o, --osu                         Wether or not to generate tempo data\n                                          in osu format.\n        --viz                             Saves a html file with useful graphs.\n        -d, --dump                        Dump generated tempograms and novelty\n                                          curves into a file.\n      audio                             Audio file to extract tempo of.\n      \"--\" can be used to terminate flag options and force all following\n      arguments to be treated as positional options\n```\n\n## Library\n### [Building](https://github.com/EgorDm/libtempo/wiki/Building)\n### [Documentation](https://github.com/EgorDm/libtempo/wiki/Documentation)\n\n## Flaws / TODO's\n* BPM calculated is the percieved bpm. There is also real bpm which may be twice as high. (I would love to hear any suggestions how this could be helped)\n* Pars where bpm is constantly changed are rounded away when making secions.\n* Sometimes offset might be shifted by a 1/4th or 1/8th note.\n\n## References\n* [Tempogram \u0026 novelty curve calculation](http://resources.mpi-inf.mpg.de/MIR/tempogramtoolbox/) [[1]](https://ieeexplore.ieee.org/document/5654580/) [[2]](http://resources.mpi-inf.mpg.de/MIR/tempogramtoolbox/2010_GroscheMuellerKurth_TempogramCyclic_ICASSP.pdf) [[3]](http://resources.mpi-inf.mpg.de/MIR/tempogramtoolbox/2009_GroscheMueller_PredominantLocalPeriodicy_WASPAA.pdf)\n* [Modified signal resampling code](https://github.com/terrygta/SignalResampler)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegordm%2Flibtempo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fegordm%2Flibtempo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegordm%2Flibtempo/lists"}