{"id":157067,"name":"OpenSoundscape","description":"A free and open source Python utility library analyzing bioacoustic data.","url":"https://github.com/kitzeslab/opensoundscape","last_synced_at":"2026-05-21T00:03:18.780Z","repository":{"id":39545632,"uuid":"149182373","full_name":"kitzeslab/opensoundscape","owner":"kitzeslab","description":"Open source, scalable software for the analysis of bioacoustic recordings","archived":false,"fork":false,"pushed_at":"2026-05-11T18:42:39.000Z","size":584226,"stargazers_count":208,"open_issues_count":113,"forks_count":28,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-05-14T21:05:55.874Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://opensoundscape.org","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/kitzeslab.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-09-17T20:14:21.000Z","updated_at":"2026-05-13T12:45:31.000Z","dependencies_parsed_at":"2023-09-28T00:57:08.810Z","dependency_job_id":"92159fe5-fb5a-43e7-b356-4def4b3b65eb","html_url":"https://github.com/kitzeslab/opensoundscape","commit_stats":{"total_commits":1854,"total_committers":23,"mean_commits":80.6086956521739,"dds":0.4298813376483279,"last_synced_commit":"1b3e1211e1b01c06120688dd87d15eb699ac7fc3"},"previous_names":["jkitzes/opensoundscape"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/kitzeslab/opensoundscape","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitzeslab","download_url":"https://codeload.github.com/kitzeslab/opensoundscape/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33120450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"last_error":"SSL_read: 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"}},"owner":{"login":"kitzeslab","name":"kitzeslab","uuid":"47861642","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/47861642?v=4","repositories_count":6,"last_synced_at":"2023-03-08T16:44:28.840Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/kitzeslab","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-18T07:29:18.369Z","updated_at":"2023-03-08T16:44:28.844Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitzeslab","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitzeslab/repositories"},"packages":[{"id":11733168,"name":"github.com/kitzeslab/opensoundscape","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/kitzeslab/opensoundscape","keywords_array":[],"namespace":null,"versions_count":24,"first_release_published_at":"2019-01-08T16:33:40.000Z","latest_release_published_at":"2026-05-06T17:09:57.941Z","latest_release_number":"v0.13.0","last_synced_at":"2026-05-18T23:00:41.472Z","created_at":"2025-06-05T11:14:40.157Z","updated_at":"2026-05-18T23:00:41.472Z","registry_url":"https://pkg.go.dev/github.com/kitzeslab/opensoundscape","install_command":"go get github.com/kitzeslab/opensoundscape","documentation_url":"https://pkg.go.dev/github.com/kitzeslab/opensoundscape#section-documentation","metadata":{},"repo_metadata":{"id":39545632,"uuid":"149182373","full_name":"kitzeslab/opensoundscape","owner":"kitzeslab","description":"Open source, scalable software for the analysis of bioacoustic recordings","archived":false,"fork":false,"pushed_at":"2025-10-15T14:18:16.000Z","size":447276,"stargazers_count":185,"open_issues_count":114,"forks_count":23,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-10-17T13:58:59.987Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://opensoundscape.org","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/kitzeslab.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-09-17T20:14:21.000Z","updated_at":"2025-10-15T01:12:05.000Z","dependencies_parsed_at":"2023-09-28T00:57:08.810Z","dependency_job_id":"20f30529-f559-429b-8b75-633a7a2f3a2d","html_url":"https://github.com/kitzeslab/opensoundscape","commit_stats":{"total_commits":1854,"total_committers":23,"mean_commits":80.6086956521739,"dds":0.4298813376483279,"last_synced_commit":"1b3e1211e1b01c06120688dd87d15eb699ac7fc3"},"previous_names":["jkitzes/opensoundscape"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/kitzeslab/opensoundscape","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitzeslab","download_url":"https://codeload.github.com/kitzeslab/opensoundscape/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279838577,"owners_count":26234002,"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","status":"online","status_checked_at":"2025-10-19T02:00:07.647Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"tags":[]},"repo_metadata_updated_at":"2025-10-19T15:21:54.088Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/kitzeslab/opensoundscape","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/kitzeslab/opensoundscape","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/kitzeslab/opensoundscape","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/kitzeslab/opensoundscape/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-10-18T22:34:58.819Z","issues_count":347,"pull_requests_count":200,"avg_time_to_close_issue":17761779.091346152,"avg_time_to_close_pull_request":2606553.048780488,"issues_closed_count":208,"pull_requests_closed_count":164,"pull_request_authors_count":11,"issue_authors_count":26,"avg_comments_per_issue":1.1902017291066282,"avg_comments_per_pull_request":0.27,"merged_pull_requests_count":127,"bot_issues_count":0,"bot_pull_requests_count":43,"past_year_issues_count":69,"past_year_pull_requests_count":35,"past_year_avg_time_to_close_issue":3203297.777777778,"past_year_avg_time_to_close_pull_request":2085379.875,"past_year_issues_closed_count":18,"past_year_pull_requests_closed_count":16,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":0.37681159420289856,"past_year_avg_comments_per_pull_request":0.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":19,"past_year_merged_pull_requests_count":8,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/issues","maintainers":[{"login":"sammlapp","count":341,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sammlapp"},{"login":"louisfh","count":77,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/louisfh"},{"login":"rhine3","count":20,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/rhine3"},{"login":"syunkova","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/syunkova"},{"login":"jatinkhilnani","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jatinkhilnani"},{"login":"LeonardoViotti","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/LeonardoViotti"},{"login":"indranil1","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/indranil1"},{"login":"jkitzes","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkitzes"}],"active_maintainers":[{"login":"sammlapp","count":66,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sammlapp"},{"login":"louisfh","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/louisfh"},{"login":"syunkova","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/syunkova"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fkitzeslab%2Fopensoundscape/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2145218,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":1458084,"full_name":"kitzeslab/opensoundscape","default_branch":"master","total_commits":2159,"total_committers":18,"total_bot_commits":2,"total_bot_committers":1,"mean_commits":119.94444444444444,"dds":0.3719314497452524,"past_year_total_commits":249,"past_year_total_committers":3,"past_year_total_bot_commits":2,"past_year_total_bot_committers":1,"past_year_mean_commits":83.0,"past_year_dds":0.016064257028112428,"last_synced_at":"2026-05-18T23:03:58.411Z","last_synced_commit":"3f567643138d23d2660719b4c6ec7c758ef58200","created_at":"2023-12-21T00:19:30.181Z","updated_at":"2026-05-18T23:01:31.271Z","committers":[{"name":"sammlapp","email":"sammlapp@gmail.com","login":"sammlapp","count":1356},{"name":"rhine3","email":"tessa.rhinehart@gmail.com","login":"rhine3","count":355},{"name":"Louis Freeland-Haynes","email":"66101835+louisfh","login":"louisfh","count":144},{"name":"Barry Moore","email":"chiroptical@gmail.com","login":"chiroptical","count":104},{"name":"Santiago Ruiz Guzman","email":"sar541@pitt.edu","login":"sanruizguz","count":50},{"name":"syunkova","email":"sa.syunkova@gmail.com","login":"syunkova","count":33},{"name":"Lapp","email":"sml161@robin.bio.pitt.edu","login":null,"count":31},{"name":"Jatin Khilnani","email":"jk6373@nyu.edu","login":"jatinkhilnani","count":30},{"name":"Justin Kitzes","email":"justin.kitzes@pitt.edu","login":"jkitzes","count":17},{"name":"LeonardoViotti","email":"leonardoviotti@gmail.com","login":"LeonardoViotti","count":17},{"name":"Alexandra Syunkova","email":"sash@Alexandras-MacBook-Pro.local","login":null,"count":6},{"name":"Zohar","email":"juj22@pitt.edu","login":null,"count":4},{"name":"Jatin Khilnani","email":"jk@nightjar.local","login":null,"count":3},{"name":"Freeland-Haynes","email":"LOF19@Freeland-Hayness-MacBook-Pro.local","login":null,"count":2},{"name":"sar541","email":"sanruizguz@gmail.com","login":null,"count":2},{"name":"Lapp","email":"SML161@dsas-r2ghwxk40d.hsd1.pa.comcast.net","login":null,"count":2},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"ter38","email":"ter38@login1.crc.pitt.edu","login":null,"count":1}],"past_year_committers":[{"name":"sammlapp","email":"sammlapp@gmail.com","login":"sammlapp","count":245},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"Tessa Rhinehart","email":"tessa.rhinehart@gmail.com","login":"rhine3","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-21T00:00:09.753Z","repositories_count":6236364,"commits_count":884135613,"contributors_count":34882451,"owners_count":1155148,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"kitzeslab/opensoundscape","html_url":"https://github.com/kitzeslab/opensoundscape","last_synced_at":"2026-05-20T07:30:10.451Z","status":null,"issues_count":356,"pull_requests_count":234,"avg_time_to_close_issue":17676937.679425836,"avg_time_to_close_pull_request":2859896.371727749,"issues_closed_count":209,"pull_requests_closed_count":191,"pull_request_authors_count":11,"issue_authors_count":27,"avg_comments_per_issue":1.1657303370786516,"avg_comments_per_pull_request":0.3418803418803419,"merged_pull_requests_count":133,"bot_issues_count":0,"bot_pull_requests_count":66,"past_year_issues_count":31,"past_year_pull_requests_count":49,"past_year_avg_time_to_close_issue":313110.0,"past_year_avg_time_to_close_pull_request":3967271.0322580645,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":31,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":7,"past_year_avg_comments_per_issue":0.2903225806451613,"past_year_avg_comments_per_pull_request":0.5510204081632653,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":34,"past_year_merged_pull_requests_count":8,"created_at":"2023-05-14T19:34:48.758Z","updated_at":"2026-05-20T07:30:10.451Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitzeslab%2Fopensoundscape/issues","issue_labels_count":{"resolved_in_develop":162,"feature request":54,"bug":49,"docs":34,"module:ml":23,"module:localization":20,"discuss":16,"high priority":15,"module:preprocessing":14,"module:annotation":10,"deprecation":9,"resolved_in_branch":9,"dependencies":6,"performance":5,"in_progress":4,"rename":4,"testing":3,"system:mps":2,"module:wandb":2,"good first issue":1,"wontfix":1},"pull_request_labels_count":{"dependencies":66,"python":42,"resolved_in_develop":9},"issue_author_associations_count":{"COLLABORATOR":242,"MEMBER":77,"NONE":31,"CONTRIBUTOR":6},"pull_request_author_associations_count":{"COLLABORATOR":125,"NONE":79,"MEMBER":26,"CONTRIBUTOR":4},"issue_authors":{"sammlapp":240,"louisfh":55,"rhine3":19,"syunkova":8,"paulpeyret-biophonia":6,"jatinkhilnani":3,"lmc150":3,"Maxime-Bru":2,"lydiakatsis":2,"fascimare":1,"beinscig-jpg":1,"w-out":1,"jhuus":1,"smholmes3":1,"Mgallimore88":1,"AdamVarley30":1,"jmcmeen":1,"brookedg":1,"Jonas-Guignet":1,"lostanlen":1,"ofsoundmind":1,"WMXZ-EU":1,"charleygros":1,"GrunCrow":1,"dsbennett2023":1,"violll":1,"sunraymoonbeam":1},"pull_request_authors":{"sammlapp":117,"dependabot[bot]":66,"louisfh":22,"syunkova":8,"LeonardoViotti":6,"sanruizguz":6,"rhine3":3,"Copilot":2,"bmford":2,"jkitzes":1,"indranil1":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-21T00:00:41.637Z","repositories_count":14648807,"issues_count":34127274,"pull_requests_count":111736673,"authors_count":11267562,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"resolved_in_develop":7,"bug":2,"docs":1,"module:ml":1,"resolved_in_branch":1},"past_year_pull_request_labels_count":{"dependencies":34,"python":34},"past_year_issue_author_associations_count":{"COLLABORATOR":23,"NONE":4,"MEMBER":3},"past_year_pull_request_author_associations_count":{"NONE":36,"COLLABORATOR":13},"past_year_issue_authors":{"sammlapp":22,"paulpeyret-biophonia":2,"rhine3":2,"beinscig-jpg":1,"brookedg":1,"louisfh":1,"syunkova":1},"past_year_pull_request_authors":{"dependabot[bot]":34,"sammlapp":13,"Copilot":2},"maintainers":[{"login":"sammlapp","count":357,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sammlapp"},{"login":"louisfh","count":77,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/louisfh"},{"login":"rhine3","count":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/rhine3"},{"login":"syunkova","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/syunkova"},{"login":"jatinkhilnani","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jatinkhilnani"},{"login":"LeonardoViotti","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/LeonardoViotti"},{"login":"indranil1","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/indranil1"},{"login":"jkitzes","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkitzes"}],"active_maintainers":[{"login":"sammlapp","count":35,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sammlapp"},{"login":"rhine3","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/rhine3"},{"login":"louisfh","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/louisfh"},{"login":"syunkova","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/syunkova"}]},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":43,"PullRequestEvent":80,"ForkEvent":4,"DiscussionEvent":1,"IssuesEvent":112,"WatchEvent":56,"IssueCommentEvent":75,"PushEvent":171,"PullRequestReviewCommentEvent":17,"PullRequestReviewEvent":8,"CreateEvent":35},"last_year":{"ReleaseEvent":1,"DeleteEvent":39,"PullRequestEvent":64,"DiscussionEvent":1,"IssuesEvent":45,"WatchEvent":24,"IssueCommentEvent":33,"PushEvent":117,"PullRequestReviewCommentEvent":17,"PullRequestReviewEvent":7,"CreateEvent":24}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"docs/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-07-04T10:43:26.696Z","updated_at":"2022-07-04T10:43:26.696Z","repository_link":"https://github.com/kitzeslab/opensoundscape/blob/master/docs/requirements.txt","dependencies":[{"id":103894419,"package_name":"sphinx","ecosystem":"pypi","requirements":"\u003e=1.4","direct":true,"kind":"runtime","optional":false},{"id":103894420,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":103894421,"package_name":"nbsphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":103894422,"package_name":"m2r","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":103894423,"package_name":"docutils","ecosystem":"pypi","requirements":"\u003c0.18","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/docker.yml","sha":null,"kind":"manifest","created_at":"2023-02-10T15:30:35.292Z","updated_at":"2023-02-10T15:30:35.292Z","repository_link":"https://github.com/kitzeslab/opensoundscape/blob/master/.github/workflows/docker.yml","dependencies":[{"id":7532642597,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/poetry.yml","sha":null,"kind":"manifest","created_at":"2023-02-10T15:30:35.359Z","updated_at":"2023-02-10T15:30:35.359Z","repository_link":"https://github.com/kitzeslab/opensoundscape/blob/master/.github/workflows/poetry.yml","dependencies":[{"id":7532642672,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7532642675,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-02-10T15:30:35.405Z","updated_at":"2023-02-10T15:30:35.405Z","repository_link":"https://github.com/kitzeslab/opensoundscape/blob/master/Dockerfile","dependencies":[{"id":7532644301,"package_name":"python","ecosystem":"docker","requirements":"3.7-slim","direct":true,"kind":"build","optional":false}]}],"score":null,"created_at":"2023-12-21T00:07:07.490Z","updated_at":"2026-05-21T00:03:18.782Z","avatar_url":"https://github.com/kitzeslab.png","language":"Python","category":"Biosphere","sub_category":"Bioacoustics and Acoustic Data Analysis","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# OpenSoundscape\n\n[![CI](https://github.com/kitzeslab/opensoundscape/actions/workflows/poetry.yml/badge.svg?branch=master)](https://github.com/kitzeslab/opensoundscape/actions/workflows/poetry.yml)\n[![Documentation Status](https://readthedocs.org/projects/opensoundscape/badge/?version=latest)](http://opensoundscape.org/en/latest/?badge=latest)\n\nOpenSoundscape (OPSO) is free and open source Python utility library analyzing bioacoustic data. \n\nOpenSoundscape includes utilities which can be strung together to create data analysis pipelines, including functions to:\n\n* load and manipulate audio files\n* create and manipulate spectrograms\n* train deep learning models to recognize sounds\n* run pre-trained CNNs to detect vocalizations\n* tune pre-trained CNNs to custom classification tasks\n* detect periodic vocalizations with RIBBIT\n* load and manipulate Raven annotations\n* estimate the location of sound sources from synchronized recordings\n\n\nOpenSoundscape's documentation can be found on [OpenSoundscape.org](https://opensoundscape.org).\n\n## Show me the code!\n\nFor examples of how to use OpenSoundscape, see the [Quick Start Guide](#quick-start-guide) below.\n\nFor full API documentation and tutorials on how to use OpenSoundscape to work with audio and spectrograms, train machine learning models, apply trained machine learning models to acoustic data, and detect periodic vocalizations using RIBBIT, see the [documentation](http://opensoundscape.org).\n\n\n## Contact \u0026 Citation\n\nOpenSoundcape is developed and maintained by the [Kitzes Lab](http://www.kitzeslab.org/) at the University of Pittsburgh. It is currently in active development. If you find a bug, please [submit an issue](https://github.com/kitzeslab/opensoundscape/issues) on the GitHub repository. If you have another question about OpenSoundscape, please use the (OpenSoundscape Discussions board)[https://github.com/kitzeslab/opensoundscape/discussions] or email Sam Lapp (`sam.lapp at pitt.edu`)\n\n\nSuggested citation:\n\n    Lapp, Sam; Rhinehart, Tessa; Freeland-Haynes, Louis; \n    Khilnani, Jatin; Syunkova, Alexandra; Kitzes, Justin. \n    “OpenSoundscape: An Open-Source Bioacoustics Analysis Package for Python.” \n    Methods in Ecology and Evolution 2023. https://doi.org/10.1111/2041-210X.14196.\n\n\n## Quick Start Guide\n\nA guide to the most commonly used features of OpenSoundscape.\n\n\n### Installation\n\nDetails about installation are available on the OpenSoundscape documentation at [OpenSoundscape.org](https://opensoundscape.org). FAQs:\n\n#### How do I install OpenSoundscape?\n\n* Most users should install OpenSoundscape via pip, preferably within a virtual environment: `pip install opensoundscape==0.12.1`. \n* To use OpenSoundscape in Jupyter Notebooks (e.g. for tutorials), follow the installation instructions for your operating system, then follow the \"Jupyter\" instructions.\n* Contributors and advanced users can also use Poetry to install OpenSoundscape using the \"Contributor\" instructions\n\n#### Will OpenSoundscape work on my machine?\n\n* OpenSoundscape can be installed on Windows, Mac, and Linux machines.\n* For Windows users, we strongly recommend using WSL2 which facilitates happy coding\n* We support Python 3.10, 3.11, 3.12, and 3.13 (but current github runners only test on Python 3.13)\n* Most computer cluster users should follow the Linux installation instructions\n* For older Macs (Intel chip), use this workaround since newer PyTorch versions are not found by pip (replace `NAME` with the desired name of your enviornment):\n\n```\nconda create -n NAME python=3.11\nconda activate NAME\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 -c conda-forge\npip install opensoundscape==0.12.1\n```\n\n### Use Audio and Spectrogram classes to inspect audio data\n```python\nfrom opensoundscape import Audio, Spectrogram\n\n#load an audio file and trim out a 5 second clip\nmy_audio = Audio.from_file(\"/path/to/audio.wav\")\nclip_5s = my_audio.trim(0,5)\n\n#create a spectrogram and plot it\nmy_spec = Spectrogram.from_audio(clip_5s)\nmy_spec.plot()\n```\n\n### Load audio starting at a real-world timestamp\n```python\nfrom datetime import datetime; import pytz\n\nstart_time = pytz.timezone('UTC').localize(datetime(2020,4,4,10,25))\naudio_length = 5 #seconds  \npath = '/path/to/audiomoth_file.WAV' #an AudioMoth recording\n\nAudio.from_file(path, start_timestamp=start_time,duration=audio_length)\n```\n\n### Load and use a model from the Bioacoustics Model Zoo\nThe [Bioacoustics Model Zoo](https://github.com/kitzeslab/bioacoustics-model-zoo) hosts models in a repository that can be installed as a package and are compatible with OpenSoundscape. To install, use\n`pip install bioacoustics-model-zoo==0.12.0`\n\nLoad up a model and apply it to your own audio right away:\n\n```python\nimport bioacoustics_model_zoo as bmz\n\n#list available models\nprint(bmz.utils.list_models())\n\n#generate class predictions and embedding vectors with Perch\nperch = bmz.Perch()\nscores = perch.predict(files)\nembeddings = perch.generate_embeddings(files)\n\n#...or BirdNET\nbirdnet = bmz.BirdNET()\nscores = birdnet.predict(files)\nembeddings = birdnet.generate_embeddings(files)\n```\n\nSee the tutorial notebooks for examples of training and fine-tuning models from the model zoo with your own annotations. \n\n### Load a pre-trained CNN from a local file, and make predictions on long audio files\n```python\nfrom opensoundscape import load_model\n\n#get list of audio files\nfiles = glob('./dir/*.WAV')\n\n#generate predictions with a model\nmodel = load_model('/path/to/saved.model')\nscores = model.predict(files)\n\n#scores is a dataframe with MultiIndex: file, start_time, end_time\n#containing inference scores for each class and each audio window\n```\n\n### Train a CNN using audio files and Raven annotations \n```python\nfrom sklearn.model_selection import train_test_split\nfrom opensoundscape import BoxedAnnotations, CNN\n\n# assume we have a list of raven annotation files and corresponding audio files\n# load the annotations into OpenSoundscape\nall_annotations = BoxedAnnotations.from_raven_files(raven_file_paths,audio_file_paths)\n\n# pick classes to train the model on. These should occur in the annotated data\nclass_list = ['IBWO','BLJA']\n\n# create labels for fixed-duration (2 second) clips \nlabels = all_annotations.clip_labels(\n  clip_duration=2,\n  clip_overlap=0,\n  min_label_overlap=0.25,\n  class_subset=class_list\n)\n\n# split the labels into training and validation sets\ntrain_df, validation_df = train_test_split(labels, test_size=0.3)\n\n# create a CNN and train on the labeled data\nmodel = CNN(architecture='resnet18', sample_duration=2, classes=class_list)\n\n# train the model to recognize the classes of interest in audio data\nmodel.train(train_df, validation_df, epochs=20, num_workers=8, batch_size=256)\n```\n\n### Train a custom classifier on BirdNET or Perch embeddings\n\nMake sure you've installed the model zoo in your Python environment:\n\n`pip install bioacoustics-model-zoo==0.12.0`\n\n```python\nimport bioacoustics_model_zoo as bmz\n\n# load a model from the model zoo\nmodel = bmz.BirdNET() #or bmz.Perch()\n\n# define classes for your custom classifier\nmodel.change_classes(train_df.columns)\n\n# fit the trainable PyTorch classifier on your labels\nmodel.train(train_df,val_df,num_augmentation_variants=4,batch_size=64)\n\n# run inference using your custom classifier on audio data\nmodel.predict(audio_files)\n\n# save and load customized models\nmodel.save(save_path)\nreloaded_model = bmz.BirdNET.load(save_path)\n```\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.1111/2041-210X.14196"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/157067","html_url":"https://ost.ecosyste.ms/projects/157067"}