timetoalign 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- timetoalign-0.2.0/.git +1 -0
- timetoalign-0.2.0/.github/workflows/release-please.yml +20 -0
- timetoalign-0.2.0/.gitignore +24 -0
- timetoalign-0.2.0/.isort.cfg +2 -0
- timetoalign-0.2.0/.pre-commit-config.yaml +62 -0
- timetoalign-0.2.0/CHANGELOG.md +51 -0
- timetoalign-0.2.0/PKG-INFO +420 -0
- timetoalign-0.2.0/README.md +264 -0
- timetoalign-0.2.0/docs/.gitignore +2 -0
- timetoalign-0.2.0/docs/.nojekyll +0 -0
- timetoalign-0.2.0/docs/README.md +73 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_advanced_cmaps.py +217 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_advanced_timestamps.py +167 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_beat_grids.py +583 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_coordinate_math.py +153 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_flow_control.py +481 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_graphical_timelines.py +207 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_loading_data.py +332 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_manual_timeline_construction.py +201 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_tabular_loaders.py +464 -0
- timetoalign-0.2.0/docs/howto-notebooks/how01_thoresen_annotation_transfer.py +613 -0
- timetoalign-0.2.0/docs/howto-notebooks/how02_supra_piano_roll.py +683 -0
- timetoalign-0.2.0/docs/howto-notebooks/how03_beethoven_multimodal.py +994 -0
- timetoalign-0.2.0/docs/howto-notebooks/how03_create_note_alignment.py +281 -0
- timetoalign-0.2.0/docs/howto-notebooks/how03_loading_vienna_corpus.py +309 -0
- timetoalign-0.2.0/docs/howto-notebooks/how04_hendrix_song_genesis.py +267 -0
- timetoalign-0.2.0/docs/howto-notebooks/how04_load_anything.py +1106 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/ao_c/303/251u_beats.csv +745 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/ao_c/303/251u_beats_tilia.csv +745 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/bass_kick_beats.csv +617 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/bass_kick_beats_tilia.csv +617 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/bye_bye_beats.csv +785 -0
- timetoalign-0.2.0/docs/howto-notebooks/outputs/bye_bye_beats_tilia.csv +785 -0
- timetoalign-0.2.0/docs/index.html +11 -0
- timetoalign-0.2.0/docs/page/.gitignore +3 -0
- timetoalign-0.2.0/docs/page/.sync_state.json +34 -0
- timetoalign-0.2.0/docs/page/_extensions/debruine/glossary/_extension.yml +7 -0
- timetoalign-0.2.0/docs/page/_extensions/debruine/glossary/glossary.css +56 -0
- timetoalign-0.2.0/docs/page/_extensions/debruine/glossary/glossary.lua +174 -0
- timetoalign-0.2.0/docs/page/_extensions/machow/interlinks/.gitignore +3 -0
- timetoalign-0.2.0/docs/page/_extensions/machow/interlinks/_extension.yml +7 -0
- timetoalign-0.2.0/docs/page/_extensions/machow/interlinks/interlinks.lua +411 -0
- timetoalign-0.2.0/docs/page/_extensions/machow/interlinks/objects.txt +7 -0
- timetoalign-0.2.0/docs/page/_extensions/machow/interlinks/test.qmd +22 -0
- timetoalign-0.2.0/docs/page/_quarto.yml +208 -0
- timetoalign-0.2.0/docs/page/_site/concepts.html +1341 -0
- timetoalign-0.2.0/docs/page/_site/figs/TTA_modelling-Segments.png +0 -0
- timetoalign-0.2.0/docs/page/_site/figs/TTA_modelling-cmaps.png +0 -0
- timetoalign-0.2.0/docs/page/_site/figs/TTA_modelling-instants.png +0 -0
- timetoalign-0.2.0/docs/page/_site/figs/TTA_modelling-tables.png +0 -0
- timetoalign-0.2.0/docs/page/_site/figs/TTA_modelling-timelines.png +0 -0
- timetoalign-0.2.0/docs/page/_site/glossary.html +929 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_advanced_cmaps.html +1411 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_advanced_timestamps.html +1375 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_beat_grids.html +1745 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_coordinate_math.html +1123 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_graphical_timelines.html +956 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_loading_data.html +1849 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_manual_timeline_construction.html +1084 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_tabular_loaders.html +2410 -0
- timetoalign-0.2.0/docs/page/_site/howto/how01_thoresen_annotation_transfer.html +1789 -0
- timetoalign-0.2.0/docs/page/_site/howto/how02_supra_piano_roll.html +2645 -0
- timetoalign-0.2.0/docs/page/_site/howto/how03_beethoven_multimodal.html +3279 -0
- timetoalign-0.2.0/docs/page/_site/howto/how03_create_note_alignment.html +1165 -0
- timetoalign-0.2.0/docs/page/_site/howto/how03_loading_vienna_corpus.html +1318 -0
- timetoalign-0.2.0/docs/page/_site/howto/how04_hendrix_song_genesis.html +1264 -0
- timetoalign-0.2.0/docs/page/_site/howto.html +991 -0
- timetoalign-0.2.0/docs/page/_site/index.html +721 -0
- timetoalign-0.2.0/docs/page/_site/listings.json +32 -0
- timetoalign-0.2.0/docs/page/_site/reference/AlignmentAnchor.html +1049 -0
- timetoalign-0.2.0/docs/page/_site/reference/AlignmentBundle.html +1384 -0
- timetoalign-0.2.0/docs/page/_site/reference/AudioInfo.html +989 -0
- timetoalign-0.2.0/docs/page/_site/reference/AudioLoader.html +1080 -0
- timetoalign-0.2.0/docs/page/_site/reference/BeatGrid.html +1274 -0
- timetoalign-0.2.0/docs/page/_site/reference/ChainMap.html +1023 -0
- timetoalign-0.2.0/docs/page/_site/reference/ClaimFilter.html +1036 -0
- timetoalign-0.2.0/docs/page/_site/reference/ContinuousGraphicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/ContinuousLogicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/ContinuousPhysicalTimeline.html +1049 -0
- timetoalign-0.2.0/docs/page/_site/reference/ConversionMap.html +1080 -0
- timetoalign-0.2.0/docs/page/_site/reference/Coordinate.html +1094 -0
- timetoalign-0.2.0/docs/page/_site/reference/CoordinateSpec.html +913 -0
- timetoalign-0.2.0/docs/page/_site/reference/CoordinateValue.html +913 -0
- timetoalign-0.2.0/docs/page/_site/reference/DictStore.html +1002 -0
- timetoalign-0.2.0/docs/page/_site/reference/DiscreteGraphicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/DiscreteLogicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/DiscretePhysicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/Domain.html +978 -0
- timetoalign-0.2.0/docs/page/_site/reference/EepNotesLoader.html +958 -0
- timetoalign-0.2.0/docs/page/_site/reference/EventData.html +1325 -0
- timetoalign-0.2.0/docs/page/_site/reference/EventStore.html +1084 -0
- timetoalign-0.2.0/docs/page/_site/reference/EventType.html +950 -0
- timetoalign-0.2.0/docs/page/_site/reference/GraphicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/IdCoordinate.html +1036 -0
- timetoalign-0.2.0/docs/page/_site/reference/IdGenerator.html +1059 -0
- timetoalign-0.2.0/docs/page/_site/reference/LinearMap.html +1057 -0
- timetoalign-0.2.0/docs/page/_site/reference/Loader.html +1185 -0
- timetoalign-0.2.0/docs/page/_site/reference/LogicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchClaim.html +1192 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchGraph.html +1204 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchLine.html +1093 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchMetadata.html +1003 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchStamp.html +1067 -0
- timetoalign-0.2.0/docs/page/_site/reference/MatchfileLoader.html +1086 -0
- timetoalign-0.2.0/docs/page/_site/reference/NumberType.html +997 -0
- timetoalign-0.2.0/docs/page/_site/reference/PerfectAlignment.html +1005 -0
- timetoalign-0.2.0/docs/page/_site/reference/PhysicalTimeline.html +960 -0
- timetoalign-0.2.0/docs/page/_site/reference/PiecewiseMap.html +1023 -0
- timetoalign-0.2.0/docs/page/_site/reference/RepoVizzInfo.html +970 -0
- timetoalign-0.2.0/docs/page/_site/reference/RepoVizzLoader.html +1206 -0
- timetoalign-0.2.0/docs/page/_site/reference/ScalarMap.html +1021 -0
- timetoalign-0.2.0/docs/page/_site/reference/ScopedId.html +1043 -0
- timetoalign-0.2.0/docs/page/_site/reference/SecondsToSamples.html +1022 -0
- timetoalign-0.2.0/docs/page/_site/reference/ShiftMap.html +1025 -0
- timetoalign-0.2.0/docs/page/_site/reference/SingleStore.html +1014 -0
- timetoalign-0.2.0/docs/page/_site/reference/TableMap.html +1085 -0
- timetoalign-0.2.0/docs/page/_site/reference/TiliaDictStore.html +1020 -0
- timetoalign-0.2.0/docs/page/_site/reference/TiliaJsonLoader.html +1076 -0
- timetoalign-0.2.0/docs/page/_site/reference/TimeUnit.html +1078 -0
- timetoalign-0.2.0/docs/page/_site/reference/Timeline.html +2222 -0
- timetoalign-0.2.0/docs/page/_site/reference/TimelineGroup.html +1400 -0
- timetoalign-0.2.0/docs/page/_site/reference/TimelineIdGenerator.html +1037 -0
- timetoalign-0.2.0/docs/page/_site/reference/WarpMap.html +1122 -0
- timetoalign-0.2.0/docs/page/_site/reference/_styles-quartodoc.css +22 -0
- timetoalign-0.2.0/docs/page/_site/reference/index.html +1175 -0
- timetoalign-0.2.0/docs/page/_site/reference.html +934 -0
- timetoalign-0.2.0/docs/page/_site/search.json +4070 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/bootstrap/bootstrap-a0f9fd0d421825b736dc1bbcbcba2219.min.css +12 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/bootstrap/bootstrap-icons.css +2106 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/bootstrap/bootstrap-icons.woff +0 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/bootstrap/bootstrap.min.js +7 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/clipboard/clipboard.min.js +7 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-contrib/glossary/glossary.css +56 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/anchor.min.js +9 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/popper.min.js +5 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/quarto-syntax-highlighting-7f8f88aac4f3542376d5c11b86a4c14d.css +236 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/quarto.js +845 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/tabsets/tabsets.js +95 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/tippy.css +1 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-html/tippy.umd.min.js +1 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-listing/list.min.js +2 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-listing/quarto-listing.js +254 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-nav/headroom.min.js +7 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-nav/quarto-nav.js +325 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-search/autocomplete.umd.js +2 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-search/fuse.min.js +9 -0
- timetoalign-0.2.0/docs/page/_site/site_libs/quarto-search/quarto-search.js +1457 -0
- timetoalign-0.2.0/docs/page/_site/styles.css +34 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut00_quickstart.html +991 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut01a_timelines_events_maps.html +973 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut01b_children_regions_timestamps.html +1080 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut02_timeline_groups.html +905 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut03_alignment_bundles.html +827 -0
- timetoalign-0.2.0/docs/page/_site/tutorials/tut04_flow_and_grids.html +796 -0
- timetoalign-0.2.0/docs/page/_site/tutorials.html +855 -0
- timetoalign-0.2.0/docs/page/concepts.qmd +758 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-Chorissimo.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-SUPRA.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-Segments.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-arrow.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-beethoven.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-cmaps.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-hendrix_poc.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-instants.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-tables.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-thoresen_poc.png +0 -0
- timetoalign-0.2.0/docs/page/figs/TTA_modelling-timelines.png +0 -0
- timetoalign-0.2.0/docs/page/glossary.qmd +373 -0
- timetoalign-0.2.0/docs/page/glossary.yml +240 -0
- timetoalign-0.2.0/docs/page/howto/how01_advanced_cmaps.ipynb +1077 -0
- timetoalign-0.2.0/docs/page/howto/how01_advanced_timestamps.ipynb +1147 -0
- timetoalign-0.2.0/docs/page/howto/how01_beat_grids.ipynb +1526 -0
- timetoalign-0.2.0/docs/page/howto/how01_coordinate_math.ipynb +680 -0
- timetoalign-0.2.0/docs/page/howto/how01_graphical_timelines.ipynb +387 -0
- timetoalign-0.2.0/docs/page/howto/how01_loading_data.ipynb +1735 -0
- timetoalign-0.2.0/docs/page/howto/how01_manual_timeline_construction.ipynb +645 -0
- timetoalign-0.2.0/docs/page/howto/how01_tabular_loaders.ipynb +2507 -0
- timetoalign-0.2.0/docs/page/howto/how01_thoresen_annotation_transfer.ipynb +1466 -0
- timetoalign-0.2.0/docs/page/howto/how02_supra_piano_roll.ipynb +2718 -0
- timetoalign-0.2.0/docs/page/howto/how03_beethoven_multimodal.ipynb +4702 -0
- timetoalign-0.2.0/docs/page/howto/how03_create_note_alignment.ipynb +799 -0
- timetoalign-0.2.0/docs/page/howto/how03_loading_vienna_corpus.ipynb +1036 -0
- timetoalign-0.2.0/docs/page/howto/how04_hendrix_song_genesis.ipynb +799 -0
- timetoalign-0.2.0/docs/page/howto.qmd +70 -0
- timetoalign-0.2.0/docs/page/index.qmd +126 -0
- timetoalign-0.2.0/docs/page/notebooks.csv +21 -0
- timetoalign-0.2.0/docs/page/objects.json +1 -0
- timetoalign-0.2.0/docs/page/reference/AlignmentAnchor.qmd +107 -0
- timetoalign-0.2.0/docs/page/reference/AlignmentBundle.qmd +683 -0
- timetoalign-0.2.0/docs/page/reference/AudioInfo.qmd +39 -0
- timetoalign-0.2.0/docs/page/reference/AudioLoader.qmd +150 -0
- timetoalign-0.2.0/docs/page/reference/BeatGrid.qmd +449 -0
- timetoalign-0.2.0/docs/page/reference/ChainMap.qmd +64 -0
- timetoalign-0.2.0/docs/page/reference/ClaimFilter.qmd +131 -0
- timetoalign-0.2.0/docs/page/reference/ContinuousGraphicalTimeline.qmd +23 -0
- timetoalign-0.2.0/docs/page/reference/ContinuousLogicalTimeline.qmd +23 -0
- timetoalign-0.2.0/docs/page/reference/ContinuousPhysicalTimeline.qmd +188 -0
- timetoalign-0.2.0/docs/page/reference/ConversionMap.qmd +143 -0
- timetoalign-0.2.0/docs/page/reference/Coordinate.qmd +144 -0
- timetoalign-0.2.0/docs/page/reference/CoordinateSpec.qmd +3 -0
- timetoalign-0.2.0/docs/page/reference/CoordinateValue.qmd +3 -0
- timetoalign-0.2.0/docs/page/reference/DictStore.qmd +62 -0
- timetoalign-0.2.0/docs/page/reference/DiscreteGraphicalTimeline.qmd +23 -0
- timetoalign-0.2.0/docs/page/reference/DiscreteLogicalTimeline.qmd +23 -0
- timetoalign-0.2.0/docs/page/reference/DiscretePhysicalTimeline.qmd +23 -0
- timetoalign-0.2.0/docs/page/reference/Domain.qmd +20 -0
- timetoalign-0.2.0/docs/page/reference/EepNotesLoader.qmd +31 -0
- timetoalign-0.2.0/docs/page/reference/EventData.qmd +508 -0
- timetoalign-0.2.0/docs/page/reference/EventStore.qmd +179 -0
- timetoalign-0.2.0/docs/page/reference/EventType.qmd +11 -0
- timetoalign-0.2.0/docs/page/reference/GraphicalTimeline.qmd +22 -0
- timetoalign-0.2.0/docs/page/reference/IdCoordinate.qmd +102 -0
- timetoalign-0.2.0/docs/page/reference/IdGenerator.qmd +102 -0
- timetoalign-0.2.0/docs/page/reference/LinearMap.qmd +96 -0
- timetoalign-0.2.0/docs/page/reference/Loader.qmd +297 -0
- timetoalign-0.2.0/docs/page/reference/LogicalTimeline.qmd +22 -0
- timetoalign-0.2.0/docs/page/reference/MatchClaim.qmd +321 -0
- timetoalign-0.2.0/docs/page/reference/MatchGraph.qmd +314 -0
- timetoalign-0.2.0/docs/page/reference/MatchLine.qmd +202 -0
- timetoalign-0.2.0/docs/page/reference/MatchMetadata.qmd +63 -0
- timetoalign-0.2.0/docs/page/reference/MatchStamp.qmd +115 -0
- timetoalign-0.2.0/docs/page/reference/MatchfileLoader.qmd +218 -0
- timetoalign-0.2.0/docs/page/reference/NumberType.qmd +35 -0
- timetoalign-0.2.0/docs/page/reference/PerfectAlignment.qmd +71 -0
- timetoalign-0.2.0/docs/page/reference/PhysicalTimeline.qmd +22 -0
- timetoalign-0.2.0/docs/page/reference/PiecewiseMap.qmd +63 -0
- timetoalign-0.2.0/docs/page/reference/RepoVizzInfo.qmd +20 -0
- timetoalign-0.2.0/docs/page/reference/RepoVizzLoader.qmd +315 -0
- timetoalign-0.2.0/docs/page/reference/ScalarMap.qmd +58 -0
- timetoalign-0.2.0/docs/page/reference/ScopedId.qmd +93 -0
- timetoalign-0.2.0/docs/page/reference/SecondsToSamples.qmd +62 -0
- timetoalign-0.2.0/docs/page/reference/ShiftMap.qmd +59 -0
- timetoalign-0.2.0/docs/page/reference/SingleStore.qmd +55 -0
- timetoalign-0.2.0/docs/page/reference/TableMap.qmd +136 -0
- timetoalign-0.2.0/docs/page/reference/TiliaDictStore.qmd +56 -0
- timetoalign-0.2.0/docs/page/reference/TiliaJsonLoader.qmd +156 -0
- timetoalign-0.2.0/docs/page/reference/TimeUnit.qmd +43 -0
- timetoalign-0.2.0/docs/page/reference/Timeline.qmd +2094 -0
- timetoalign-0.2.0/docs/page/reference/TimelineGroup.qmd +725 -0
- timetoalign-0.2.0/docs/page/reference/TimelineIdGenerator.qmd +103 -0
- timetoalign-0.2.0/docs/page/reference/WarpMap.qmd +224 -0
- timetoalign-0.2.0/docs/page/reference/_sidebar.yml +70 -0
- timetoalign-0.2.0/docs/page/reference/_styles-quartodoc.css +22 -0
- timetoalign-0.2.0/docs/page/reference/index.qmd +90 -0
- timetoalign-0.2.0/docs/page/reference.qmd +17 -0
- timetoalign-0.2.0/docs/page/styles.css +34 -0
- timetoalign-0.2.0/docs/page/sync_notebooks.py +435 -0
- timetoalign-0.2.0/docs/page/tutorials/tut00_quickstart.ipynb +531 -0
- timetoalign-0.2.0/docs/page/tutorials/tut01a_timelines_events_maps.ipynb +481 -0
- timetoalign-0.2.0/docs/page/tutorials/tut01b_children_regions_timestamps.ipynb +636 -0
- timetoalign-0.2.0/docs/page/tutorials/tut02_timeline_groups.ipynb +325 -0
- timetoalign-0.2.0/docs/page/tutorials/tut03_alignment_bundles.ipynb +316 -0
- timetoalign-0.2.0/docs/page/tutorials/tut04_flow_and_grids.ipynb +293 -0
- timetoalign-0.2.0/docs/page/tutorials.qmd +54 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/ao_c/303/251u_beats.csv +745 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/ao_c/303/251u_beats_tilia.csv +745 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/bass_kick_beats.csv +617 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/bass_kick_beats_tilia.csv +617 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/bye_bye_beats.csv +785 -0
- timetoalign-0.2.0/docs/tuto-notebooks/outputs/bye_bye_beats_tilia.csv +785 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut00_quickstart.py +140 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut01a_timelines_events_maps.py +80 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut01b_children_regions_timestamps.py +72 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut02_timeline_groups.py +90 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut03_alignment_bundles.py +75 -0
- timetoalign-0.2.0/docs/tuto-notebooks/tut04_flow_and_grids.py +88 -0
- timetoalign-0.2.0/outputs/ao_c/303/251u_beats.csv +745 -0
- timetoalign-0.2.0/outputs/ao_c/303/251u_beats_tilia.csv +745 -0
- timetoalign-0.2.0/outputs/bass_kick_beats.csv +617 -0
- timetoalign-0.2.0/outputs/bass_kick_beats_tilia.csv +617 -0
- timetoalign-0.2.0/outputs/bye_bye_beats.csv +785 -0
- timetoalign-0.2.0/outputs/bye_bye_beats_tilia.csv +785 -0
- timetoalign-0.2.0/pyproject.toml +122 -0
- timetoalign-0.2.0/tests/__init__.py +1 -0
- timetoalign-0.2.0/tests/alignment/README.md +738 -0
- timetoalign-0.2.0/tests/alignment/__init__.py +1 -0
- timetoalign-0.2.0/tests/alignment/conftest.py +365 -0
- timetoalign-0.2.0/tests/alignment/test_anchors.py +901 -0
- timetoalign-0.2.0/tests/alignment/test_bundle.py +1065 -0
- timetoalign-0.2.0/tests/alignment/test_filters.py +331 -0
- timetoalign-0.2.0/tests/alignment/test_graph.py +1307 -0
- timetoalign-0.2.0/tests/alignment/test_graphical_loader.py +619 -0
- timetoalign-0.2.0/tests/alignment/test_groups.py +1403 -0
- timetoalign-0.2.0/tests/alignment/test_matchline.py +806 -0
- timetoalign-0.2.0/tests/alignment/test_matchline_save_as.py +801 -0
- timetoalign-0.2.0/tests/alignment/test_stamp_query_api.py +1055 -0
- timetoalign-0.2.0/tests/alignment/test_supra_integration.py +446 -0
- timetoalign-0.2.0/tests/alignment/test_thoresen_poc.py +382 -0
- timetoalign-0.2.0/tests/alignment/test_warpmap.py +853 -0
- timetoalign-0.2.0/tests/conftest.py +47 -0
- timetoalign-0.2.0/tests/core/README.md +262 -0
- timetoalign-0.2.0/tests/core/__init__.py +1 -0
- timetoalign-0.2.0/tests/core/test_enums.py +267 -0
- timetoalign-0.2.0/tests/core/test_ids.py +599 -0
- timetoalign-0.2.0/tests/core/test_timestamp.py +620 -0
- timetoalign-0.2.0/tests/core/test_types.py +494 -0
- timetoalign-0.2.0/tests/data/README.md +71 -0
- timetoalign-0.2.0/tests/display/README.md +247 -0
- timetoalign-0.2.0/tests/display/__init__.py +1 -0
- timetoalign-0.2.0/tests/display/test_ascii.py +1337 -0
- timetoalign-0.2.0/tests/integration/README.md +124 -0
- timetoalign-0.2.0/tests/integration/__init__.py +1 -0
- timetoalign-0.2.0/tests/integration/conftest.py +7 -0
- timetoalign-0.2.0/tests/integration/test_beethoven_woo71.py +304 -0
- timetoalign-0.2.0/tests/integration/test_loader_to_timeline.py +438 -0
- timetoalign-0.2.0/tests/loader/__init__.py +1 -0
- timetoalign-0.2.0/tests/loader/conftest.py +175 -0
- timetoalign-0.2.0/tests/loader/format/README.md +79 -0
- timetoalign-0.2.0/tests/loader/format/__init__.py +1 -0
- timetoalign-0.2.0/tests/loader/format/conftest.py +7 -0
- timetoalign-0.2.0/tests/loader/format/test_json_loader.py +337 -0
- timetoalign-0.2.0/tests/loader/format/test_xml_loader.py +511 -0
- timetoalign-0.2.0/tests/loader/graphical/conftest.py +7 -0
- timetoalign-0.2.0/tests/loader/graphical/test_aton_loader.py +432 -0
- timetoalign-0.2.0/tests/loader/graphical/test_iiif_loader.py +342 -0
- timetoalign-0.2.0/tests/loader/midi/README.md +101 -0
- timetoalign-0.2.0/tests/loader/midi/conftest.py +42 -0
- timetoalign-0.2.0/tests/loader/midi/profile.py +91 -0
- timetoalign-0.2.0/tests/loader/midi/test_bundle.py +367 -0
- timetoalign-0.2.0/tests/loader/midi/test_harmonization.py +128 -0
- timetoalign-0.2.0/tests/loader/midi/test_performance.py +73 -0
- timetoalign-0.2.0/tests/loader/midi/test_score.py +47 -0
- timetoalign-0.2.0/tests/loader/midi/test_store.py +59 -0
- timetoalign-0.2.0/tests/loader/paths/README.md +77 -0
- timetoalign-0.2.0/tests/loader/paths/__init__.py +1 -0
- timetoalign-0.2.0/tests/loader/paths/test_paths.py +344 -0
- timetoalign-0.2.0/tests/loader/physical/README.md +61 -0
- timetoalign-0.2.0/tests/loader/physical/__init__.py +1 -0
- timetoalign-0.2.0/tests/loader/physical/conftest.py +7 -0
- timetoalign-0.2.0/tests/loader/physical/test_audio.py +439 -0
- timetoalign-0.2.0/tests/loader/physical/test_repovizz_loader.py +402 -0
- timetoalign-0.2.0/tests/loader/profile_matchfile.py +238 -0
- timetoalign-0.2.0/tests/loader/score/README.md +730 -0
- timetoalign-0.2.0/tests/loader/score/__init__.py +0 -0
- timetoalign-0.2.0/tests/loader/score/conftest.py +429 -0
- timetoalign-0.2.0/tests/loader/score/profile.py +79 -0
- timetoalign-0.2.0/tests/loader/score/test_cross_validation.py +147 -0
- timetoalign-0.2.0/tests/loader/score/test_flow_control_parity.py +858 -0
- timetoalign-0.2.0/tests/loader/score/test_flow_csv_validation.py +269 -0
- timetoalign-0.2.0/tests/loader/score/test_loaders.py +520 -0
- timetoalign-0.2.0/tests/loader/score/test_measuremap_loader.py +388 -0
- timetoalign-0.2.0/tests/loader/score/test_score_parsing_matrix.py +788 -0
- timetoalign-0.2.0/tests/loader/tabular/PROFILING_REPORT.md +119 -0
- timetoalign-0.2.0/tests/loader/tabular/README.md +272 -0
- timetoalign-0.2.0/tests/loader/tabular/__init__.py +1 -0
- timetoalign-0.2.0/tests/loader/tabular/conftest.py +7 -0
- timetoalign-0.2.0/tests/loader/tabular/profile_vectorized.py +315 -0
- timetoalign-0.2.0/tests/loader/tabular/test_correctness.py +356 -0
- timetoalign-0.2.0/tests/loader/tabular/test_error_handling.py +335 -0
- timetoalign-0.2.0/tests/loader/tabular/test_lab_loader.py +325 -0
- timetoalign-0.2.0/tests/loader/tabular/test_struct_columns.py +437 -0
- timetoalign-0.2.0/tests/loader/tabular/test_table_schema.py +499 -0
- timetoalign-0.2.0/tests/loader/tabular/test_tabular.py +211 -0
- timetoalign-0.2.0/tests/loader/tabular/test_vectorized.py +296 -0
- timetoalign-0.2.0/tests/loader/test_base_loaders.py +403 -0
- timetoalign-0.2.0/tests/loader/test_bundle.py +201 -0
- timetoalign-0.2.0/tests/loader/test_error_handling.py +302 -0
- timetoalign-0.2.0/tests/loader/test_interval_policy.py +448 -0
- timetoalign-0.2.0/tests/loader/test_loader.py +249 -0
- timetoalign-0.2.0/tests/loader/test_matchfile_loader.py +1084 -0
- timetoalign-0.2.0/tests/loader/test_parsing.py +566 -0
- timetoalign-0.2.0/tests/loader/test_schema.py +293 -0
- timetoalign-0.2.0/tests/loader/test_store.py +457 -0
- timetoalign-0.2.0/tests/loader/test_tilia_loader.py +385 -0
- timetoalign-0.2.0/tests/maps/README.md +132 -0
- timetoalign-0.2.0/tests/maps/__init__.py +1 -0
- timetoalign-0.2.0/tests/maps/test_combination.py +196 -0
- timetoalign-0.2.0/tests/maps/test_composite.py +237 -0
- timetoalign-0.2.0/tests/maps/test_constant.py +231 -0
- timetoalign-0.2.0/tests/maps/test_convenience.py +192 -0
- timetoalign-0.2.0/tests/maps/test_interpolation.py +313 -0
- timetoalign-0.2.0/tests/maps/test_interval.py +507 -0
- timetoalign-0.2.0/tests/maps/test_linear.py +211 -0
- timetoalign-0.2.0/tests/maps/test_periodic.py +327 -0
- timetoalign-0.2.0/tests/maps/test_properties.py +501 -0
- timetoalign-0.2.0/tests/maps/test_table.py +168 -0
- timetoalign-0.2.0/tests/timelines/README.md +875 -0
- timetoalign-0.2.0/tests/timelines/README_unfolding.md +347 -0
- timetoalign-0.2.0/tests/timelines/__init__.py +1 -0
- timetoalign-0.2.0/tests/timelines/conftest.py +373 -0
- timetoalign-0.2.0/tests/timelines/test_base.py +617 -0
- timetoalign-0.2.0/tests/timelines/test_beatgrid.py +901 -0
- timetoalign-0.2.0/tests/timelines/test_factory.py +535 -0
- timetoalign-0.2.0/tests/timelines/test_flow.py +1552 -0
- timetoalign-0.2.0/tests/timelines/test_integration.py +638 -0
- timetoalign-0.2.0/tests/timelines/test_maps_integration.py +94 -0
- timetoalign-0.2.0/tests/timelines/test_nesting.py +649 -0
- timetoalign-0.2.0/tests/timelines/test_offset_arithmetic.py +240 -0
- timetoalign-0.2.0/tests/timelines/test_timeline_relationships.py +2362 -0
- timetoalign-0.2.0/tests/timelines/test_timestamps.py +773 -0
- timetoalign-0.2.0/tests/timelines/test_types.py +562 -0
- timetoalign-0.2.0/tests/timelines/test_unfolding.py +1358 -0
- timetoalign-0.2.0/timetoalign/__init__.py +275 -0
- timetoalign-0.2.0/timetoalign/alignment/__init__.py +65 -0
- timetoalign-0.2.0/timetoalign/alignment/anchors.py +1095 -0
- timetoalign-0.2.0/timetoalign/alignment/bundle.py +1715 -0
- timetoalign-0.2.0/timetoalign/alignment/filters.py +296 -0
- timetoalign-0.2.0/timetoalign/alignment/graph.py +1055 -0
- timetoalign-0.2.0/timetoalign/alignment/groups.py +2258 -0
- timetoalign-0.2.0/timetoalign/alignment/match_format.py +914 -0
- timetoalign-0.2.0/timetoalign/alignment/matching.py +365 -0
- timetoalign-0.2.0/timetoalign/alignment/matchline.py +332 -0
- timetoalign-0.2.0/timetoalign/alignment/warpmap.py +580 -0
- timetoalign-0.2.0/timetoalign/core/__init__.py +65 -0
- timetoalign-0.2.0/timetoalign/core/enums.py +589 -0
- timetoalign-0.2.0/timetoalign/core/ids.py +489 -0
- timetoalign-0.2.0/timetoalign/core/timestamp.py +992 -0
- timetoalign-0.2.0/timetoalign/core/types.py +493 -0
- timetoalign-0.2.0/timetoalign/display/__init__.py +51 -0
- timetoalign-0.2.0/timetoalign/display/ascii.py +1796 -0
- timetoalign-0.2.0/timetoalign/loader/__init__.py +174 -0
- timetoalign-0.2.0/timetoalign/loader/alignment/__init__.py +24 -0
- timetoalign-0.2.0/timetoalign/loader/alignment/matchfile.py +814 -0
- timetoalign-0.2.0/timetoalign/loader/alignment/tilia.py +927 -0
- timetoalign-0.2.0/timetoalign/loader/base.py +1249 -0
- timetoalign-0.2.0/timetoalign/loader/events.py +1585 -0
- timetoalign-0.2.0/timetoalign/loader/format/__init__.py +23 -0
- timetoalign-0.2.0/timetoalign/loader/format/json.py +736 -0
- timetoalign-0.2.0/timetoalign/loader/format/xml.py +605 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/__init__.py +85 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/aton.py +520 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/iiif.py +447 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/loader.py +302 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/paths.py +514 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/segment.py +219 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/source.py +527 -0
- timetoalign-0.2.0/timetoalign/loader/graphical/store.py +420 -0
- timetoalign-0.2.0/timetoalign/loader/midi/__init__.py +44 -0
- timetoalign-0.2.0/timetoalign/loader/midi/base.py +51 -0
- timetoalign-0.2.0/timetoalign/loader/midi/constants.py +146 -0
- timetoalign-0.2.0/timetoalign/loader/midi/events.py +36 -0
- timetoalign-0.2.0/timetoalign/loader/midi/performance.py +242 -0
- timetoalign-0.2.0/timetoalign/loader/midi/score.py +175 -0
- timetoalign-0.2.0/timetoalign/loader/midi/store.py +289 -0
- timetoalign-0.2.0/timetoalign/loader/parsing.py +614 -0
- timetoalign-0.2.0/timetoalign/loader/paths/__init__.py +48 -0
- timetoalign-0.2.0/timetoalign/loader/paths/base.py +147 -0
- timetoalign-0.2.0/timetoalign/loader/paths/linear.py +209 -0
- timetoalign-0.2.0/timetoalign/loader/paths/polyline.py +252 -0
- timetoalign-0.2.0/timetoalign/loader/paths/rect.py +277 -0
- timetoalign-0.2.0/timetoalign/loader/physical/__init__.py +32 -0
- timetoalign-0.2.0/timetoalign/loader/physical/audio.py +632 -0
- timetoalign-0.2.0/timetoalign/loader/physical/eep_notes.py +127 -0
- timetoalign-0.2.0/timetoalign/loader/physical/repovizz.py +1544 -0
- timetoalign-0.2.0/timetoalign/loader/schema.py +1261 -0
- timetoalign-0.2.0/timetoalign/loader/score/__init__.py +53 -0
- timetoalign-0.2.0/timetoalign/loader/score/base.py +168 -0
- timetoalign-0.2.0/timetoalign/loader/score/events.py +241 -0
- timetoalign-0.2.0/timetoalign/loader/score/measuremap.py +452 -0
- timetoalign-0.2.0/timetoalign/loader/score/music21.py +1001 -0
- timetoalign-0.2.0/timetoalign/loader/score/partitura.py +714 -0
- timetoalign-0.2.0/timetoalign/loader/score/store.py +496 -0
- timetoalign-0.2.0/timetoalign/loader/score/stores/__init__.py +15 -0
- timetoalign-0.2.0/timetoalign/loader/score/stores/annotations.py +112 -0
- timetoalign-0.2.0/timetoalign/loader/score/stores/controls.py +117 -0
- timetoalign-0.2.0/timetoalign/loader/score/stores/measures.py +368 -0
- timetoalign-0.2.0/timetoalign/loader/score/stores/notes.py +196 -0
- timetoalign-0.2.0/timetoalign/loader/score/tsv.py +914 -0
- timetoalign-0.2.0/timetoalign/loader/store.py +845 -0
- timetoalign-0.2.0/timetoalign/loader/table_schema.py +1425 -0
- timetoalign-0.2.0/timetoalign/loader/tabular/__init__.py +24 -0
- timetoalign-0.2.0/timetoalign/loader/tabular/base.py +861 -0
- timetoalign-0.2.0/timetoalign/loader/tabular/csv.py +233 -0
- timetoalign-0.2.0/timetoalign/maps/__init__.py +80 -0
- timetoalign-0.2.0/timetoalign/maps/base.py +410 -0
- timetoalign-0.2.0/timetoalign/maps/combination.py +225 -0
- timetoalign-0.2.0/timetoalign/maps/composite.py +383 -0
- timetoalign-0.2.0/timetoalign/maps/constant.py +148 -0
- timetoalign-0.2.0/timetoalign/maps/convenience.py +274 -0
- timetoalign-0.2.0/timetoalign/maps/interpolation.py +307 -0
- timetoalign-0.2.0/timetoalign/maps/interval.py +724 -0
- timetoalign-0.2.0/timetoalign/maps/linear.py +410 -0
- timetoalign-0.2.0/timetoalign/maps/meter.py +632 -0
- timetoalign-0.2.0/timetoalign/maps/periodic.py +336 -0
- timetoalign-0.2.0/timetoalign/maps/table.py +469 -0
- timetoalign-0.2.0/timetoalign/py.typed +0 -0
- timetoalign-0.2.0/timetoalign/testdata/__init__.py +272 -0
- timetoalign-0.2.0/timetoalign/timelines/__init__.py +155 -0
- timetoalign-0.2.0/timetoalign/timelines/base.py +5055 -0
- timetoalign-0.2.0/timetoalign/timelines/beatgrid.py +845 -0
- timetoalign-0.2.0/timetoalign/timelines/factory.py +446 -0
- timetoalign-0.2.0/timetoalign/timelines/flow.py +3581 -0
- timetoalign-0.2.0/timetoalign/timelines/flowcontrol.py +447 -0
- timetoalign-0.2.0/timetoalign/timelines/mixins.py +53 -0
- timetoalign-0.2.0/timetoalign/timelines/regions.py +122 -0
- timetoalign-0.2.0/timetoalign/timelines/types.py +1518 -0
- timetoalign-0.2.0/tox.ini +91 -0
- timetoalign-0.2.0/verify.log +73 -0
timetoalign-0.2.0/.git
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
gitdir: ../.git/modules/timetoalign
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
on:
|
|
2
|
+
push:
|
|
3
|
+
branches:
|
|
4
|
+
- main
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: write
|
|
8
|
+
issues: write
|
|
9
|
+
pull-requests: write
|
|
10
|
+
|
|
11
|
+
name: release-please
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
release-please:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: googleapis/release-please-action@v4
|
|
18
|
+
with:
|
|
19
|
+
release-type: python
|
|
20
|
+
package-name: timetoalign
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Ignore all Jupyter Notebooks
|
|
2
|
+
*.ipynb
|
|
3
|
+
|
|
4
|
+
# But track the Quarto notebooks (synced + executed, with outputs)
|
|
5
|
+
!docs/page/tutorials/*.ipynb
|
|
6
|
+
!docs/page/howto/*.ipynb
|
|
7
|
+
|
|
8
|
+
# Ignore Jupyter checkpoint folders
|
|
9
|
+
.ipynb_checkpoints/
|
|
10
|
+
|
|
11
|
+
# Ignore pycache files
|
|
12
|
+
__pycache__
|
|
13
|
+
|
|
14
|
+
# Ignore files generated by hypothesis
|
|
15
|
+
.hypothesis
|
|
16
|
+
|
|
17
|
+
# Ignore coverage files
|
|
18
|
+
.coverage
|
|
19
|
+
.coverage.*
|
|
20
|
+
|
|
21
|
+
# Test-data corpora are fetched on demand via timetoalign.testdata (pooch).
|
|
22
|
+
# Keep only the README, never the actual corpora.
|
|
23
|
+
tests/data/*
|
|
24
|
+
!tests/data/README.md
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
exclude: '^docs/conf.py'
|
|
2
|
+
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
+
rev: v6.0.0
|
|
6
|
+
hooks:
|
|
7
|
+
- id: trailing-whitespace
|
|
8
|
+
exclude: '\.(tsv|csv|warnings)$'
|
|
9
|
+
- id: check-ast
|
|
10
|
+
- id: check-json
|
|
11
|
+
- id: check-merge-conflict
|
|
12
|
+
- id: check-xml
|
|
13
|
+
- id: check-yaml
|
|
14
|
+
- id: debug-statements
|
|
15
|
+
- id: end-of-file-fixer
|
|
16
|
+
- id: requirements-txt-fixer
|
|
17
|
+
- id: mixed-line-ending
|
|
18
|
+
args: ['--fix=auto'] # replace 'auto' with 'lf' to enforce Linux/Mac line endings or 'crlf' for Windows
|
|
19
|
+
|
|
20
|
+
## If you want to avoid flake8 errors due to unused vars or imports:
|
|
21
|
+
# - repo: https://github.com/myint/autoflake
|
|
22
|
+
# rev: v1.4
|
|
23
|
+
# hooks:
|
|
24
|
+
# - id: autoflake
|
|
25
|
+
# args: [
|
|
26
|
+
# --in-place,
|
|
27
|
+
# --remove-all-unused-imports,
|
|
28
|
+
# --remove-unused-variables,
|
|
29
|
+
# ]
|
|
30
|
+
|
|
31
|
+
- repo: https://github.com/asottile/seed-isort-config
|
|
32
|
+
rev: v2.2.0
|
|
33
|
+
hooks:
|
|
34
|
+
- id: seed-isort-config
|
|
35
|
+
- repo: https://github.com/pycqa/isort
|
|
36
|
+
rev: 7.0.0
|
|
37
|
+
hooks:
|
|
38
|
+
- id: isort
|
|
39
|
+
args: ["--profile", "black", "--filter-files"]
|
|
40
|
+
|
|
41
|
+
- repo: https://github.com/ambv/black
|
|
42
|
+
rev: 26.1.0
|
|
43
|
+
hooks:
|
|
44
|
+
- id: black
|
|
45
|
+
language_version: python3.11
|
|
46
|
+
|
|
47
|
+
## If like to embrace black styles even in the docs:
|
|
48
|
+
# - repo: https://github.com/asottile/blacken-docs
|
|
49
|
+
# rev: v1.12.0
|
|
50
|
+
# hooks:
|
|
51
|
+
# - id: blacken-docs
|
|
52
|
+
# additional_dependencies: [black]
|
|
53
|
+
|
|
54
|
+
- repo: https://github.com/PyCQA/flake8
|
|
55
|
+
rev: 7.3.0
|
|
56
|
+
hooks:
|
|
57
|
+
- id: flake8
|
|
58
|
+
args:
|
|
59
|
+
- "--max-line-length=120"
|
|
60
|
+
- "--per-file-ignores=__init__.py:F401,docs/howto-notebooks/*.py:E402"
|
|
61
|
+
## You can add flake8 plugins via `additional_dependencies`:
|
|
62
|
+
# additional_dependencies: [flake8-bugbear]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.0](https://github.com/TimeToAlign/timetoalign/compare/v0.1.0...v0.2.0) (2026-05-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* fetch test data on demand via pooch + timetoalign.testdata ([a334d43](https://github.com/TimeToAlign/timetoalign/commit/a334d4330e3bcfa0463fd40bf8599f15980217f1))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **bundle:** resolve internal IDs and interval components in matchstamp lookup ([f1b0546](https://github.com/TimeToAlign/timetoalign/commit/f1b05467233bdb67ba5e686f85cd54767d175fd7))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Documentation
|
|
17
|
+
|
|
18
|
+
* adds how01_flow_control.py ([95290d7](https://github.com/TimeToAlign/timetoalign/commit/95290d74420655e0ea46aa6e1de7780b01c960cd))
|
|
19
|
+
|
|
20
|
+
## 0.1.0 (2026-05-13)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* uniform units display across all timestamp APIs ([220c6a5](https://github.com/TimeToAlign/timetoalign/commit/220c6a5cc0aa49f0ee7df757da755189a99c9e7e))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* populate start/end/duration temporal fields in NoteEventData (fixes [#9](https://github.com/TimeToAlign/timetoalign/issues/9), fixes [#10](https://github.com/TimeToAlign/timetoalign/issues/10)) ([00c3734](https://github.com/TimeToAlign/timetoalign/commit/00c3734f492b10dbc12bef76489743b2edd46194))
|
|
31
|
+
* populate temporal coordinates in MeasureData, ControlEventData, and AnnotationEventData (fixes [#7](https://github.com/TimeToAlign/timetoalign/issues/7)) ([c6b2eb3](https://github.com/TimeToAlign/timetoalign/commit/c6b2eb36cf2499d32e35ddd835d8da6b13f71540))
|
|
32
|
+
* report consistent unit/number_type in ScoreLoader metadata (fixes [#8](https://github.com/TimeToAlign/timetoalign/issues/8)) ([786b65c](https://github.com/TimeToAlign/timetoalign/commit/786b65c790a4ae14530c86cdd4d2c0f3b3e31e9c))
|
|
33
|
+
* use quarter_map instead of beat_map in PartituraLoader (fixes [#12](https://github.com/TimeToAlign/timetoalign/issues/12)) ([dcf23c0](https://github.com/TimeToAlign/timetoalign/commit/dcf23c055f5a51774c82fb1dd730f0bba2c5ecd4))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Documentation
|
|
37
|
+
|
|
38
|
+
* add redirect index.html and disable Jekyll ([bc71e64](https://github.com/TimeToAlign/timetoalign/commit/bc71e64d7969bc5b8f420c364b1d68d4cd59d2f0))
|
|
39
|
+
* add redirect index.html and disable Jekyll ([cb80dd5](https://github.com/TimeToAlign/timetoalign/commit/cb80dd5f1798f7f763eacffd4d2f951b1653234c))
|
|
40
|
+
* broaden 'Voice and Staff Information' beyond piano music (fixes [#16](https://github.com/TimeToAlign/timetoalign/issues/16)) ([b918686](https://github.com/TimeToAlign/timetoalign/commit/b918686d6782cd1aadbf69ae93ccc2cf8bd1d88f))
|
|
41
|
+
* clarify interpolation methods with distinct y-values and 'next' strategy (fixes [#19](https://github.com/TimeToAlign/timetoalign/issues/19)) ([145a7af](https://github.com/TimeToAlign/timetoalign/commit/145a7afca4638533adde1d9ba04b35a2eff28e93))
|
|
42
|
+
* correct path ([7eeecb9](https://github.com/TimeToAlign/timetoalign/commit/7eeecb92cc9c8d4944b187774d98d6e29265544d))
|
|
43
|
+
* document large file timeout handling in test README ([fd545a2](https://github.com/TimeToAlign/timetoalign/commit/fd545a2290808950749b96536a4c4efd7891c50b))
|
|
44
|
+
* replace deprecated 'bundle' wording with 'store' (fixes [#17](https://github.com/TimeToAlign/timetoalign/issues/17)) ([7ed2ffc](https://github.com/TimeToAlign/timetoalign/commit/7ed2ffc36643254da941f5f4dca53bc42fc029ac))
|
|
45
|
+
* replace unreliable septuplet float example with 0.1*10 (fixes [#3](https://github.com/TimeToAlign/timetoalign/issues/3)) ([13f8567](https://github.com/TimeToAlign/timetoalign/commit/13f8567c3d47e4e1b4ae7c33a79abe89e50030fa))
|
|
46
|
+
* split notebooks into tuto-notebooks and howto-notebooks (Diátaxis) ([b1dc9e6](https://github.com/TimeToAlign/timetoalign/commit/b1dc9e6d3e58cd3cc4367a09b013ec362c4d300e))
|
|
47
|
+
* update test READMEs to reflect cleanup changes ([c481aca](https://github.com/TimeToAlign/timetoalign/commit/c481aca47e55617095bb2741c6db7c1d94b7996f))
|
|
48
|
+
* updates autodocs ([592fbdc](https://github.com/TimeToAlign/timetoalign/commit/592fbdc8d094b10f5982f4ae44303bc02da4f406))
|
|
49
|
+
* updates homepage ([4402640](https://github.com/TimeToAlign/timetoalign/commit/44026408749517d527008b363d6ca7c881e3d937))
|
|
50
|
+
* updates tutorial page ([3d5aa5f](https://github.com/TimeToAlign/timetoalign/commit/3d5aa5faab5cdf04afea0fc48169e01f5a660601))
|
|
51
|
+
* writes reduced tutorial notebooks, factoring out older content to how-to notebooks ([faa3fbf](https://github.com/TimeToAlign/timetoalign/commit/faa3fbf7f797ae73bcc573785273f82acea9b1f7))
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: timetoalign
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A library for representing and aligning musical timelines
|
|
5
|
+
Project-URL: Homepage, https://github.com/timetoalign/timetoalign
|
|
6
|
+
Project-URL: Documentation, https://timetoalign.github.io/
|
|
7
|
+
Author: TTA Team
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: networkx>=3.0
|
|
21
|
+
Requires-Dist: pandas>=2.0
|
|
22
|
+
Requires-Dist: pyarrow>=14.0
|
|
23
|
+
Requires-Dist: typing-extensions>=4.0
|
|
24
|
+
Provides-Extra: all
|
|
25
|
+
Requires-Dist: deltalake>=0.15.0; extra == 'all'
|
|
26
|
+
Requires-Dist: jupyter>=1.0; extra == 'all'
|
|
27
|
+
Requires-Dist: jupytext>=1.16; extra == 'all'
|
|
28
|
+
Requires-Dist: matplotlib>=3.5; extra == 'all'
|
|
29
|
+
Requires-Dist: mido>=1.3; extra == 'all'
|
|
30
|
+
Requires-Dist: ms3>=2.6.0; extra == 'all'
|
|
31
|
+
Requires-Dist: music21>=9.0; extra == 'all'
|
|
32
|
+
Requires-Dist: mutagen>=1.47; extra == 'all'
|
|
33
|
+
Requires-Dist: partitura>=1.5; extra == 'all'
|
|
34
|
+
Requires-Dist: pillow>=10.0; extra == 'all'
|
|
35
|
+
Requires-Dist: pooch>=1.8; extra == 'all'
|
|
36
|
+
Requires-Dist: pymupdf>=1.24; extra == 'all'
|
|
37
|
+
Requires-Dist: rdflib>=7.0; extra == 'all'
|
|
38
|
+
Requires-Dist: setuptools<82; extra == 'all'
|
|
39
|
+
Requires-Dist: soundfile>=0.12; extra == 'all'
|
|
40
|
+
Provides-Extra: audio
|
|
41
|
+
Requires-Dist: mutagen>=1.47; extra == 'audio'
|
|
42
|
+
Requires-Dist: soundfile>=0.12; extra == 'audio'
|
|
43
|
+
Provides-Extra: delta
|
|
44
|
+
Requires-Dist: deltalake>=0.15.0; extra == 'delta'
|
|
45
|
+
Provides-Extra: dev
|
|
46
|
+
Requires-Dist: deltalake>=0.15.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: griffe<2,>=1.3; extra == 'dev'
|
|
48
|
+
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
49
|
+
Requires-Dist: jupyter>=1.0; extra == 'dev'
|
|
50
|
+
Requires-Dist: jupytext>=1.16; extra == 'dev'
|
|
51
|
+
Requires-Dist: matplotlib>=3.5; extra == 'dev'
|
|
52
|
+
Requires-Dist: mido>=1.3; extra == 'dev'
|
|
53
|
+
Requires-Dist: ms3>=2.6.0; extra == 'dev'
|
|
54
|
+
Requires-Dist: music21>=9.0; extra == 'dev'
|
|
55
|
+
Requires-Dist: mutagen>=1.47; extra == 'dev'
|
|
56
|
+
Requires-Dist: partitura>=1.5; extra == 'dev'
|
|
57
|
+
Requires-Dist: pillow>=10.0; extra == 'dev'
|
|
58
|
+
Requires-Dist: pooch>=1.8; extra == 'dev'
|
|
59
|
+
Requires-Dist: pre-commit>=2.20; extra == 'dev'
|
|
60
|
+
Requires-Dist: pymupdf>=1.24; extra == 'dev'
|
|
61
|
+
Requires-Dist: pytest-benchmark>=4.0; extra == 'dev'
|
|
62
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
63
|
+
Requires-Dist: pytest-xdist>=3.5; extra == 'dev'
|
|
64
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: quartodoc>=0.7; extra == 'dev'
|
|
66
|
+
Requires-Dist: rdflib>=7.0; extra == 'dev'
|
|
67
|
+
Requires-Dist: ruff>=0.1; extra == 'dev'
|
|
68
|
+
Requires-Dist: setuptools<82; extra == 'dev'
|
|
69
|
+
Requires-Dist: soundfile>=0.12; extra == 'dev'
|
|
70
|
+
Requires-Dist: tox>=4.0; extra == 'dev'
|
|
71
|
+
Provides-Extra: docs
|
|
72
|
+
Requires-Dist: griffe<2,>=1.3; extra == 'docs'
|
|
73
|
+
Requires-Dist: jupyter>=1.0; extra == 'docs'
|
|
74
|
+
Requires-Dist: jupytext>=1.16; extra == 'docs'
|
|
75
|
+
Requires-Dist: matplotlib>=3.5; extra == 'docs'
|
|
76
|
+
Requires-Dist: mido>=1.3; extra == 'docs'
|
|
77
|
+
Requires-Dist: ms3>=2.6.0; extra == 'docs'
|
|
78
|
+
Requires-Dist: music21>=9.0; extra == 'docs'
|
|
79
|
+
Requires-Dist: mutagen>=1.47; extra == 'docs'
|
|
80
|
+
Requires-Dist: partitura>=1.5; extra == 'docs'
|
|
81
|
+
Requires-Dist: pillow>=10.0; extra == 'docs'
|
|
82
|
+
Requires-Dist: pooch>=1.8; extra == 'docs'
|
|
83
|
+
Requires-Dist: pymupdf>=1.24; extra == 'docs'
|
|
84
|
+
Requires-Dist: quartodoc>=0.7; extra == 'docs'
|
|
85
|
+
Requires-Dist: setuptools<82; extra == 'docs'
|
|
86
|
+
Requires-Dist: soundfile>=0.12; extra == 'docs'
|
|
87
|
+
Provides-Extra: examples
|
|
88
|
+
Requires-Dist: pooch>=1.8; extra == 'examples'
|
|
89
|
+
Provides-Extra: graphical
|
|
90
|
+
Requires-Dist: pillow>=10.0; extra == 'graphical'
|
|
91
|
+
Requires-Dist: pymupdf>=1.24; extra == 'graphical'
|
|
92
|
+
Provides-Extra: loaders
|
|
93
|
+
Requires-Dist: mido>=1.3; extra == 'loaders'
|
|
94
|
+
Requires-Dist: ms3>=2.6.0; extra == 'loaders'
|
|
95
|
+
Requires-Dist: music21>=9.0; extra == 'loaders'
|
|
96
|
+
Requires-Dist: mutagen>=1.47; extra == 'loaders'
|
|
97
|
+
Requires-Dist: partitura>=1.5; extra == 'loaders'
|
|
98
|
+
Requires-Dist: pillow>=10.0; extra == 'loaders'
|
|
99
|
+
Requires-Dist: pymupdf>=1.24; extra == 'loaders'
|
|
100
|
+
Requires-Dist: setuptools<82; extra == 'loaders'
|
|
101
|
+
Requires-Dist: soundfile>=0.12; extra == 'loaders'
|
|
102
|
+
Provides-Extra: midi
|
|
103
|
+
Requires-Dist: mido>=1.3; extra == 'midi'
|
|
104
|
+
Provides-Extra: ms3
|
|
105
|
+
Requires-Dist: ms3>=2.6.0; extra == 'ms3'
|
|
106
|
+
Provides-Extra: music21
|
|
107
|
+
Requires-Dist: music21>=9.0; extra == 'music21'
|
|
108
|
+
Provides-Extra: partitura
|
|
109
|
+
Requires-Dist: partitura>=1.5; extra == 'partitura'
|
|
110
|
+
Requires-Dist: setuptools<82; extra == 'partitura'
|
|
111
|
+
Provides-Extra: plot
|
|
112
|
+
Requires-Dist: matplotlib>=3.5; extra == 'plot'
|
|
113
|
+
Provides-Extra: rdf
|
|
114
|
+
Requires-Dist: rdflib>=7.0; extra == 'rdf'
|
|
115
|
+
Provides-Extra: scores
|
|
116
|
+
Requires-Dist: ms3>=2.6.0; extra == 'scores'
|
|
117
|
+
Requires-Dist: music21>=9.0; extra == 'scores'
|
|
118
|
+
Requires-Dist: partitura>=1.5; extra == 'scores'
|
|
119
|
+
Requires-Dist: setuptools<82; extra == 'scores'
|
|
120
|
+
Provides-Extra: testing
|
|
121
|
+
Requires-Dist: deltalake>=0.15.0; extra == 'testing'
|
|
122
|
+
Requires-Dist: hypothesis>=6.100; extra == 'testing'
|
|
123
|
+
Requires-Dist: jupyter>=1.0; extra == 'testing'
|
|
124
|
+
Requires-Dist: jupytext>=1.16; extra == 'testing'
|
|
125
|
+
Requires-Dist: matplotlib>=3.5; extra == 'testing'
|
|
126
|
+
Requires-Dist: mido>=1.3; extra == 'testing'
|
|
127
|
+
Requires-Dist: ms3>=2.6.0; extra == 'testing'
|
|
128
|
+
Requires-Dist: music21>=9.0; extra == 'testing'
|
|
129
|
+
Requires-Dist: mutagen>=1.47; extra == 'testing'
|
|
130
|
+
Requires-Dist: partitura>=1.5; extra == 'testing'
|
|
131
|
+
Requires-Dist: pillow>=10.0; extra == 'testing'
|
|
132
|
+
Requires-Dist: pooch>=1.8; extra == 'testing'
|
|
133
|
+
Requires-Dist: pymupdf>=1.24; extra == 'testing'
|
|
134
|
+
Requires-Dist: pytest-benchmark>=4.0; extra == 'testing'
|
|
135
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'testing'
|
|
136
|
+
Requires-Dist: pytest-xdist>=3.5; extra == 'testing'
|
|
137
|
+
Requires-Dist: pytest>=7.0; extra == 'testing'
|
|
138
|
+
Requires-Dist: rdflib>=7.0; extra == 'testing'
|
|
139
|
+
Requires-Dist: setuptools<82; extra == 'testing'
|
|
140
|
+
Requires-Dist: soundfile>=0.12; extra == 'testing'
|
|
141
|
+
Provides-Extra: tutorial
|
|
142
|
+
Requires-Dist: jupyter>=1.0; extra == 'tutorial'
|
|
143
|
+
Requires-Dist: jupytext>=1.16; extra == 'tutorial'
|
|
144
|
+
Requires-Dist: matplotlib>=3.5; extra == 'tutorial'
|
|
145
|
+
Requires-Dist: mido>=1.3; extra == 'tutorial'
|
|
146
|
+
Requires-Dist: ms3>=2.6.0; extra == 'tutorial'
|
|
147
|
+
Requires-Dist: music21>=9.0; extra == 'tutorial'
|
|
148
|
+
Requires-Dist: mutagen>=1.47; extra == 'tutorial'
|
|
149
|
+
Requires-Dist: partitura>=1.5; extra == 'tutorial'
|
|
150
|
+
Requires-Dist: pillow>=10.0; extra == 'tutorial'
|
|
151
|
+
Requires-Dist: pooch>=1.8; extra == 'tutorial'
|
|
152
|
+
Requires-Dist: pymupdf>=1.24; extra == 'tutorial'
|
|
153
|
+
Requires-Dist: setuptools<82; extra == 'tutorial'
|
|
154
|
+
Requires-Dist: soundfile>=0.12; extra == 'tutorial'
|
|
155
|
+
Description-Content-Type: text/markdown
|
|
156
|
+
|
|
157
|
+
# TimeToAlign!
|
|
158
|
+
|
|
159
|
+
A Python library for representing and aligning musical timelines.
|
|
160
|
+
|
|
161
|
+
## Installation
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
cd timetoalign
|
|
165
|
+
pip install -e . # Core only — lightweight
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The core install pulls in only PyArrow, pandas, NetworkX, and
|
|
169
|
+
typing\_extensions. This gives you the full timeline / map / alignment
|
|
170
|
+
framework but no file-format-specific loaders. If you need loaders,
|
|
171
|
+
plotting, or Jupyter support, install one of the [optional extras](#optional-dependencies)
|
|
172
|
+
described below. To run the **tutorial notebooks** (see below), for example:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
pip install -e ".[tutorial]" # Loaders + plotting + Jupyter
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Optional Dependencies
|
|
179
|
+
|
|
180
|
+
TimeToAlign! organises its optional dependencies into *atomic* extras
|
|
181
|
+
(one concern each) and *composite* extras (convenience bundles that
|
|
182
|
+
include several atomic ones). You can mix and match freely:
|
|
183
|
+
`pip install -e ".[midi,plot]"` is perfectly valid.
|
|
184
|
+
|
|
185
|
+
#### Atomic extras
|
|
186
|
+
|
|
187
|
+
Each atomic extra adds support for a single loader backend or feature.
|
|
188
|
+
|
|
189
|
+
| Extra | Packages | Purpose |
|
|
190
|
+
|---|---|---|
|
|
191
|
+
| `midi` | `mido` | MIDI file loading (`PerformanceMidiLoader`) |
|
|
192
|
+
| `partitura` | `partitura` | Score parsing via partitura (`PartituraLoader`, `ScoreMidiLoader`) |
|
|
193
|
+
| `music21` | `music21` | Score parsing via music21 (`Music21Loader`) |
|
|
194
|
+
| `ms3` | `ms3` | DCML TSV score parsing (`TSVLoader`) |
|
|
195
|
+
| `audio` | `soundfile`, `mutagen` | Audio file loading + MP3/M4A metadata |
|
|
196
|
+
| `graphical` | `pymupdf`, `pillow` | PDF/image loading & drawing |
|
|
197
|
+
| `plot` | `matplotlib` | Visualisation (WP1 plotting) |
|
|
198
|
+
| `delta` | `deltalake` | Delta Lake columnar storage (future) |
|
|
199
|
+
| `rdf` | `rdflib` | RDF / linked-data export (future) |
|
|
200
|
+
|
|
201
|
+
#### Composite extras
|
|
202
|
+
|
|
203
|
+
Composite extras are convenience bundles that pull in several atomic
|
|
204
|
+
extras at once. Each level includes everything below it.
|
|
205
|
+
|
|
206
|
+
| Extra | Includes | Purpose |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| `scores` | `partitura`, `music21`, `ms3` | All score-loader backends |
|
|
209
|
+
| `loaders` | `midi`, `scores`, `audio`, `graphical` | Every loader dependency |
|
|
210
|
+
| `tutorial` | `loaders`, `plot`, plus `jupytext`, `jupyter` | Everything needed for the tutorial notebooks |
|
|
211
|
+
| `all` | `tutorial`, `delta`, `rdf` | All runtime features |
|
|
212
|
+
| `dev` | `all`, plus `pre-commit`, `pytest`, `pytest-cov`, `pytest-benchmark`, `hypothesis`, `ruff` | All features + development / CI tooling |
|
|
213
|
+
|
|
214
|
+
The inclusion chain is:
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
dev ⊃ all ⊃ tutorial ⊃ loaders ⊃ { midi, scores, audio, graphical }
|
|
218
|
+
+ plot, jupytext, jupyter
|
|
219
|
+
+ delta, rdf
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### Examples
|
|
223
|
+
|
|
224
|
+
From the repository root:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
pip install -e . # Core only
|
|
228
|
+
pip install -e ".[midi]" # Core + MIDI loading
|
|
229
|
+
pip install -e ".[partitura]" # Core + partitura score parsing
|
|
230
|
+
pip install -e ".[scores]" # Core + all score-loader backends
|
|
231
|
+
pip install -e ".[loaders]" # Core + every loader
|
|
232
|
+
pip install -e ".[tutorial]" # Loaders + plotting + Jupyter
|
|
233
|
+
pip install -e ".[all]" # All runtime features
|
|
234
|
+
pip install -e ".[dev]" # Editable install + everything + dev tooling
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Quick Start
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
import timetoalign as tta
|
|
241
|
+
|
|
242
|
+
# Create a 60-second audio timeline
|
|
243
|
+
audio = tta.ContinuousPhysicalTimeline(length=60.0, uid="audio", name="Piano Recording")
|
|
244
|
+
|
|
245
|
+
# Add beats and notes -- IDs and temporal_type are inferred automatically
|
|
246
|
+
audio.add_events([
|
|
247
|
+
{"event_type": "Beat", "instant": 0.0},
|
|
248
|
+
{"event_type": "Beat", "instant": 0.5},
|
|
249
|
+
{"event_type": "Beat", "instant": 1.0},
|
|
250
|
+
{"event_type": "Note", "start": 0.0, "end": 0.5},
|
|
251
|
+
{"event_type": "Note", "start": 8.0, "end": 12.0}, # spans Intro -> Verse
|
|
252
|
+
])
|
|
253
|
+
|
|
254
|
+
# Nest children (sections of the same recording)
|
|
255
|
+
intro = audio.create_child(length=10.0, offset=0.0, uid="intro", name="Intro")
|
|
256
|
+
verse = audio.create_child(length=20.0, offset=10.0, uid="verse", name="Verse")
|
|
257
|
+
chorus = audio.create_child(length=15.0, offset=30.0, uid="chorus", name="Chorus")
|
|
258
|
+
|
|
259
|
+
# Attach ConversionMaps (seconds -> milliseconds, seconds -> samples at 48 kHz)
|
|
260
|
+
audio.add_conversion_map(tta.ScalarMap(scalar=1000, source_unit="seconds", target_unit="milliseconds"))
|
|
261
|
+
audio.add_conversion_map(tta.SecondsToSamples(sample_rate=48000))
|
|
262
|
+
|
|
263
|
+
# The diagram shows the hierarchy at a glance
|
|
264
|
+
print(audio.diagram())
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
ContinuousPhysicalTimeline[audio] (5 events, 3 children)
|
|
269
|
+
0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 seconds
|
|
270
|
+
├─ Intro 0 ~~~~~ 10
|
|
271
|
+
├─ Verse 10 ~~~~~~~~~~~~ 30
|
|
272
|
+
└─ Chorus 30 ~~~~~~~~~ 45
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
```python
|
|
276
|
+
# A TimeStamp is a cross-section through the entire hierarchy at a given coordinate.
|
|
277
|
+
# Only children whose span covers the coordinate appear:
|
|
278
|
+
ts = audio.get_timestamp(25.0)
|
|
279
|
+
print(ts)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
TimeStamp @25 seconds
|
|
284
|
+
audio 25 seconds
|
|
285
|
+
verse 15 seconds
|
|
286
|
+
milliseconds 25000
|
|
287
|
+
samples 1200000
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# A TimeIntervalStamp gives the cross-section for a [start, end) range.
|
|
292
|
+
# The note at [8, 12) straddles Intro [0, 10) and Verse [10, 30):
|
|
293
|
+
# its start falls in Intro, its end in Verse.
|
|
294
|
+
tis = audio.get_interval_stamp(8.0, 12.0)
|
|
295
|
+
print(tis)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
TimeIntervalStamp [8, 12) seconds
|
|
300
|
+
start end
|
|
301
|
+
audio 8 12 seconds
|
|
302
|
+
intro 8 - seconds
|
|
303
|
+
verse - 2 seconds
|
|
304
|
+
milliseconds 8000 12000
|
|
305
|
+
samples 384000 576000
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Tutorial Notebooks
|
|
309
|
+
|
|
310
|
+
The `docs/notebooks/` directory contains Jupytext percent-script notebooks
|
|
311
|
+
covering the library from first principles to full alignment workflows.
|
|
312
|
+
Make sure you have installed the `tutorial` extra (see
|
|
313
|
+
[Installation](#installation)), then generate the paired `.ipynb` files
|
|
314
|
+
and launch Jupyter:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
jupytext --sync docs/*-notebooks/*.py
|
|
318
|
+
jupyter notebook docs/tuto-notebooks/
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Development
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
# Run the test suite
|
|
325
|
+
pytest
|
|
326
|
+
|
|
327
|
+
# Run linting / pre-commit hooks
|
|
328
|
+
tox -e lint
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## Glossary
|
|
332
|
+
|
|
333
|
+
### Gemini
|
|
334
|
+
|
|
335
|
+
| Term | Definition |
|
|
336
|
+
|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
337
|
+
| AlignmentAnchor | A set of TimeStamps corresponding to matched events, representing their temporal equivalence across timelines. From a Match of TimeIntervalEvents, we derive a StartAnchor and EndAnchor. |
|
|
338
|
+
| AlignmentBundle | The primary container object in the implementation that manages a collection of timelines, their groupings, and the coordination of transfers between them. |
|
|
339
|
+
| BeatGrid | A specialized \textit{ContinuousLogicalTimeline} representing metrical structure (measures and beats) using quarter notes as the underlying coordinate unit. |
|
|
340
|
+
| Break | A control event that voids contiguity at its Instant. TimeIntervals cannot span a Break, and Breaks cannot be inserted into existing TimeIntervals. |
|
|
341
|
+
| ChainMap | A MultiMap that applies multiple ConversionMaps in sequence, creating a conversion path from source to target unit. |
|
|
342
|
+
| Child | A timeline nested within a parent timeline, sharing the same measuring unit. Children are locked upon insertion to prevent side effects from modifications. |
|
|
343
|
+
| CombinationMap | A MultiMap yielding outputs from multiple ConversionMaps simultaneously (e.g., $(x, y)$ coordinate pairs). |
|
|
344
|
+
| Commensurable | Two timelines are commensurable when connected by a Match path or ConversionMap chain, enabling coordinate translation between them. |
|
|
345
|
+
| ConcatenationMap | A MultiMap combining bounded ConversionMaps such that each coordinate region is handled by a specific map. Implemented as \textit{PiecewiseMap}. |
|
|
346
|
+
| Contiguity | A TimeInterval is contiguous if it monotonically spans all coordinates between its start and end. An Instant is contiguous with a TimeInterval if it is synchronous with its EndInstant. |
|
|
347
|
+
| Control Event | An event affecting flow control: either a Break (voiding contiguity) or a Jump (creating new contiguity). |
|
|
348
|
+
| ConversionMap | A function mapping any coordinate to at most one value (another coordinate, specifier, or constant). Also called C-map. |
|
|
349
|
+
| Coordinate | A position on a timeline, expressed as the distance from the origin in the timeline's measuring unit. |
|
|
350
|
+
| Discrete/Continuous | A timeline is discrete when coordinates exist only at discrete points (e.g., pixels, samples); continuous otherwise (e.g., seconds, quarters). |
|
|
351
|
+
| Domain | One of three temporal categories: Graphical (visual/spatial), Logical (symbolic/musical), or Physical (audio/sound). |
|
|
352
|
+
| Event | Anything associated with a timeline via Instants. An InstantEvent has zero duration; a TimeIntervalEvent has duration defined by start and end coordinates. |
|
|
353
|
+
| FlowControlType | A taxonomy of control events distinguishing between structural markers (e.g., \textit{repeat\_start}, \textit{double\_barline}) and jump instructions (e.g., \textit{dal\_segno}, \textit{to\_coda}). |
|
|
354
|
+
| GroupTimestamp | A view object representing a synchronized instant across all commensurable timelines within a \textit{TimelineGroup}. |
|
|
355
|
+
| IdCoordinate | A coordinate specification that explicitly includes the unique identifier of the timeline to which it belongs, preventing ambiguity in multi-timeline contexts. |
|
|
356
|
+
| Instant | Associates a coordinate with a signification such as \enquote{start of event $e$}. Instants sharing a coordinate are synchronous. |
|
|
357
|
+
| InterpolationMap | A \textit{ConversionMap} that performs coordinate conversion via linear interpolation between a set of known correspondence points. |
|
|
358
|
+
| InverseMap | The reverse transformation of a bijective ConversionMap. |
|
|
359
|
+
| Jump | A control event with JumpFrom and JumpTo Instants. When active, makes events at JumpTo contiguous with those ending at JumpFrom (e.g., repeats, \textit{dal segno}). |
|
|
360
|
+
| Length | The distance between a timeline's origin and its last Instant. A locked timeline cannot extend its length. |
|
|
361
|
+
| LinearMap | A \textit{ConversionMap} implementing an affine transformation ($f(x) = ax + b$). Includes \textit{ScalarMap} ($b=0$) and \textit{ShiftMap} ($a=1$) as special cases. |
|
|
362
|
+
| Match | A claim---issued by a human or algorithmic agent---that events from disparate timelines are synchronous or equivalent, with associated metadata (agent, criteria, certainty). |
|
|
363
|
+
| MatchClaim | The implementation class for a \textit{Match}, representing a specific claim of equivalence between two events, comprising one (instant) or two (interval) \textit{AlignmentAnchor}s. |
|
|
364
|
+
| MatchLine | A linked list of Match objects preserving their order, enabling selection and alignment of temporal correspondences. |
|
|
365
|
+
| MatchMetadata | Structured provenance information attached to a \textit{MatchClaim}, recording the agent, decision criteria, and certainty level of the match. |
|
|
366
|
+
| MatchPath | A graph traversal connecting matched events across multiple timelines (e.g., $A \rightarrow B \rightarrow C$). |
|
|
367
|
+
| MetricMap | A specialized \textit{ConversionMap} that handles complex metrical conversions (e.g., quarter notes to measure count) accounting for time signatures and anacrusis. |
|
|
368
|
+
| MultiMap | An umbrella term for composed ConversionMaps (ChainMap, CombinationMap, ConcatenationMap). |
|
|
369
|
+
| Origin | The zero coordinate of a timeline, from which all positions are measured. |
|
|
370
|
+
| PiecewiseMap | The implementation of a \textit{ConcatenationMap}, applying different sub-maps to disjoint coordinate intervals. |
|
|
371
|
+
| Region | A named part of a timeline defined by a TimeInterval (e.g., \enquote{Chorus}, \enquote{Verse}). Regions are not timelines and cannot hold events or maps directly. |
|
|
372
|
+
| RotationMap | A \textit{ConversionMap} that implements periodic or cyclic transformations using modular arithmetic. |
|
|
373
|
+
| Segment | A Child timeline that is contiguous with its siblings. A SegmentLine is a parent containing only contiguous Segments. |
|
|
374
|
+
| Synchrony | Strict synchrony: Instants sharing identical coordinates. Pragmatic synchrony: Instants binned together based on a threshold (e.g., for quantisation). |
|
|
375
|
+
| TimeInterval | Defined by a StartInstant and EndInstant; left-inclusive and right-exclusive $[s, e)$. The EndInstant's coordinate must be $\geq$ the StartInstant's. |
|
|
376
|
+
| Timeline | A positive coordinate axis minimally defined by its origin and measuring unit. Accommodates events and potentially Children. |
|
|
377
|
+
| TimelineGroup | A container for a set of commensurable timelines that are bijectively mapped to each other (e.g., via linear interpolation) and share a common timestamp table. |
|
|
378
|
+
| TimeStamp | A cross-section through a timeline hierarchy, comprising the root coordinate, synchronous Child coordinates, and all ConversionMap results. |
|
|
379
|
+
| TraversalMap | A sequence of TimeIntervals representing a specific traversal path through a timeline (handling Jumps and repeats). Also called T-map. |
|
|
380
|
+
| WarpMap | A derived timeline where coordinates are re-adjusted based on AlignmentAnchors to align with another timeline. |
|
|
381
|
+
|
|
382
|
+
### Claude
|
|
383
|
+
|
|
384
|
+
| Term | Definition |
|
|
385
|
+
|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
386
|
+
| AlignmentAnchor | A set of TimeStamps corresponding to matched events, representing their temporal equivalence across timelines. From a Match of TimeIntervalEvents, we derive a StartAnchor and EndAnchor. |
|
|
387
|
+
| Break | A control event that voids contiguity at its Instant. TimeIntervals cannot span a Break, and Breaks cannot be inserted into existing TimeIntervals. |
|
|
388
|
+
| Child | A timeline nested within a parent timeline, sharing the same measuring unit. Children are locked upon insertion to prevent side effects from modifications. |
|
|
389
|
+
| ChainMap | A MultiMap that applies multiple ConversionMaps in sequence, creating a conversion path from source to target unit. |
|
|
390
|
+
| CombinationMap | A MultiMap yielding outputs from multiple ConversionMaps simultaneously (e.g., $(x, y)$ coordinate pairs). |
|
|
391
|
+
| Commensurable | Two timelines are commensurable when connected by a Match path or ConversionMap chain, enabling coordinate translation between them. |
|
|
392
|
+
| ConcatenationMap | A MultiMap combining bounded ConversionMaps such that each coordinate region is handled by a specific map. |
|
|
393
|
+
| Contiguity | A TimeInterval is contiguous if it monotonically spans all coordinates between its start and end. An Instant is contiguous with a TimeInterval if it is synchronous with its EndInstant. |
|
|
394
|
+
| Control Event | An event affecting flow control: either a Break (voiding contiguity) or a Jump (creating new contiguity). |
|
|
395
|
+
| ConversionMap | A function mapping any coordinate to at most one value (another coordinate, specifier, or constant). Also called C-map. |
|
|
396
|
+
| Coordinate | A position on a timeline, expressed as the distance from the origin in the timeline's measuring unit. |
|
|
397
|
+
| Discrete/Continuous | A timeline is discrete when coordinates exist only at discrete points (e.g., pixels, samples); continuous otherwise (e.g., seconds, quarters). |
|
|
398
|
+
| Domain | One of three temporal categories: Graphical (visual/spatial), Logical (symbolic/musical), or Physical (audio/sound). |
|
|
399
|
+
| Event | Anything associated with a timeline via Instants. An InstantEvent has zero duration; a TimeIntervalEvent has duration defined by start and end coordinates. |
|
|
400
|
+
| Instant | Associates a coordinate with a signification such as \enquote{start of event $e$}. Instants sharing a coordinate are synchronous. |
|
|
401
|
+
| InverseMap | The reverse transformation of a bijective ConversionMap. |
|
|
402
|
+
| Jump | A control event with JumpFrom and JumpTo Instants. When active, makes events at JumpTo contiguous with those ending at JumpFrom (e.g., repeats, \textit{dal segno}). |
|
|
403
|
+
| Length | The distance between a timeline's origin and its last Instant. A locked timeline cannot extend its length. |
|
|
404
|
+
| Match | A claim---issued by a human or algorithmic agent---that events from disparate timelines are synchronous or equivalent, with associated metadata (agent, criteria, certainty). |
|
|
405
|
+
| MatchLine | A linked list of Match objects preserving their order, enabling selection and alignment of temporal correspondences. |
|
|
406
|
+
| MatchPath | A graph traversal connecting matched events across multiple timelines (e.g., $A \rightarrow B \rightarrow C$). |
|
|
407
|
+
| MultiMap | An umbrella term for composed ConversionMaps (ChainMap, CombinationMap, ConcatenationMap). |
|
|
408
|
+
| Origin | The zero coordinate of a timeline, from which all positions are measured. |
|
|
409
|
+
| Region | A named part of a timeline defined by a TimeInterval (e.g., \enquote{Chorus}, \enquote{Verse}). Regions are not timelines and cannot hold events or maps directly. |
|
|
410
|
+
| Segment | A Child timeline that is contiguous with its siblings. A SegmentLine is a parent containing only contiguous Segments. |
|
|
411
|
+
| Synchrony | Strict synchrony: Instants sharing identical coordinates. Pragmatic synchrony: Instants binned together based on a threshold (e.g., for quantisation). |
|
|
412
|
+
| TimeInterval | Defined by a StartInstant and EndInstant; left-inclusive and right-exclusive $[s, e)$. The EndInstant's coordinate must be $\geq$ the StartInstant's. |
|
|
413
|
+
| Timeline | A positive coordinate axis minimally defined by its origin and measuring unit. Accommodates events and potentially Children. |
|
|
414
|
+
| TimeStamp | A cross-section through a timeline hierarchy, comprising the root coordinate, synchronous Child coordinates, and all ConversionMap results. |
|
|
415
|
+
| TraversalMap | A sequence of TimeIntervals representing a specific traversal path through a timeline (handling Jumps and repeats). Also called T-map. |
|
|
416
|
+
| WarpMap | A derived timeline where coordinates are re-adjusted based on AlignmentAnchors to align with another timeline. |
|
|
417
|
+
|
|
418
|
+
## License
|
|
419
|
+
|
|
420
|
+
MIT
|