{"id":42844092,"url":"https://github.com/transcriptaze/sn-vcv","last_synced_at":"2026-01-30T11:55:10.579Z","repository":{"id":207115674,"uuid":"718426658","full_name":"transcriptaze/sn-vcv","owner":"transcriptaze","description":"VCV modules for the sn experimental additive synthesizer","archived":false,"fork":false,"pushed_at":"2024-04-09T02:22:51.000Z","size":4971,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-09T03:21:25.103Z","etag":null,"topics":["audio","vcv","vcv-rack","vcv-rack-modules","vcv-rack-plugins"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/transcriptaze.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2023-11-14T03:36:43.000Z","updated_at":"2024-04-09T03:21:26.611Z","dependencies_parsed_at":"2023-12-03T04:22:56.153Z","dependency_job_id":"69d4d1bf-ff72-4971-baf1-9ff5b5391708","html_url":"https://github.com/transcriptaze/sn-vcv","commit_stats":null,"previous_names":["transcriptaze/sn-vcv"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/transcriptaze/sn-vcv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transcriptaze%2Fsn-vcv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transcriptaze%2Fsn-vcv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transcriptaze%2Fsn-vcv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transcriptaze%2Fsn-vcv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transcriptaze","download_url":"https://codeload.github.com/transcriptaze/sn-vcv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transcriptaze%2Fsn-vcv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28912143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T08:15:08.179Z","status":"ssl_error","status_checked_at":"2026-01-30T08:14:31.507Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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"}},"keywords":["audio","vcv","vcv-rack","vcv-rack-modules","vcv-rack-plugins"],"created_at":"2026-01-30T11:55:09.910Z","updated_at":"2026-01-30T11:55:10.573Z","avatar_url":"https://github.com/transcriptaze.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"![build](https://github.com/transcriptaze/sn-vcv/workflows/build/badge.svg)\n\n# sn\n\nA set of [VCV Rack 2](https://vcvrack.com/Rack) plugins for the _sn_ experimental additive synthesizer which\nuses the _sn_ function as the generator function instead of the more usual _sine_. The modules comprise:\n- a _stackable_ VCO, which generates an audio signal with a smoothly adjustable waveshape\n- a _stackable_ LFO, which generates a low frequency control voltage signal with a smoothly adjustable waveshape.\n\n\u003cimg width=\"96\" src=\"documentation/images/sine.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/square.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/triangle.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/sawtooth.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/spike.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/bumps.png\"\u003e \u003cimg width=\"96\" src=\"documentation/images/wonky.png\"\u003e\n\nThe modules don't do anything particuarly radical but are an interesting way to add subtle variations to a sound. \ne.g. the [Greensleeves](#greensleeves) demo is an example of using the _sn-vco_ to add some tonal interest to an\notherwise fairly plain rendering.\n\n### Contents\n\n- [Background](#background)\n- [Modules](#modules)\n- [Manual](/documentation/MANUAL.md)\n   - [sn-vco](/documentation/MANUAL.md#sn-vco)\n   - [sn-vcox](/documentation/MANUAL.md#sn-vcox)\n   - [sn-lfo](/documentation/MANUAL.md#sn-lfo)\n   - [sn-lfox](/documentation/MANUAL.md#sn-lfox)\n- [Demos](#demo-patches)\n   - [Basic operation](#basic-operation)\n   - [Greensleeves](#greensleeves)\n   - [Toccata in Dm](#toccata-in-dm) \n- [Acknowledgements](#acknowledgements)\n- [License](#license)\n\n\n### Background\n\nMathematically a _sine_ function is a special case of the Jacobi elliptic _sn_ function (in the same way that\na circle is a special case of an ellipse). The _sn_ VCV modules use the _sn_ function rather than the\n_sine_ function to generate harmonically rich waveforms that are also continuous and differentiable.\n\nBy modifying the parameters of the _sn_ function it is possible to smoothly morph between a sine wave,\na square (well, square'ish) wave, a triangular'ish wave and a sawtooth. There is a [web app](https://snyth.pages.dev)\nwhich may make this a bit clearer than this umm, very extremely brief explanation, and there is a little\nmore detail [here](https://github.com/transcriptaze/snyth) if you're really curious.\n\n\n### Parameters\n\nThe modules share a common set of parameters that determine the wave shape:\n\n| Parameter | Range | Name           | Description                                                     |\n|-----------|-------|----------------|-----------------------------------------------------------------|\n| _ε_       | ±1    | _eccentricity_ | Sets the _eccentricity_ of the _sn_ generator function          |\n| _s_       | 0-5   | _sensitivity_  | Fine adjust for the _eccentricity_ set by the _ε_ control       |\n| _θ_       | ±90°  | _rotation_     | Sets the rotation angle of he _sn_ generator function           |\n| _a_       | 0-1   | _amplitude_    | Sets the amplitude of the harmonic component                    |\n| _δx_      | ±1    | _shift-x_      | Sets the horizontal shift of the _sn_ generator function        |\n| _δy_      | ±1    | _shift-y_      | Sets the vertical shift of the _sn_ generator function          |\n| _Φ_       | ±90°  | _phase_        | Adjust the phase offset of a harmonic (LFO only)                |\n| _m_       | 1-5   | _multiplier_   | Base frequency multiplier                                       |\n\n## Installation\n\n### VCV Rack Library\n\nThe _sn_ modules are available in the _VCV Rack 2_ library:\n\nhttps://library.vcvrack.com/?brand=sn\n\nInstallation instructions are the same as for any library module and can be found at the bottom of the page or in the\n[Installing Rack plugins](https://vcvrack.com/manual/Installing#Installing-Rack-plugins) section of the _VCV Rack 2_\nmanual.\n\n\n### Manual\n\n1. Download the _zip_ file for your platform from the [Releases](https://github.com/transcriptaze/sn-vcv/releases)\n   section.\n\n2. Unzip the downloaded file and copy the unzipped plugin to the _VCV Rack 2_ plugins directory:\n   - MacOS + Intel: `~/Documents/Rack2/plugins-mac-x64/`\n   - MacOS + ARM: `~/Documents/Rack2/plugins-mac-arm/`\n   - Linux: `~/.Rack2/plugins-lin-x64/`\n   - Windows: `My Documents/Rack2/plugins-win-x64/`\n\n3. Restart _VCV Rack 2_ and the plugins should be available in the library.\n\n_See also:_\n\n1. [Installing plugins not available on the VCV Library](https://vcvrack.com/manual/Installing)\n2. [FAQ: Where is the “Rack user folder”?](https://vcvrack.com/manual/FAQ#where-is-the-rack-user-folder)\n\n\n### Building from source\n\n1. Install the [VCV Rack SDK](https://vcvrack.com/manual/Building)\n\n2. Set the [RACK_DIR](https://vcvrack.com/manual/PluginDevelopmentTutorial) environment variable:\n```\nexport RACK_DIR=\u003cRack SDK folder\u003e\n```\n\n3. Build and install the _sn-xxx_ plugins:\n```\ngit clone https://github.com/transcriptaze/sn-vcv.git\ncd sn\nmake\n```\n\n## Modules\n\n### [sn-vco](/documentation/MANUAL.md#sn-vco)\n\n_sn-vco_ is a more-or-less standard VCO module except that it produces a _sn_ output rather than a _sine_\nwhich (as described above), allows the waveshape to be morphed between a sine, square, triangular and sawtooth\nwave. \n\n### [sn-vcox](/documentation/MANUAL.md#sn-vcox)\n\n_sn-vcox_ is an expander module for the _sn-vco_ module that adds a harmonic component to the output of \n_sn-vco_. Multiple expanders can be stacked to create a waveform using harmonics and/or variations.\n\n### [sn-lfo](/documentation/MANUAL.md#sn-lfo)\n\n_sn-lfo_ is a more or less standard LFO module except that it produces a _sn_ output rather than a _sine_,\nallowing the waveshape to be morphed between a sine, square, triangular and sawtooth wave and pretty much\neverything in between. Although it can be used on its own, the module is really intended to be used as\nthe base for stacked _sn-lfox_ expanders. \n\n### [sn-lfox](/documentation/MANUAL.md#sn-lfox)\n\n_sn-lfox_ is an expander module for the _sn-lfo_ module that adds a harmonic wave to the output of _sn-lfo_.\nMultiple expanders can be stacked to create a waveform using harmonics and/or variations.\n\n## Demo Patches\n\n### Basic operation \n\nThe basic patches have been kept as simple as possible and require only the _VCV Fundamental_ modules included\nwith _VCV Rack 2_. They are mostly intended just to demonstrate the basic setup and operation of the modules rather\nthan as shining examples of the art of synthesis.\n\n#### [sn-vco](/documentation/patches/sn-vco.vcv)\n\nHooks up 3 standard LFOs to a single _sn-vco_ module to demonstrate the basic waveshaping operation of the\n_sn-vco_ module. \n\nThe patch connects three standard LFOs to _ε_, _δx_ and _δy_ inputs of a single _sn-vco_ module to output a\ncontinuously varying waveform. Not very inspired and sounds pretty bland but should (hopefully) give some\nidea of the operation of the module.\n\n\n#### [sn-vcox](/documentation/patches/sn-vcox.vcv)\n\nExtends the basic _sn-vco_ patch with two _sn-vcox_ expanders stacked on to the _sn-vco_ module.\n\nThree independent LFOs are used to drive the parameter inputs of the _sn-vco_ module and _sn-vcox_ \nexpanders so that the resulting waveform is the sum of three more or less independent harmonics, each\nof which is shape-shifting in its own particular way. A little more interesting than just the basic\n_sn-vco_ patch but it's not going to win any awards.\n\n\n#### [sn-lfo](/documentation/patches/sn-lfo.vcv)\n\nReplaces the LFOs in the basic _sn-vco_ patch with three independent _sn-lfo_ modules each with its own\nwaveform. The effect is to make the _sn-vco_ output morph in some weird and unexpected ways - most of\nwhich don't sound good but at least a bit more perk-up-your-ears interesting.\n\n\n#### [*sn-lfox*](/documentation/patches/sn-lfox.vcv)\n\nReplaces the independent LFOs in the basic _sn-lfo_ patch with an _sn-lfo_ module and two stacked \n_sn-lfox_ expanders for a slightly different effect. Oddly ambient'ish in a way .. maybe with some\nreverb ..\n\n\n### MIDI\n\nThe MIDI demos are more complex patches that use the _sn-xxx_ modules in combinations to render MIDI files\nof complete songs.\n\n#### [Greensleeves](/documentation/patches/greensleeves.vcv)\n\nRelatively simple arrangement of Greensleeves using a stack of _sn-vco_ and _sn-vcox_ modules for the VCO\naudio generator and a stack of _sn-lfo_ and _sn-lfox_ LFOs to continuously vary the waveshape, volume and\nADSR envelope. A lot of the credit has to go to the _SurgeXT Reverb2_ which adds some much needed depth to\nthe rendering.\n\nRequires:\n- [_Impromptu Clocked_](https://library.vcvrack.com/ImpromptuModular/Clocked)\n- [_Entrian Player Melody_](https://library.vcvrack.com/Entrian-Free/Player-Melody)\n- [_Mindmeld EQMaster_](https://library.vcvrack.com/MindMeldModular/EqMaster)\n- [_SurgeXT Reverb2_](https://library.vcvrack.com/SurgeXTRack/SurgeXTFXReverb2)\n\n[![YouTube](https://img.youtube.com/vi/D5CsH6UzfaU/hqdefault.jpg)](https://www.youtube.com/watch?v=D5CsH6UzfaU)\n\n\n#### [Toccata in Dm](/documentation/patches/toccata.vcv)\n\nA somewhat more ambitious patch that uses the _sn-lfo/x_ plugins to modulate just about every CV it can reach.\nThe result is a rendering where pretty much everything is changing all of the time - seldom dramatically but\nenough to be interesting. Starting from halfway decent source material didn't hurt either :-).\n\nRequires:\n- [_Impromptu Clocked_](https://library.vcvrack.com/ImpromptuModular/Clocked)\n- [_Entrian Player Melody_](https://library.vcvrack.com/Entrian-Free/Player-Melody)\n- [_Mindmeld EQMaster_](https://library.vcvrack.com/MindMeldModular/EqMaster)\n- [_SurgeXT Reverb2_](https://library.vcvrack.com/SurgeXTRack/SurgeXTFXReverb2)\n\n[![YouTube](https://img.youtube.com/vi/PuENu5rqdfk/hqdefault.jpg)](https://www.youtube.com/watch?v=PuENu5rqdfk)\n\n\n## Acknowledgements\n\nFor beta testing:\n\n- [Alessandro Paglia](https://community.vcvrack.com/u/ale47p/summary)\n- [kleat](https://community.vcvrack.com/u/sounds/summary)\n\n\n## License\n\nThe source code and panel files are licensed under [Gnu General Public License v3](/LICENSE). \n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftranscriptaze%2Fsn-vcv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftranscriptaze%2Fsn-vcv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftranscriptaze%2Fsn-vcv/lists"}