{"id":50857654,"url":"https://github.com/ben-wes/pd-simplex","last_synced_at":"2026-06-14T19:04:10.674Z","repository":{"id":226958888,"uuid":"770051656","full_name":"ben-wes/pd-simplex","owner":"ben-wes","description":"Pure Data (Pd) external for signal and control rate simplex noise sampling with 1d, 2d, 3d and 4d input","archived":false,"fork":false,"pushed_at":"2025-08-02T19:04:40.000Z","size":9564,"stargazers_count":5,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-30T05:18:06.123Z","etag":null,"topics":["audio","noise","puredata","simplex","sound","synthesis"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ben-wes.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":"2024-03-10T19:32:05.000Z","updated_at":"2025-09-01T14:05:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"173760b3-5663-487c-bf29-bf126fa50537","html_url":"https://github.com/ben-wes/pd-simplex","commit_stats":null,"previous_names":["ben-wes/simplex3d-","ben-wes/simplex","ben-wes/pd-simplex"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/ben-wes/pd-simplex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-simplex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-simplex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-simplex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-simplex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ben-wes","download_url":"https://codeload.github.com/ben-wes/pd-simplex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-simplex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34333876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"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","noise","puredata","simplex","sound","synthesis"],"created_at":"2026-06-14T19:04:10.026Z","updated_at":"2026-06-14T19:04:10.667Z","avatar_url":"https://github.com/ben-wes.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# simplex\nPure Data (Pd) externals for signal and control rate simplex noise sampling with 1d, 2d, 3d and 4d input (signal version supporting multichannel support)\n\nThe current version's noise implementation is based on https://github.com/stegu/perlin-noise/blob/master/src/sdnoise1234.c by Stefan Gustavson.\n\n![simplex~-help.pd screenshot](simplex%7E-help.pd.png)\n\n![simplex-help.pd screenshot](simplex-help.pd.png)\n\n## Build and Installation Instructions\nTo compile and install, follow these steps. Note that [Makefile.pdlibbuilder](https://github.com/pure-data/pd-lib-builder/) is included as submodule, requiring the `--recursive` parameter.\n~~~\ngit clone --recursive https://github.com/ben-wes/pd-simplex.git\ncd pd-simplex\nmake install\n~~~\n\n## Usage (simplex~)\n### Inlets and Outlets\n* **1st inlet:** expects a multichannel signal with up to 4 dimensions for the noise sampling position (the noise algorithm, and hence its performance, is determined by the number of channels)\n* **2nd inlet:** can be used to control the persistence value with a signal or float inputs\n* **outlet:** outputs the sampled noise value at signal rate\n\n### Creation Arguments\n#### Optional flags\n* `-n` flag activates normalization of the octaves' sum to keep values in the [-1..1] range\n* `-s \u003cint\u003e` flag initializes the noise's permutation table with a given seed\n* `-d` flag activates derivatives multichannel output on additional 2nd outlet\n* `-dim \u003cint\u003e` flag switches to single-channel mode with given dimension count\n\n#### Optional numerical arguments (must be written after the flags)\n* **first arg** sets the number of octaves (defaults to `1`, max. is `1024`)\n* **second arg** sets initial persistence (defaults to `0.5`) \n\n### Messages\n* `[seed \u003cint\u003e(` generates different (deterministic) permutation tables for the simplex function\n* `[normalize 0/1(` (de)activates normalization (off by default)\n* `[octaves \u003cint\u003e(` dynamically changes the number of octaves\n* `[persistence \u003cfloat\u003e(` sets persistence (while no signal is connected)\n* `[coeffs \u003cfloat\u003e \u003cfloat\u003e ... \u003cfloat\u003e(` let's you customize the octave scaling (default is `1, 2, 4, ...`) \n\n---\n\n## Additional Information\n### Octaves\nIn case of more than 1 octave, additional noise octaves get sampled, i.e., downscaled instances of the noise space (higher noise frequencies) are added. This downscaling is achieved by multiplying the sampling coordinate with `2^(octave-1)` - for example:\n* input `(1, -3)` samples from `2*(1, -3) = (2,  -6)` for 2nd octave\n* input `(1, -3)` samples from `4*(1, -3) = (4, -12)` for 3rd octave\n\n### Persistence\nThe persistence value determines the influence of successive octaves on the final output. It is a multiplier applied to each octave’s amplitude. Lower persistence values cause the amplitudes to decrease rapidly with each octave, leading to a smoother noise pattern. Conversely, higher persistence values maintain stronger amplitudes in higher octaves, resulting in more detailed and rougher (high frequency) patterns - for example:\n* persistence of `0.5` yields octaves' amplitudes `1, 0.5, 0.25, 0.125, 0.0625, ...`\n* persistence of `0.9` yields octaves' amplitudes `1, 0.9, 0.81, 0.729, 0.6561, ...`\n\n### Normalization\nIf normalization is activated (via creation argument or message), the sum of all octaves' amplitudes is normalized to 1.\n\n---\n\n## History\n\nThe initial code of this external was an experiment generated with ChatGPT4. The fascinating part of this was, that with a few feedback cycles (feeding errors back to it), it managed to create a working Pd external. After some more research around simplex noise, the noise algorithm of the external turned out to be a pretty exact copy of [this SimplexNoise.cpp](https://github.com/SRombauts/SimplexNoise/blob/master/src/SimplexNoise.cpp) though (including variable names and comments). Later versions were completely revised manually though.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-wes%2Fpd-simplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fben-wes%2Fpd-simplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-wes%2Fpd-simplex/lists"}