Skip to content

Commit

Permalink
Merge branch 'release/v0.13.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
dromer committed Dec 30, 2024
2 parents cd6e41a + b103817 commit ac87fbf
Show file tree
Hide file tree
Showing 182 changed files with 4,514 additions and 3,199 deletions.
8 changes: 6 additions & 2 deletions .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
[bumpversion]
current_version = 0.10.0
current_version = 0.13.1

[bumpversion:file:setup.cfg]
[bumpversion:file:pyproject.toml]
search = {current_version}

[bumpversion:file:CHANGELOG.md]
search = Next Release

[bumpversion:file:hvcc/version.py]
search = {current_version}
35 changes: 30 additions & 5 deletions .github/workflows/build.yml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ on:
branches: [ develop ]

jobs:
build:

test:
runs-on: ubuntu-20.04
strategy:
matrix:
Expand All @@ -21,18 +21,43 @@ jobs:
- name: Initialize lfs
run: git lfs pull
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox tox-gh-actions
python -m pip install --upgrade pip setuptools wheel
pip install -U tox tox-gh-actions poetry
- name: Run tox
run: tox

build:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
lfs: true
submodules: true
- name: Initialize lfs
run: git lfs pull
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install poetry poetry-pyinstaller-plugin
- name: Build binaries
run: poetry build

- uses: actions/upload-artifact@v4
with:
name: heavy-binary-linux-x86_64
path: dist/pyinstaller/manylinux_2_31_x86_64/Heavy

dispatch:
needs: build
needs: test
strategy:
matrix:
repo: ['Wasted-Audio/hvcc-examples-dpf', 'Wasted-Audio/hvcc-examples-js']
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ coverage.xml
.pytest_cache/
cover/

# Unit test output
tests/src/create_test_midi

# Translations
*.mo
*.pot
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "tests/src/midifile"]
path = tests/src/midifile
url = https://github.com/craigsapp/midifile.git
[submodule "tests/src/tinywav"]
path = tests/src/tinywav
url = https://github.com/mhroth/tinywav.git
84 changes: 84 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,90 @@
CHANGELOG
=====

0.13.1
-----

Bugfixes:

* Intermediate Result performance counter
* OWL: MIDI Aftertouch fixes; Context name fix

Refactor:

* split `__init__.py` in to separate main and compiler sections
* CI: install tox requirements via poetry

0.13.0
-----

Features:

* Migrating to poetry for project management
* Standalone binary (only Linux for now)
* DPF: Allow modgui on desktop
* DPF: Enable host transport events without midi input
* JS: midi out and device select by @Reinissance
* Docs: general updates/corrections and improvements
* Allow loading external generator python module @eu-ch
* Meta: additional global setting to automatically set `HV_SIMD_NONE`
* Add version info to cli and IR result.

Bugfixes:

* Daisy template newline

Typing:

* HeavyLang and HeavyIR objects
* Compiler results
* Extern info
* Heavy IR Graph

0.12.1
-----

Features:

* Only disable DSP with new `--nodsp` flag
* Use pydantic types to define metadata objects
* DPF: CV flag in portgroups
* DPF: flag to disable scoped denormals

Bugfixes:

* wwise: allow Bang messages in OnSendMessageCallback()
* Improve `[cos~]` precision.

0.12.0
-----

* Core: parse remote/send messages
* Core: MIDI i/o added to memoryPool
* Core: support `[else/knob]` as `[float]`
* Daisy: set heavy context after hw.init()
* OWL: add Polytouchin and Polytouchout
* JS: webmidi input
* Docs: add instructions for loading custom samples in JS
* Small Bugfixes:
* MIDI out objects in output Paremeters
* JS: AudioWorklet fillTableWithFloatBuffer

0.11.0
-----

* Core: add attributes and send type to send params
* DPF: add "read only" outputParameter type based on send params
* JS: add output Parameter and output Event to generator and html template
* Daisy: update `wstd2daisy` and allow for setting `displayprocess` code into the template
* Testing: move `tinywav` to git submodule
* JS Bugfix: printHook and sendHook for AudioWorklet; mention emsdk limitations in docs
* Object Bugfix: `[stripnote]` missing right inlet
* Small Bugfixes:
* set default name argument
* `emcc` call on Windows - thanks to @vulcu
* deallocation in test_signal - thanks to @eu-ch
* quotes around WWISE paths - thanks to @eu-ch

