flow/flow_doc.md : Updates.
This commit is contained in:
parent
a09ca54315
commit
ac42dd7653
175
flow/flow_doc.md
175
flow/flow_doc.md
@ -1,6 +1,142 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Proc Class Notation
|
||||||
|
|
||||||
|
```
|
||||||
|
<class-label> : {
|
||||||
|
vars: { (<var-label>:<var-desc>)* },
|
||||||
|
presets: { (<var-preset-label>:<var-preset>)* },
|
||||||
|
poly_limit_cnt: <int>
|
||||||
|
}
|
||||||
|
|
||||||
|
<var-desc> -> { type:<type-id>, value:<value-literal>, doc:<q-string>, flags:[ <attr-label> ] }
|
||||||
|
|
||||||
|
<var-preset> -> { <var-label> : <preset-value> }
|
||||||
|
|
||||||
|
<preset-value> -> <value-list> | NUMBER | STRING | CFG
|
||||||
|
|
||||||
|
<value-list> -> [ (value-literal)* ]
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Applying class presets during proc instantiaion
|
||||||
|
|
||||||
|
The way class preset values get applied is a function of the type of the variable and the format of the value.
|
||||||
|
If a variable is not a _cfg_ type and the preset value is a list, or if the variable is a _cfg_ type
|
||||||
|
and the preset value is a list-of-containers then each each value in the list is assigned to successive
|
||||||
|
channels on the variable. This is shown as the __multi-chan__ algorithm in the table below.
|
||||||
|
In all other cases the the value is applied to the 'any' channel, which is applied to
|
||||||
|
all existing channels.
|
||||||
|
|
||||||
|
| cfg | list | LoC | chan | algorithm |
|
||||||
|
| ----------- | ------- | --------------- | ---- | ---------------------------------------------- |
|
||||||
|
| no | no | no | any | single-chan |
|
||||||
|
| no | no | yes | n/a | Value can't be an l-of-c w/o also being a list.|
|
||||||
|
| no | yes | no | N | multi-chan |
|
||||||
|
| no | yes | yes | N | multi-chan |
|
||||||
|
| yes | no | no | any | single-chan |
|
||||||
|
| yes | no | yes | n/a | Value can't be an l-of-c w/o also being a list.|
|
||||||
|
| yes | yes | no | any | single-chan |
|
||||||
|
| yes | yes | yes | N | multi-chan |
|
||||||
|
|
||||||
|
When the class preset is applied during proc instantiation all variables have
|
||||||
|
been instantiated with the base channel. This implies that the __single-chan__
|
||||||
|
algorithm is only setting the value of the the existig base channel.
|
||||||
|
The __multi-chan__ algorithm however will instantiate any channels above the base channel
|
||||||
|
that do not already exist by duplicating the base channel and then assigning the preset value.
|
||||||
|
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
1. Legal `<type-id>` values
|
||||||
|
|
||||||
|
type | Description
|
||||||
|
---------|-------------------------------------------------------------------------------------------------------------------
|
||||||
|
string |
|
||||||
|
bool | `true` or `false`
|
||||||
|
int | `int32_t`
|
||||||
|
uint | `uint32_t`. The literal value must be suffixed with a 'u'. [See JSON Notes](#json-notes)
|
||||||
|
float | Single precision float. The literal value must be suffixed with an 'f'. [See JSON Notes](#json-notes)
|
||||||
|
double | Double precision float
|
||||||
|
cfg | JSON string
|
||||||
|
audio |
|
||||||
|
spectrum |
|
||||||
|
midi |
|
||||||
|
srate | (float) Sample rate type
|
||||||
|
sample | (float) Audio sample type
|
||||||
|
coeff | (float) Value that will be directly applied to a sample value (e.g added or multiplied)
|
||||||
|
ftime | (double) Fractional seconds
|
||||||
|
runtime | The type is left up to the processors custom 'create' function. These variables are not created automatically
|
||||||
|
| prior to calling the proc custom function.
|
||||||
|
all |
|
||||||
|
numeric |
|
||||||
|
|
||||||
|
|
||||||
|
See list in cwFlowTypes.cpp : typeLabelFlagsA[]
|
||||||
|
|
||||||
|
|
||||||
|
2. Attribute labels indicate properties of this variable.
|
||||||
|
|
||||||
|
Attribute | Description
|
||||||
|
----------|--------------------------------------------------------------
|
||||||
|
`src` | This variable must have a value or be connected to a source or
|
||||||
|
| the proc cannot be instantiated, and therefore the network cannot be instantiated.
|
||||||
|
`src_opt` |
|
||||||
|
`no_src` | This variable cannot be connected to a 'source' variable. Variables that are
|
||||||
|
| only used as output usually have this property.
|
||||||
|
`init` | This is an an initialization only variable.
|
||||||
|
| Changing the value during runtime will have no effect.
|
||||||
|
`mult` | This variable may be instantiated multiple times by the in-statement.
|
||||||
|
| Variables that do not have this property may only be instantiated
|
||||||
|
| once per proc-instance.
|
||||||
|
`out` | This is a subnet output variable. [See Subnet Implementation](#subnet-implementation)
|
||||||
|
`no_chan` | This variable cannot be 'channelized'.
|
||||||
|
|
||||||
|
## Schema Notation
|
||||||
|
|
||||||
|
1. The schemas all describe JSON like structures. For clarity the dictionary braces and
|
||||||
|
list brackets are shown.
|
||||||
|
|
||||||
|
2. Variables are wrapped in `< >` markers.
|
||||||
|
|
||||||
|
3. Entitities wrapped in `( )*` indicate that the wrapped structure may be repeated 0 or more times.
|
||||||
|
Entitities wrapped in `( )+` may be repeated 1 or more times.
|
||||||
|
|
||||||
|
4. Variables with names ending in `label` indicate identifiers which are unique at least within
|
||||||
|
their local scope and possibly some greater scope. For example proc-class names must be
|
||||||
|
unique across all loaded proc-class modules.
|
||||||
|
|
||||||
|
5. `<q-string>` indicates arbitrary text.
|
||||||
|
|
||||||
|
6. Entities are often optional. Rather than clutter the notation with additional
|
||||||
|
mark-up to indicate optional entitities this information is inclued in the notes
|
||||||
|
that accompany each schema.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## JSON Notes
|
||||||
|
|
||||||
|
The 'cfg' language is a JSON like with some added features:
|
||||||
|
|
||||||
|
1. Comments can be inserted using C++ `\\` line comment and `\* *\` block comment syntax.
|
||||||
|
|
||||||
|
2. Quotes are not necessary around strings that have no internal whitespace.
|
||||||
|
|
||||||
|
3. Numeric literals without decimal places are interpretted as integers, numbers
|
||||||
|
with decimal places are interpretted as doubles. Unsigned and single precision float values
|
||||||
|
may be specified using suffix notation
|
||||||
|
|
||||||
|
Type | Suffix | Example
|
||||||
|
---------|----------|--------------
|
||||||
|
unsigned | u | 10u
|
||||||
|
float | f | 12.34f
|
||||||
|
|
||||||
|
|
||||||
# Flow Documentation:
|
# Flow Documentation:
|
||||||
|
|
||||||
_flow_ is an experimental audio processing framework which supports
|
_flow_ is an experimental audio processing framework which supports
|
||||||
@ -42,10 +178,17 @@ Use `$` prefix to a filename. Use proc_expand_filename() to prepend `proj_dir` t
|
|||||||
|
|
||||||
### Network with sub-nets.
|
### Network with sub-nets.
|
||||||
|
|
||||||
|
|
||||||
|
## Proc Class Descriptions
|
||||||
|
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Proc Instance Syntax:
|
## Proc Instance Syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
<label> : { 'class':<class>, "in":{<in_stmt>*}, "preset":<class_preset_label>, "log":<log_dict> "argLabel":<arg_preset_label>, "args":<args_dict> }
|
<label> : { 'class':<class>, "in":{<in_stmt>*}, "out":{<out_stmt>}, "preset":<class_preset_label> "args":<args_dict>, "log":<log_dict> }
|
||||||
```
|
```
|
||||||
|
|
||||||
Proc instance and variabel labels consist of two parts a leading identifier and a
|
Proc instance and variabel labels consist of two parts a leading identifier and a
|
||||||
@ -55,9 +198,6 @@ A proc or variable label without a numeric suffix is automatically assigned the
|
|||||||
|
|
||||||
__args__ : This is a dictionary of named variable value records.
|
__args__ : This is a dictionary of named variable value records.
|
||||||
__preset__ : This string references a class preset to use for initializing this proc instance.
|
__preset__ : This string references a class preset to use for initializing this proc instance.
|
||||||
__argLabel__ : This string references an `args` dictionary parameter set to be applied after the __preset__ class preset.
|
|
||||||
If this argument is not given then it is automatically assigned the value "default". (What if there is not __arg__ record named default?
|
|
||||||
What if the are no __arg__ records at all?)
|
|
||||||
__log__ : This is a dictionary of `<var_label>:<sfx_id>` pairs whose value should be printed to the console when they change at runtime.
|
__log__ : This is a dictionary of `<var_label>:<sfx_id>` pairs whose value should be printed to the console when they change at runtime.
|
||||||
|
|
||||||
|
|
||||||
@ -75,21 +215,6 @@ as a single value.
|
|||||||
|
|
||||||
## Processing Unit Class
|
## Processing Unit Class
|
||||||
|
|
||||||
type | Description
|
|
||||||
-------|-------------------------------------
|
|
||||||
string |
|
|
||||||
bool |
|
|
||||||
int | `int32_t`
|
|
||||||
uint | `uint32_t`
|
|
||||||
float | f32
|
|
||||||
double | f64
|
|
||||||
srate | (float) Sample rate type
|
|
||||||
sample | (float) Audio sample type
|
|
||||||
coeff | (float) Value that will be directly applied to a sample value (e.g added or multiplied)
|
|
||||||
ftime | (double) Fractional seconds
|
|
||||||
runtime| The type is left up to the processors custom 'create' function. These vars are not automatically created.
|
|
||||||
|
|
||||||
See list in cwFlowTypes.cpp : typeLabelFlagsA[]
|
|
||||||
|
|
||||||
|
|
||||||
### Processing Units (proc)
|
### Processing Units (proc)
|
||||||
@ -295,3 +420,15 @@ the associated network variable is set.
|
|||||||
|
|
||||||
6. If the preset-pair record value field is NULL then the primary preset-value
|
6. If the preset-pair record value field is NULL then the primary preset-value
|
||||||
is used to set the associated network variable.
|
is used to set the associated network variable.
|
||||||
|
|
||||||
|
# Subnet Implementation
|
||||||
|
|
||||||
|
Subnets are implemented in the following phases:
|
||||||
|
- During program initialization the subnet cfg files is scanned and the
|
||||||
|
proxy vars for each subnet are used to create a `class_desc_t` record for each subnet.
|
||||||
|
|
||||||
|
- When the subnet is instantiated the proxy vars are instantiated first.
|
||||||
|
- Then the internal network is instantiated.
|
||||||
|
- The proxy var's are then connected to the proxied vars. This may require
|
||||||
|
connecting in either direction: proxy->proxied or proxied->proxy, with the later
|
||||||
|
case being indicated by an 'out' attribute in proxied 'flags' list.
|
||||||
|
Loading…
Reference in New Issue
Block a user