Skip to content

Commit

Permalink
merge conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
dromer committed Feb 10, 2024
2 parents 7ba367c + 99343d6 commit 41367a4
Show file tree
Hide file tree
Showing 99 changed files with 1,662 additions and 3,636 deletions.
2 changes: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.9.0
current_version = 0.10.0

[bumpversion:file:setup.cfg]

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']

steps:
- uses: actions/checkout@v3
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
16 changes: 15 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,26 @@ CHANGELOG
Next Release
-----

* Core: add attributes and send type to send params
* DPF: add "read only" outputParameter type based on send params
* JS Bugfix: printHook and sendHook for AudioWorklet; mention emsdk limitations in docs
* Bugfix: stripnote missing right inlet

0.10.0
-----

* Objects: `[bang~]`
* Object improvements: support `[clear(` message for `[delwrite~]`
* Documentation fixes/additions
* Daisy: ability to set samplerate and blocksize
* Daisy: adding midirealtimein, polytouchin/out, midiin (midiout WIP)
* Daisy: use `libdaisy_path` in meta config; both string/path and int/depth possible
* DPF: enum for UI parameter IDs
* DPF bugfixes: correct input PortGroup names
* DPF bugfixes: correct input PortGroup names; correct UI slider updates; midiout reimplementation
* Wwise: complete rewrite/refactor - now uses SDK build tools - thanks to @eu-ch !!
* Bugfix: correct alignment in AVX pow~ implementation
* Cleanup: remove deprecated build.json
* Deprecate py37, enable py312

0.9.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.7 or higher
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
16 changes: 15 additions & 1 deletion docs/02.getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ To send audio output add a `[dac~]` The number of channels can be configured by

Note that top-level graphs (e.g. `_main.pd`) should not have any `[inlet~]` or `[outlet~]` objects. These are reserved only for abstractions.

> NOTE: Currently if your main patch does not have at least an `adc~` or `dac~` configured signal rate objects will not be evaluated in the graph!
## Exposing Parameters

### Input Parameters
Expand Down Expand Up @@ -40,7 +42,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 @@ -80,8 +82,20 @@ Heavy will also perform patch analysis to look for common mistakes and inconsite

If you experience any problems or have some thoughts on how to improve heavy make sure to browse and contribute to our [public issue tracker](https://github.com/Wasted-Audio/hvcc/issues).

## Tips and Tricks

Just because pd-vanilla can run your patch, does not mean it will behave exactly the same using Heavy. Extra care needs to be taken when dealing with control messages and certain PD object features.

* Make sure to go over the [known limitations](#known-limitations) to see if you are using objects incorrectly.
* Try to move as much of your patch into the signal domain as you can. Heavy is optimized for signal processing and every control rate operation can introduce interruptions and additional delay. Use control logic at the very beginning or the very end of the dataflow if possible.
* Make sure the order in your control flow works as intended. Use `[t]`/trigger objects to force the correct order of operations.
* When using Daisy the receive objects continuously output control messages, which can potentially interrupt your intended behavior.
* If you run into problems with a patch try to reduce it in order to localize the problem to a specific object or use-case before reporting an issue.

## Known Limitations

This list will be continuously epanded to document differences in object behavior between PD and Heavy.

* Many objects do not take control signals on their left inlet. `[osc~]` for instance always requires the use of `[sig~]` before connecting a value.
* Heavy does not support symbols in `[pack]`. e.g. `[pack s f]`.
* Heavy does not support numbers in `[unpack]`, e.g. `[unpack 0 0]` gives `Heavy only supports arguments 'f' and 's' to unpack.` Workaround is to use `f` instead, e.g. `[unpack f f]`, and if necessary prime the default values with a `[loadbang]` and `[0 0(`.
Expand Down
37 changes: 36 additions & 1 deletion docs/03.gen.daisy.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,26 @@ The custom layout can be passed on via the meta.json as such:
}
```

You can also set a custom path to your libDaisy directory. This can either be a string to the full or relative path or a number indicating the levels deep this directory is compared to the output directory. The default value for this is `2`.

```json
{
"daisy": {
"libdaisy_path": "/somewhere/libdaisy/"
}
}
```

Or the level:

```json
{
"daisy": {
"libdaisy_path": 5
}
}
```

## MIDI

Board files that have `OOPSY_TARGET_HAS_MIDI_INPUT` configured will automatically set up UART MIDI on the default USART1 Rx and Tx pins of the Daisy (D13/14).
Expand All @@ -50,7 +70,7 @@ Additionally `usb_midi`, running on the onboard micro-usb, can be enabled separa

At the moment all midi messages will be merged between USB and UART MIDI interfaces. In the future it will likely be possible to assign additional UART pins and group them under a specific PD midi "port".

Currently supported MIDI messages are: Note On/Off, Control Change, Program Change, Channel Pressure, and Pitch Bend.
Currently supported MIDI messages are: Note On/Off, Poly Aftertouch, Control Change, Program Change, Channel Pressure, Pitch Bend, and Midi Realtime messages.

## [print] object

Expand Down Expand Up @@ -80,3 +100,18 @@ This can be done by adding either to the meta.json:
```

Do note that the samplerate will be automatically set to either 16k, 32k, 48k, or 96k. Blocksize will need to be 256 or less and is automatically capped.

## Custom Linker script and Bootloader APP_TYPE

Using the Daisy bootloader you can flash the program to other parts of the Daisy memory. Read the [libDaisy documentation](https://github.com/electro-smith/libDaisy/blob/master/doc/md/_a7_Getting-Started-Daisy-Bootloader.md) for more information.

The linker and `APP_TYPE` can be set in the json metadata accordingly:

```json
{
"daisy": {
"linker_script": <path_to_lds_file>,
"bootloader": <APP_TYPE>
}
}
```
4 changes: 4 additions & 0 deletions docs/03.gen.javascript.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Javascript

> Emscripten versions 3.1.42 until 3.1.47 contain a bug that breaks our builds.
>
> Use a version earlier or later with this Generator for functional output.
## Getting Started

Heavy can provide a Javascript (JS) implementation of your patch using WebAssembly. The library provides a basic interface for processing audio, handling playback and sending or receiving messages. Both `AudioWorklet` and `ScriptProcessorNode` are supported. The old `asm.js` implementation has been deprecated.
Expand Down
Loading

0 comments on commit 41367a4

Please sign in to comment.