0.10.0
-----

Expand Down
26 changes: 15 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,25 @@ It has since then been expanded to provide further support for many different pl

hvcc has been integrated into several projects and services. This allows to easily compile patches without having to install hvcc manually.

* [plugdata](https://plugdata.org/) - a new way to use Pure Data. Includes a full toolchain and targets Daisy, DPF and pd externals.
* [mod-cloud-builder](https://github.com/moddevices/mod-cloud-builder) - An online service for building LV2 plugins for the MOD platform.
* [OWL Patch Library](https://www.rebeltech.org/patch-library) - An online service for building OWL plugins (uses an old fork).
* [plugdata](https://plugdata.org/) - Modern interface for Pure Data. Includes a full cross-platform toolchain and targets Daisy, DPF and PD Externals.
* [mod-cloud-builder](https://github.com/moddevices/mod-cloud-builder) - Online service for building LV2 plugins for the MOD platform.
* [OWL Patch Library](https://www.rebeltech.org/patch-library) - Online service for building OWL plugins (uses an old fork).

## Requirements

python 3.8 until 3.12
Python 3.8 up to 3.12

* `jinja2` (for generator templating)
* `importlib_resources` (for reading static resources)
* `json2daisy` (for daisy integration)
* `tox` (for tests, optional)
* `numpy/scipy` (for tests, optional)
* `midifile` (for tests, optional)
* `clang/clang++` (for building tests, optional)
* `jinja2` (for generator templating)
* `importlib_resources` (for reading static resources)
* `json2daisy` (for daisy integration)

For tests:

* `tox` (python install)
* `numpy/scipy` (requirements-dev)
* `midifile` (git submodule)
* `tinywav` (git submodule)
* `clang/clang++` (system install)

## Installation

Expand Down
7 changes: 5 additions & 2 deletions docs/02.getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ See the specific framework details for more information on output parameter supp

## Exposing Events

All (control) `[receive]` and `[r]` objects annotated with `@hv_event` will be exposed as events in the Unity target only.
All (control) `[receive]` and `[r]` objects annotated with `@hv_event` will be exposed as events in the Unity and Javascript targets only.

![events](img/docs_exposed_events.png)

Expand Down Expand Up @@ -100,6 +100,9 @@ This list will be continuously epanded to document differences in object behavio
* Sliders and number inputs are converted to `[f ]` and thus do not store send/receive/initialization/etc. settings.
* Heavy does not accept arguments and control connections to: `[rzero~]`, `[rzero_rev~]`, `[czero~]`, `[czero_rev~]`. In Heavy, these objects accept only signal inputs. Arguments and control connections are ignored.
* On the `[select]` object it is currently not possible to set the arguments via the right inlet (internally a hardcoded switch_case is used).
* Heavy supports remote/send messages, however empty messages are currently removed. So the typical `[; bla 1(` multiline message needs to contain at least something on the first line: `[_; bla 1(`.
* Remote/send messages with `sinesum` argument to fill tables are not supported.
* `[metro]` and `[timer]` objects do not accept tempo messages or unit arguments.
* Certain filters are sensitive to ‘blowing up’ at very low or very high cutoff frequencies and/or resonances, due to the filter coefficients not being perfectly represented with a finite number of bits. While Pure data natively uses 64 bits, platforms like `OWL` and `Daisy` that use 32 bit float are more sensitive to this. For example, the Pure data `[lp~]`, `[bp~]` and `[hp~]` filters are implemented with biquads which are prone to fail or distort with cutoff frequencies less than around 200 Hz (at 48kHz sample rate).
* `[snapshot~]` does not respond within the same control flow as it executes in signal context. Its output happens on the next audio cycle, so additional care for this control flow needs to be taken into account if you depend on synchronous execution. It also doesn't accept `[set(` messages.
* Certain filters are sensitive to ‘blowing up’ at very low or very high cutoff frequencies and/or resonances, due to the filter coefficients not being perfectly represented with a finite number of bits. While Pure data natively uses 64 bits, platforms like `OWL` and `Daisy` that use 32 bit float are more sensitive to this. For example, the Pure data `[bp~]` filter is implemented with a biquad which is prone to fail or distort with cutoff frequencies less than around 200 Hz (at 48kHz sample rate).
* Heavy does not support multichannel connections.
4 changes: 1 addition & 3 deletions docs/03.gen.daisy.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,18 @@ Daisy is an embedded platform for music. It features everything you need for cre

Currently daisy platform is supported for:

* `seed`
* `pod`
* `petal`
* `patch`
* `patch_init`
* `patch_sm`
* `field`

Which can be configured using the `-m` metadata.json `daisy.board` setting:

```json
{
"daisy": {
"board": "seed"
"board": "pod"
}
}
```
Expand Down
46 changes: 37 additions & 9 deletions docs/03.gen.dpf.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,44 @@ In order to receive MIDI note on and off events, as well as control change messa

DPF supports all note/ctl/pgm/touch/bend I/O events. The implementation is further discussed in the [midi docs](04.midi.md)

We can also use `[midirealtimein]` to receive realtime midi messages like clock/start/continue/stop/reset (no active sense). It is up to the user to create the appropriate handling inside the patch.
![notein](img/docs_notein.png)

Additionally you can use the special `[r __hv_dpf_bpm]` receiver to get the current transport BPM value directly.
## Host Transport Events

![notein](img/docs_notein.png)
We can use `[midirealtimein]` to receive host transport events in the form of realtime midi messages like clock/start/continue/stop/reset (no active sense). It is up to the user to create the appropriate handling inside the patch.

This object does not require the plugin to have MIDI input enabled.

Additionally you can use the special `[r __hv_dpf_bpm]` receiver to get the current transport BPM value directly.

## Parameter Types

In DPF a parameter can get an optional type configured. The default type is `float`. Other assignable types are `bool` - for toggling a value - and `trig` - for momentary signals.
In DPF a parameter can get an optional type configured. The default type is `float`.

Other assignable types are `int` - or whole numbers, `bool` - for toggling a value, and `trig` - for momentary signals.

![dpf](img/docs_param_type.png)

Using jinja the `v.attributes.type` can be evaluated for a specific string and different templating applied to the parameter. In DPF the extra types `bool` and `trig` result in the following plugin code:

```c++
parameter.hints = kParameterIsAutomable | kParameterIsBoolean;
parameter.hints = kParameterIsInteger
// or
parameter.hints = kParameterIsAutomable | kParameterIsTrigger;
parameter.hints = kParameterIsBoolean;
// or
parameter.hints = kParameterIsTrigger;
```

Other special types can give additional information to the host:

* `dB` - unit `dB` - min_value `-inf` label (assumes `0.0f`)
* `Hz` - unit `Hz`
* `log` - hints `kParameterIsLogarithmic`
* `log_hz` - unit `Hz` - hints `kParameterIsLogarithmic`

## Metadata

An accomponying metadata.json file can be included to set additional plugin settings.
An accompanying metadata.json file can be included to set additional plugin settings.

The `project` flag creates a `README.md` and `Makefile` in the root of the project output, but may conflict with other generators.

Expand All @@ -55,7 +70,7 @@ Each of these are optional and have either a default value or are entirely optio
"midi_input": 1,
"midi_output": 0,
"plugin_formats": [
"lv2_dsp",
"lv2_sep",
"vst2",
"vst3",
"clap",
Expand All @@ -67,7 +82,7 @@ Each of these are optional and have either a default value or are entirely optio

Other fields that the DPF metadata supports are:

* `port_groups` - If your plugin has more audio i/o that need to be grouped together.
* `port_groups` - If your plugin has more audio i/o that need to be grouped together or given Control Voltage status
* `enumerators` - Configure a set of parameters that cycle over `<key>: <value>`
* `enable_ui` - Boolean that creates a generic GUI. Requires `dpf-widgets` on the same level as `dpf`.
* `enable_modgui` - Boolean for use in MOD audio based systems.
Expand All @@ -77,6 +92,19 @@ Other fields that the DPF metadata supports are:
* `vst3_info` - String describing the VST3 plugin type.
* `clap_info` - List of strings describing the CLAP plugin type.

You can also fully disable SIMD optimizations using the global `nosimd` flag:

```json
{
"nosimd": true,
"DPF": {
...
}
}
```

The full type specification can be found [here](https://github.com/Wasted-Audio/hvcc/blob/develop/hvcc/types/meta.py).

An example plugin that uses some of these extended metadata is [WSTD 3Q](https://github.com/Wasted-Audio/wstd-3q).

## Notes
Expand Down
Loading

0 comments on commit ac87fbf

Please sign in to comment.