{"id":13660576,"url":"https://github.com/enzienaudio/hvcc","last_synced_at":"2025-10-03T18:30:51.361Z","repository":{"id":41121391,"uuid":"145163362","full_name":"enzienaudio/hvcc","owner":"enzienaudio","description":"The heavy hvcc compiler for Pure Data patches.","archived":true,"fork":false,"pushed_at":"2023-10-13T08:42:14.000Z","size":2501,"stargazers_count":360,"open_issues_count":22,"forks_count":52,"subscribers_count":34,"default_branch":"master","last_synced_at":"2024-09-29T16:41:08.337Z","etag":null,"topics":["compiler","enzien","enzienaudio","pd","puredata","python","python27"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/enzienaudio.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}},"created_at":"2018-08-17T20:23:29.000Z","updated_at":"2024-09-28T17:49:43.000Z","dependencies_parsed_at":"2024-01-14T17:04:46.009Z","dependency_job_id":"dc0cc87e-c3ef-4095-91df-e88a81f16f0e","html_url":"https://github.com/enzienaudio/hvcc","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/enzienaudio%2Fhvcc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzienaudio%2Fhvcc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzienaudio%2Fhvcc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzienaudio%2Fhvcc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enzienaudio","download_url":"https://codeload.github.com/enzienaudio/hvcc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235173147,"owners_count":18947449,"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":["compiler","enzien","enzienaudio","pd","puredata","python","python27"],"created_at":"2024-08-02T05:01:23.234Z","updated_at":"2025-10-03T18:30:45.740Z","avatar_url":"https://github.com/enzienaudio.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Heavy Compiler Collection (hvcc)\n\n`hvcc` is a python-based dataflow audio programming language compiler that generates C/C++ code and a variety of specific framework wrappers.\n\n#### IMPORTANT!\nThis repo is no longer maintained. Please see [Wasted-Audio's hvcc fork](https://github.com/Wasted-Audio/hvcc) for future development and support.\n\n## Background\n\nThe original need for `hvcc` arose from running against performance limitations while creating interactive music and sound products for the iPhone. [Pure Data](https://puredata.info) (libpd) was the only real choice for a design tool as it was embeddable and provided a high enough abstraction level that musicians or sound designers could be creative.\n\nThe goal was to leverage Pure Data as a design interface and statically interpret the resultant patches to generate a low-level, portable and optimised C/C++ program that would be structured to take advantage of modern hardware whilst still generating the same behaviour and audio output as Pure Data.\n\nIt has since then been expanded to provide further support for many different platforms and frameworks, especially targeting game audio production tools.\n\n## Requirements\n\n* python 2.7\n    - `enum` (for error reporting)\n    - `jinja2` (for generator templating)\n    - `nose2` (for tests, optional)\n\n## Installation\n\n`$ git clone https://github.com/enzienaudio/hvcc.git`\n\n`$ cd hvcc/`\n\n`$ pip2.7 install -r requirements.txt`\n\n## Usage\n\n`hvcc` requires at least one argument that determines the top-level patch file to be loaded.\n\nGenerate a C/C++ program from `input.pd` and place the files in `~/myProject/`\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd`\n\nThis command will generate the following directories:\n\n* `~/myProject/hv` heavylang representation of the input pd patch(es)\n* `~/myProject/ir` heavyir representation of the heavylang patch\n* `~/myProject/c` final generated C/C++ source files (this is what you would use in your project)\n\n### `-o` Select output directory\n\nAs seen in the above command, typical output of `hvcc` is split into several directories that contain the intermediate files used by the compiler itself, the final generated source files, and any additional framework specific files and projects.\n\nThe `-o` or `--out_dir` parameter will specify where the output files are placed after a successful compile.\n\nFor example:\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/`\n\nWill place all the generated files in `~/Desktop/somewhere/else/`.\n\n### `-n` Specify Patch Name\n\nThe `-n` or `--name` parameter can be used to easily namespace the generated code so that there are no conflicts when integrating multiple patches into the same project.\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/ -n mySynth`\n\n### `-g` Generators\n\nOnce `hvcc` has generated internal information about the patch the `-g` or `--gen` parameter can be used to specify the output files it should generate. By default it will always include `c` for the C/C++ source files and additional generators can specified for certain framework targets.\n\nFor example:\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/ -n mySynth -g unity`\n\nWill also generate a `unity` section in the output directory contain all the build projects and source files to compile a Unity plugin.\n\nIt is also possible to pass a list of generators:\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/ -n mySynth -g unity wwise js`\n\nAvailable generator options:\n\n* `c`\n* `bela`\n* `fabric`\n* `js`\n* `pdext`\n* `unity`\n* `vst2`\n* `wwise`\n\n\n### `-p` Search Paths\n\n`hvcc` will iterate through various directories when resolving patch objects and abstractions. The `-p` or `--search_paths` argument can be used to add additional folders for `hvcc` to look in.\n\nThis can be handy when using a third-party patch library for example https://github.com/enzienaudio/heavylib.\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/ -n mySynth -p \"[~/Workspace/Projects/Enzien/heavylib/, ~/Desktop/myLib/]\"`\n\n### `--copyright` User Copyright\n\nBy default all the generated source files via `hvcc` will have the following copyright text applied to the top of the file:\n\n`Copyright (c) 2018 Enzien Audio, Ltd.`\n\nThis can be changed with `--copyright` parameter\n\n`$ python2.7 hvcc.py ~/myProject/_main.pd -o ~/Desktop/somewhere/else/ -n mySynth --copyright \"Copyright (c) Los Pollos Hermanos 2019\"`\n\n### `--help`\n\nDisplays all the available parameters and options for hvcc.\n\n## Documentation\n\n* [Introduction](/docs/01.introduction.md)\n  - [What is heavy?](/docs/01.introduction.md#what-is-heavy)\n  - [Supported patch formats](/docs/01.introduction.md#supported-patch-formats)\n  - [Supported platforms](/docs/01.introduction.md#supported-platforms)\n  - [Supported frameworks](/docs/01.introduction.md#supported-frameworks)\n  - [Licensing](/docs/01.introduction.md#licensing)\n* [Getting Started](/docs/02.getting_started.md)\n* [Unity](/docs/05.unity.md)\n* [Wwise](/docs/06.wwise.md)\n* [Javascript](/docs/07.javascript.md)\n* [VST](/docs/08.vst.md)\n* [MIDI](/docs/09.midi.md)\n* [C API](/docs/10.c.md)\n* [C++ API](/docs/11.cpp.md)\n* [Heavy Lang Info](/docs/12.heavy_lang.md)\n* [Heavy IR Info](/docs/13.heavy_ir_lang.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzienaudio%2Fhvcc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenzienaudio%2Fhvcc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzienaudio%2Fhvcc/lists"}