{"id":13618686,"url":"https://github.com/belangeo/pyo","last_synced_at":"2026-10-19T13:02:46.755Z","repository":{"id":2031111,"uuid":"41371288","full_name":"belangeo/pyo","owner":"belangeo","description":"Python DSP module","archived":false,"fork":false,"pushed_at":"2026-10-16T13:14:51.000Z","size":31372,"stargazers_count":1458,"open_issues_count":32,"forks_count":146,"subscribers_count":58,"default_branch":"master","last_synced_at":"2026-10-17T12:09:27.605Z","etag":null,"topics":["audio","c","dsp","music","pyo","python","radio-pyo","signal-processing","sound","synthesis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/belangeo.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","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,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2015-08-25T15:23:20.000Z","updated_at":"2026-10-16T13:14:56.000Z","dependencies_parsed_at":"2026-08-25T18:12:30.965Z","dependency_job_id":null,"html_url":"https://github.com/belangeo/pyo","commit_stats":{"total_commits":2227,"total_committers":27,"mean_commits":82.48148148148148,"dds":"0.48226313426133816","last_synced_commit":"57d63097a0c0dd044797888f08728c49f83512ec"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/belangeo/pyo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belangeo%2Fpyo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belangeo%2Fpyo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belangeo%2Fpyo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belangeo%2Fpyo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/belangeo","download_url":"https://codeload.github.com/belangeo/pyo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belangeo%2Fpyo/sbom","scorecard":{"id":230735,"data":{"date":"2025-08-11","repo":{"name":"github.com/belangeo/pyo","commit":"a7cbe87a52330defdede1f31d29ed719712a08a8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build_manylinux_wheels.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 2/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_manylinux_wheels.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/belangeo/pyo/build_manylinux_wheels.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_manylinux_wheels.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/belangeo/pyo/build_manylinux_wheels.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_manylinux_wheels.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/belangeo/pyo/build_manylinux_wheels.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build_manylinux_wheels.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/build_manylinux_wheels.yml:20","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T04:48:21.335Z","repository_id":2031111,"created_at":"2025-08-17T04:48:21.335Z","updated_at":"2025-08-17T04:48:21.335Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38334523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-17T02:00:06.547Z","response_time":57,"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"}},"keywords":["audio","c","dsp","music","pyo","python","radio-pyo","signal-processing","sound","synthesis"],"created_at":"2024-08-01T21:00:29.029Z","updated_at":"2026-10-19T13:02:46.749Z","avatar_url":"https://github.com/belangeo.png","language":"Python","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=9CA99DH6ES3HA"],"categories":["Graphics and Media","User Interaction","Python","Audio Processing \u0026 Synthesis","Analysis \u0026 Feature Extraction"],"sub_categories":["Audio","Acoustic User Interface"],"readme":"# Pyo - Python DSP module #\n\npyo is a Python module written in C to facilitate the creation of digital signal processing scripts.\n\npyo is a Python module containing classes for a wide variety of audio signal \nprocessing types. With pyo, users will be able to include signal processing \nchains directly in Python scripts or projects, and to manipulate them in real \ntime through the interpreter. Tools in the pyo module offers primitives, like \nmathematical operations on audio signals, basic signal processing (filters, \ndelays, synthesis generators, etc.), but also complex algorithms to create \nsound granulation and other creative audio manipulations. pyo supports OSC \nprotocol (Open Sound Control), to ease communications between software, and \nMIDI protocol, for generating sound events and controlling process parameters. \npyo allows creation of sophisticated signal processing chains with all the \nbenefits of a mature, and widely used, general programming language.\n\nAvailable on Pypi: [Download wheels](https://pypi.org/project/pyo/).\n\n**For more information and documentation**, visit the \n[PYO DOCUMENTATION](https://belangeo.github.io/pyo/).\n\nHow to install pre-built packages on any platform using **pip**: \n[INSTALL Instructions](https://belangeo.github.io/pyo/download.html).\n    \nHow to get pyo running from sources on macOS and linux:\n[COMPILE Instructions](https://belangeo.github.io/pyo/compiling.html).\n\npyo was awarded **second prize** in the \n[Lomus 2012](http://concours.afim-asso.org/2012/) Free Software Competition.\n\n**You want to help the development of pyo ?** Go to the\n[pyo features market](https://github.com/belangeo/pyo/wiki/Pyo-features-market) \nand make a donation for the feature you want to promote. You can also submit new\nfeatures on the mailing-list ( https://github.com/belangeo/pyo/discussions ).\n\n## Radio Pyo ##\n\nIf you want to listen to scripts rendered in real-time, just connect to \n[Radio Pyo](http://radiopyo.acaia.ca/) !\n\nYou want to have your script played on the radio ? Download the template\n[radiopyo_template.py](https://github.com/tiagovaz/radiopyo/blob/master/utils/radiopyo_template.py),\nfollow the rules and post it on the mailing-list !\n\n## Software using Pyo as audio engine ##\n\n[Cecilia 5](https://github.com/belangeo/cecilia5) : An audio signal \nprocessing environment.\n\n[PsychoPy](http://www.psychopy.org/) : An open-source application to allow the \npresentation of stimuli and collection of data for a wide range of neuroscience, \npsychology and psychophysics experiments.\n\n[Soundgrain](https://github.com/belangeo/soundgrain) : \nA graphical interface where users can draw and edit trajectories to control \ngranular sound synthesis.\n\n[Zyne](https://github.com/belangeo/zyne) : A modular soft synthesizer.\n\n[Pyo Synth](https://github.com/alexandrepoirier/PyoSynth) : Pyo Synth is an open\nsource application that makes the manipulation of pyo scripts easier by letting\nyou control it with a midi keyboard. \n\n## Examples ##\n\npyo is fully integrated to Python and very simple to use.\n\nPlay a sound:\n\n```\n\u003e\u003e\u003e from pyo import *\n\u003e\u003e\u003e s = Server().boot()\n\u003e\u003e\u003e s.start()\n\u003e\u003e\u003e sf = SfPlayer(\"path/to/your/sound.aif\", speed=1, loop=True).out()\n```\n\nGranulate an audio buffer:\n\n```\n\u003e\u003e\u003e s = Server().boot()\n\u003e\u003e\u003e s.start()\n\u003e\u003e\u003e snd = SndTable(\"path/to/your/sound.aif\")\n\u003e\u003e\u003e env = HannTable()\n\u003e\u003e\u003e pos = Phasor(freq=snd.getRate()*.25, mul=snd.getSize())\n\u003e\u003e\u003e dur = Noise(mul=0.001, add=0.1)\n\u003e\u003e\u003e g = Granulator(snd, env, [1, 1.001], pos, dur, 24, mul=0.1).out()\n```\n\nGenerate melodies:\n\n```\n\u003e\u003e\u003e s = Server().boot()\n\u003e\u003e\u003e s.start()\n\u003e\u003e\u003e wav = SquareTable()\n\u003e\u003e\u003e env = CosTable([(0,0), (100,1), (500,.3), (8191,0)])\n\u003e\u003e\u003e met = Metro(.125, 12).play()\n\u003e\u003e\u003e amp = TrigEnv(met, table=env, mul=0.1)\n\u003e\u003e\u003e pit = TrigXnoiseMidi(met, dist='loopseg', x1=20, scale=1, mrange=(48,84))\n\u003e\u003e\u003e out = Osc(table=wav, freq=pit, mul=amp).out()\n```\n\n## Donation ##\n\nThis project is developed by Olivier Bélanger on his free time to provide a \nfully integrated Python dsp module for sound exploration and music composition. \nIf you feel this project is useful to you and want to support it and its \nfuture development please consider donating money. I only ask for a small \ndonation, but of course I appreciate any amount.\n\n[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1.0.0/dist/button.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=9CA99DH6ES3HA)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelangeo%2Fpyo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbelangeo%2Fpyo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelangeo%2Fpyo/lists"}