{"id":13434849,"url":"https://github.com/velipso/sndfilter","last_synced_at":"2025-04-05T01:06:27.239Z","repository":{"id":40259923,"uuid":"75751437","full_name":"velipso/sndfilter","owner":"velipso","description":"Algorithms for sound filters, like reverb, dynamic range compression, lowpass, highpass, notch, etc","archived":false,"fork":false,"pushed_at":"2024-06-23T13:09:20.000Z","size":76,"stargazers_count":455,"open_issues_count":6,"forks_count":69,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-03-29T10:06:59.004Z","etag":null,"topics":["compressor","filter","reverb","sound-effects","sound-processing"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/velipso.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}},"created_at":"2016-12-06T16:46:28.000Z","updated_at":"2025-03-17T14:40:36.000Z","dependencies_parsed_at":"2024-01-15T23:26:54.126Z","dependency_job_id":"4e944819-deea-4676-8d18-03f5b3b6e045","html_url":"https://github.com/velipso/sndfilter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/velipso%2Fsndfilter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/velipso%2Fsndfilter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/velipso%2Fsndfilter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/velipso%2Fsndfilter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/velipso","download_url":"https://codeload.github.com/velipso/sndfilter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247271528,"owners_count":20911587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compressor","filter","reverb","sound-effects","sound-processing"],"created_at":"2024-07-31T03:00:25.073Z","updated_at":"2025-04-05T01:06:27.221Z","avatar_url":"https://github.com/velipso.png","language":"C","readme":"\nsndfilter\n=========\n\nAlgorithms for sound filters, like reverb, dynamic range compression, lowpass, highpass, notch, etc.\n\nIt's easy to find countless math equations on sound filters, but a bit harder to find simple source\ncode.  This library is my attempt at cleaning up and presenting the math-heavy filter algorithms for\nthe programming community.\n\nPlease note that I favored simple code over fast code.  Hopefully it's made it more understandable.\n\n(0BSD License)\n\nBuild Instructions\n------------------\n\nThe `./build` script is a simple bash script that compiles the source files using `clang`.  It's\ndirt simple, [I promise](https://github.com/velipso/sndfilter/blob/master/build).\n\nSimply run `./build` and the executable should be `./tgt/sndfilter`.\n\n### C++ Support\n\nThis project is pure C, but I've left PRs open for those who want C++ support.  Check them out, they\nmight save you some time:\n\n* [C++ headers](https://github.com/velipso/sndfilter/pull/18)\n* [Meson build system support](https://github.com/velipso/sndfilter/pull/19)\n\nFilters\n-------\n\n* [Reverb](https://en.wikipedia.org/wiki/Reverberation) (Algorithmic)\n* [Compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression)\n* [Low-Pass](https://en.wikipedia.org/wiki/Low-pass_filter) (Cutoff, Resonance)\n* [High-Pass](https://en.wikipedia.org/wiki/High-pass_filter) (Cutoff, Resonance)\n* [Band-Pass](https://en.wikipedia.org/wiki/Band-pass_filter) (Frequency, Q)\n* [Notch/Band-stop](https://en.wikipedia.org/wiki/Band-stop_filter) (Frequency, Q)\n* [Peaking](https://en.wikipedia.org/wiki/Equalization_(audio)) (Frequency, Q, Gain)\n* [All-Pass](https://en.wikipedia.org/wiki/All-pass_filter) (Frequency, Q)\n* [Low Shelf](http://www.audiorecording.me/what-is-a-low-shelf-and-high-shelf-filter-in-parametric-equalization.html) (Frequency, Q, Gain)\n* [High Shelf](http://www.audiorecording.me/what-is-a-low-shelf-and-high-shelf-filter-in-parametric-equalization.html) (Frequency, Q, Gain)\n\nImplementation\n--------------\n\nThe [reverb.c](https://github.com/velipso/sndfilter/blob/master/src/reverb.c),\n[compressor.c](https://github.com/velipso/sndfilter/blob/master/src/compressor.c), and\n[biquad.c](https://github.com/velipso/sndfilter/blob/master/src/biquad.c) are the core\nalgorithms.\n\nI do not understand the biquad math, so please don't ask me any questions :-).  The core formulas\nwere extracted from\n[Biquad.cpp](https://github.com/nwjs/chromium.src/blob/df7f8c8582b9a78c806a7fa1e9d3f3ba51f7a698/third_party/WebKit/Source/platform/audio/Biquad.cpp)\n(Chromium source), and cleaned up a bit to make easier to read.\n\nThe compressor came from\n[DynamicsCompressorKernel.cpp](https://github.com/nwjs/chromium.src/blob/df7f8c8582b9a78c806a7fa1e9d3f3ba51f7a698/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp)\n(also from Chromium), and cleaned up a bit more.  I swapped out the adaptive release curve and\nsimplified the knee calculations.  I feel a little more comfortable with that algorithm because\nthere isn't a whole lot of magical math involved.\n\nThe reverb effect is a complete rewrite of [Freeverb3](http://www.nongnu.org/freeverb3/)'s\nProgenitor2 algorithm.  It took quite a lot of effort to tear apart the algorithm and rebuild\nit, but I'm pretty sure it's right.\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvelipso%2Fsndfilter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvelipso%2Fsndfilter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvelipso%2Fsndfilter/lists"}