|
@@ -12,6 +12,64 @@ SPAT LAB SETUP:
|
12
|
12
|
a. TotalMix - select 'DTS_24ch'
|
13
|
13
|
b. mixer: Recall preset 96 ('24ch firecac ufx')
|
14
|
14
|
|
|
15
|
+LANGUAGE NOTES:
|
|
16
|
+The primary goal of the language is to initialize a dataflow system.
|
|
17
|
+Sub-goals:
|
|
18
|
+1) Avoid describing domain specific computation in the language. As much as possible constrain the
|
|
19
|
+language to describe initialization tasks (e.g. object allocation, object connection, initialization
|
|
20
|
+parameters, preset grouping, thread/process allocation, UI layout, ...)
|
|
21
|
+
|
|
22
|
+2) Network Distrubution
|
|
23
|
+3) UI Layout
|
|
24
|
+
|
|
25
|
+Runtime:
|
|
26
|
++ Extensible data-object system.
|
|
27
|
++ Library organization (application objects, simple objects, vector library)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+NEW DESIGN NOTES:
|
|
31
|
++ The current designs fundamental weakness is that it uses callbacks to communicate where sequential program
|
|
32
|
+ flow would produce a more comprehensible program.
|
|
33
|
+
|
|
34
|
++ Dataflow is a natural way to express DSP programs but if it is implemented in a textual, rather than
|
|
35
|
+ graphical language, then their are some design princles that must be followed in order
|
|
36
|
+ to produce comprehensible programs.
|
|
37
|
+ 1) Limit the number of connections as much as possible.
|
|
38
|
+ - There are many simple UI->param connections - these should be made automatically and UI
|
|
39
|
+ objects should not have to be explicitely created - they should be created by the runtime
|
|
40
|
+ environment.
|
|
41
|
+ - If multiple pieces of data are part of a single message then they should be sent as a unit
|
|
42
|
+ rather than separately. This decreases the number of connections and also removes timing
|
|
43
|
+ dependencies - where the application programmer has to know the order of transmission of the
|
|
44
|
+ individual pieces. (e.g. MIDI messages always contain {status,d0,d1} rather than having to
|
|
45
|
+ send d0 and d1 followed by status to indicate the end of the message {status,d0,d1} should
|
|
46
|
+ be sent as a single record.
|
|
47
|
+ 2) Eliminate as many event ordering issues as possible
|
|
48
|
+ See the example in 1).
|
|
49
|
+ 3) Alllow the connections between objects to be made as part of the object allocation.
|
|
50
|
+ 4) Allow subprograms to be made. This decreases the complexity of the programs and because
|
|
51
|
+ it allows the programs to be organized hierarchically. It also allows the subprograms to
|
|
52
|
+ be tested idenpendently.
|
|
53
|
+ 5) A natural way to express object multiplicity is required. (e.g. multiple channels).
|
|
54
|
+ This leads to a way to naturally create parallel/fan-in/fan-out connections.
|
|
55
|
+
|
|
56
|
++ One way to solve some of the problems of the current program would be to add debugging tools.
|
|
57
|
+ - Generate dataflow diagrams that show execution order and the order of connections.
|
|
58
|
+ The actual sending order of the outputs is not accessible to a static network analyzer because it is
|
|
59
|
+ implementation dependent.
|
|
60
|
+ - Generate reports of network activity that show the timed order of events.
|
|
61
|
++ The audio system (cmAudioSys) needs to be able to support multiple parallel DSP chains in separate threads.
|
|
62
|
++ UI Related Issues:
|
|
63
|
+ - Automatic UI's should be generated by scanning the objects parameters.
|
|
64
|
+ - Custom UI's should be created by explicitily naming object variables along with layout info.
|
|
65
|
++ Processors should be able to contain their own processing chains - embeddding processors should be possible.
|
|
66
|
+ This naturally leads to a tree address space. (e.g. fx.filter.param1)
|
|
67
|
++ Communication between threads should not necessarily require serialization.
|
|
68
|
+ - Use a blackboard approach where object values are read/written from a blackboard. Objects on the same
|
|
69
|
+ thread use the same physical blackboard. Blackboards on remote processes stream data in the background.
|
|
70
|
+ - This scheme may require double buffering of complex objects to prevent accessing invalid data states.
|
|
71
|
++ Objects that send multiple valued messages should use 'record' based data so that only one connection
|
|
72
|
+ is necessary.
|
15
|
73
|
|
16
|
74
|
STRATEGY:
|
17
|
75
|
+ implement highly parallel version - which can take advantage of multiple processors
|