enzienaudio / heavy Goto Github PK
View Code? Open in Web Editor NEWheavy public issue tracker and static dsp code releases
Home Page: https://enzienaudio.com
License: ISC License
heavy public issue tracker and static dsp code releases
Home Page: https://enzienaudio.com
License: ISC License
A single [declare] object is causing this error:
ERROR: dictionary update sequence element #0 has length 5; 2 is required
Understandably we don't really need the [declare] object as the abstraction implementation assumes all patches are in the same directory (right?), but some better error handling to inform people that this is the case would be nice.
#N canvas 0 22 450 300 10;
#X declare -path foo;
#X obj 138 69 declare -path foo;
Create a C++ class wrapper for handling namespacing and memory management in an easier way for C++ projects.
#N canvas 386 187 163 106 10;
#X obj 52 14 loadbang;
#X obj 25 62 sel 0;
#X msg 52 36 1;
#X connect 0 0 2 0;
#X connect 2 0 1 1;
returns
ERROR: {
"exception": "('Connection [message {local:[[1.0]] remote:[]}:0] --> [__graph.gMa8P(_main.hv.json):1] connects to out-of-range let.', None)",
"has_error": true
}
Even a patch with just a [div] object throws a fatal error for the compiler.
https://hacks.mozilla.org/2014/10/introducing-simd-js/
Our code already has many SIMD optimisations, will need to figure how to make use of them when compiling javascript code using emscripten. This will have drastic improvement on the performance when running in the browser.
#N canvas -1546 -487 182 131 10;
#X obj 11 74 metro 1000;
#X obj 11 11 loadbang;
#X obj 11 97 print;
#X msg 68 53 2000;
#X obj 11 32 t a a;
#X connect 0 0 2 0;
#X connect 1 0 4 0;
#X connect 3 0 0 1;
#X connect 4 0 0 0;
#X connect 4 1 3 0;
ERROR: Cannot convert argument "" into float.
#N canvas 307 118 795 679 10;
#X obj 393 209 swap;
Just needs better error reporting.
Windows 8.1.
Chrome 42.0.2311.90
Pd 0.46.5
[osc~ 440] in the patch is playing at 478.9Hz in the browser. Possibly a sample rate issue? The ratio is the same as 48000/44100. Windows runs at 48KHz by default.
When generating parameters from [receive] objects we should only create code from user specified instances. [receive]/[send] objects are commonly used within a patch architecture and having a global scope for these in the integration interface would be too verbose and potentially confusing.
Proposal for a Heavy mark-up specification to tag certain [receiver] objects for automatic code generation of parameters.
i.e. in a patch a user would create an object such as [r @hv_param freq 0 1 0.5], which would generate a parameter to the patch called "freq" with minValue=0, maxValue=1 and defaultValue=0.5
heavy could have an open watch folder in google drive/dropbox etc and then when a file gets changed automatically start to recompile, removing the upload step and click compile step from the process.
ERROR: Expecting , delimiter: line 33 column 5 (char 516)
Caused by this:
#N canvas 405 80 237 238 10;
#X obj 64 74 tabread~ blah;
Currently they initialise with a value of 0.5 for patch preview, which can override some essential initialisation in the patch itself...
Instead of exiting on the first one it gets to.
In javascript this patch should begin interpolating from 0 through to 0.5, but instead it outputs all 0's until the end of the ramp period where it then outputs 0.5
Getting this error with a patch consisting of just a [tabwrite~]
object
ERROR: {
"exception": "('Object type \"samplerate~\" cannot be found.', None)",
"has_error": true
}
Currently this is compiled into the main javascript *Lib.min.js
file. However it's useful to see this when trying to understand how the js interface works.
The C source code makes us of preprocessor macros, there are some in the generated code that are a bit too generic and could conflict with projects that it's integrated into.
[f $1]
inside an abstraction with a creation argument works fine, but [f $1]
inside a sub-patch inside the abstraction throws an error:
ERROR: dictionary update sequence element #0 has length 4; 2 is required
Sub-patches cannot have creation arguments of their own, and should implicitly take the creation arguments of their parent patch.
#N canvas 365 249 286 155 10;
#X obj 15 10 loadbang;
#X obj 15 51 f 3;
#X obj 23 30 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 15 75 hello-\$1;
#X obj 15 99 print;
#X text 13 120 hello-3 is expected. Heavy returns hello-\$1;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
This is needed for simple synthesis techniques such as FM.
Also affects [osc~] and other abstractions that use [phasor~] internally.
Only 75% of CPUs support > SSE3 according to http://store.steampowered.com/hwsurvey, but > 99% support up to SSE3.
tabread4~ and tabwrite~ should be able to instantiate without needing a creation argument of a table name, but currently this produces this error:
ERROR: {
"exception": "('No corresponding table with name \"None\" found for object __tabread~if {table:None}.', None)",
"has_error": true
}
Understandable that this would cause an error, but would be nice if there was some reporting of why the error has occurred to the user.
it might be interseting to take a generic version of puredata vanilla and removing all the objects that are not supported by heavy. then it is clear what will not work before you compile
It's a really great feature, but...
some patches e.g. reverbs, have many [receives], only a few of which are actually useful to visualise.
Could there perhaps be a special string that must be present in the [receive] name in order for Heavy to auto-generate a GUI slider for it?
e.g.
[r myParameter] would NOT auto-generate a slider whereas
[r myParameter-GUI] would auto-generate a slider
"exception": "('No corresponding table with name \"major\" found for object __tabread {table:major}.', None)"
But arrays work correctly...
Currently in the javascript target the process method is fed null buffers for the input channels, regardless of the patch contents, i.e. if it should accept input audio
One solution was to open up the microphone input via the web audio api and pipe that in. However I feel this shouldn't be automatically generated by the compiler and that it is down to the user to decide what to feed into the patch.
I propose that we create an additional temporary input buffer in the javascript wrapper and copy over the data from the AudioBuffer source that's passed through with the process method. The contents of the input buffer should be determined by the user.
If an [adc~] object is not present then the number of input channels to the patch will be 0 and we can opt to always pass a null pointer through.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.