diff --git a/assets/images/reference/processes/puara/leaky-integrator-example-image.png b/assets/images/reference/processes/puara/leaky-integrator-example-image.png new file mode 100644 index 00000000..3cfd016d Binary files /dev/null and b/assets/images/reference/processes/puara/leaky-integrator-example-image.png differ diff --git a/assets/scores/reference/processes/LeakyIntegratorExample.score b/assets/scores/reference/processes/LeakyIntegratorExample.score new file mode 100644 index 00000000..f1b38781 --- /dev/null +++ b/assets/scores/reference/processes/LeakyIntegratorExample.score @@ -0,0 +1 @@ +{"Document":{"ObjectName":"Scenario::ScenarioDocumentModel","id":1,"BaseScenario":{"ObjectName":"Scenario::BaseScenario","id":0,"Constraint":{"ObjectName":"Scenario::IntervalModel","id":0,"Metadata":{"ScriptingName":"LeakyIntegratorExample","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"de035912-5b03-49a8-bc4d-b2cba68e21d9","ObjectName":"Scenario","id":1,"Metadata":{"ScriptingName":"Scenario.1","Comment":"","Color":"Transparent1","Label":"","Touched":false},"Duration":10584000000,"Height":1500.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-219.0,-326.0],"Size":[819.0,857.0],"Loops":false,"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"In","Exposed":"in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Out","Exposed":"out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"StartTimeNodeId":0,"StartEventId":0,"StartStateId":0,"Exclusive":false,"TimeNodes":[{"ObjectName":"Scenario::TimeSyncModel","id":0,"Metadata":{"ScriptingName":"Sync.start","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":0,"Events":[0],"MusicalSync":-1.0,"AutoTrigger":false,"Start":true,"Active":false,"Expression":" { true == false } "},{"ObjectName":"Scenario::TimeSyncModel","id":1,"Metadata":{"ScriptingName":"Sync.sway75","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":217192260,"Events":[1],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":false,"Expression":" { true == false } "},{"ObjectName":"Scenario::TimeSyncModel","id":2,"Metadata":{"ScriptingName":"Sync.kudo45","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":11046730721,"Events":[2],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":false,"Expression":" { true == false } "},{"ObjectName":"Scenario::TimeSyncModel","id":4,"Metadata":{"ScriptingName":"Sync.size60","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":11274645829,"Events":[4],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":false,"Expression":" { true == false } "},{"ObjectName":"Scenario::TimeSyncModel","id":5,"Metadata":{"ScriptingName":"Sync.sill6","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":217192260,"Events":[5],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":false,"Expression":" { true == false } "},{"ObjectName":"Scenario::TimeSyncModel","id":6,"Metadata":{"ScriptingName":"Sync.beau39","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":10749499952,"Events":[6],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":false,"Expression":" { true == false } "}],"Events":[{"ObjectName":"Scenario::EventModel","id":0,"Metadata":{"ScriptingName":"Event.start","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":0,"States":[0],"Condition":"","Date":0,"Offset":0},{"ObjectName":"Scenario::EventModel","id":1,"Metadata":{"ScriptingName":"Event.alto81","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":1,"States":[1,5,7],"Condition":"","Date":217192260,"Offset":0},{"ObjectName":"Scenario::EventModel","id":2,"Metadata":{"ScriptingName":"Event.emit5","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":2,"States":[2],"Condition":"","Date":11046730721,"Offset":0},{"ObjectName":"Scenario::EventModel","id":4,"Metadata":{"ScriptingName":"Event.vary59","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":4,"States":[6],"Condition":"","Date":11274645829,"Offset":0},{"ObjectName":"Scenario::EventModel","id":5,"Metadata":{"ScriptingName":"Event.novo6","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":5,"States":[8],"Condition":"","Date":217192260,"Offset":0},{"ObjectName":"Scenario::EventModel","id":6,"Metadata":{"ScriptingName":"Event.step79","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":6,"States":[9],"Condition":"","Date":10749499952,"Offset":0}],"States":[{"ObjectName":"Scenario::StateModel","id":0,"Metadata":{"ScriptingName":"State.start","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":0,"PreviousConstraint":null,"NextConstraint":1,"HeightPercentage":0.02,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":1,"Metadata":{"ScriptingName":"State.ages68","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":1,"NextConstraint":2,"HeightPercentage":0.02,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":2,"Metadata":{"ScriptingName":"State.purl18","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":2,"PreviousConstraint":2,"NextConstraint":null,"HeightPercentage":0.02,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":6,"Metadata":{"ScriptingName":"State.oeil0","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":4,"PreviousConstraint":4,"NextConstraint":null,"HeightPercentage":0.6503710618436406,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":5,"Metadata":{"ScriptingName":"State.adds50","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":null,"NextConstraint":4,"HeightPercentage":0.6503710618436406,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":7,"Metadata":{"ScriptingName":"State.drug91","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":null,"NextConstraint":5,"HeightPercentage":0.33560093348891484,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":8,"Metadata":{"ScriptingName":"State.gibe5","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":5,"PreviousConstraint":5,"NextConstraint":6,"HeightPercentage":0.33560093348891484,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},{"ObjectName":"Scenario::StateModel","id":9,"Metadata":{"ScriptingName":"State.hogs22","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":6,"PreviousConstraint":6,"NextConstraint":null,"HeightPercentage":0.33560093348891484,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]}],"Constraints":[{"ObjectName":"Scenario::IntervalModel","id":1,"Metadata":{"ScriptingName":"Interval.bids39","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[],"SmallViewRack":[],"FullViewRack":[],"DefaultDuration":217192260,"MinDuration":217192260,"MaxDuration":217192260,"GuiDuration":238911486,"Speed":1.0,"Rigidity":true,"MinNull":false,"MaxInf":false,"Signatures":[],"StartState":0,"EndState":1,"StartDate":0,"HeightPercentage":0.02,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":-1.0,"Center":0,"ViewMode":0,"SmallViewShown":false,"HasSignature":false},{"ObjectName":"Scenario::IntervalModel","id":2,"Metadata":{"ScriptingName":"Leaky Integrator","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"ed55a080-b821-4977-89b6-4697cb8178e7","ObjectName":"puara_leaky_integrator_avnd","id":1,"Metadata":{"ScriptingName":"Leaky Integrator","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10829538461,"Height":300.0,"StartOffset":0,"LoopDuration":7056000000,"Pos":[150.0,47.0],"Size":[137.046875,22.0],"Loops":false,"Inlets":[{"uuid":"769dd38a-bfb3-4dc6-b52a-b6abb7afe2a3","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Input","Exposed":"input"},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Leak Factor","Exposed":"leak factor","Value":{"Float":0.4318181872367859},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"ec55a080-b821-4977-8bb6-4697cb8178e7","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Leak Frequency (Hz)","Exposed":"leak frequency (hz)","Value":{"Float":100.00001525878906},"Init":{"Float":100.0},"Domain":{"Float":{"Min":0.0,"Max":200.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Output","Exposed":"output"}]}],"SmallViewRack":[{"Processes":[1],"Process":null,"Height":200.0,"Nodal":true}],"FullViewRack":[{"Process":0,"Nodal":true}],"DefaultDuration":10829538461,"MinDuration":10829538461,"MaxDuration":10829538461,"GuiDuration":10832123076,"Speed":1.0,"Rigidity":true,"MinNull":false,"MaxInf":false,"Signatures":[],"StartState":1,"EndState":2,"StartDate":217192260,"HeightPercentage":0.02,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":-1.0,"Center":0,"ViewMode":0,"SmallViewShown":true,"HasSignature":false},{"ObjectName":"Scenario::IntervalModel","id":4,"Metadata":{"ScriptingName":"Expression Value Generator","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"d757bd0d-c0a1-4aec-bf72-945b722ab85b","ObjectName":"MathGenerator","id":1,"Metadata":{"ScriptingName":"Expression Value Generator","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11057453569,"Height":300.0,"StartOffset":0,"LoopDuration":7115915107,"Pos":[-209.0,48.0],"Size":[221.0,90.0],"Loops":false,"Inlets":[{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Expression (ExprTK)","Exposed":"expression (exprtk)","Value":{"String":"cos(1)+sin(1)"},"Init":{"String":"cos(t) + log(pos * (1+abs(x)) / dt)"},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Param (a)","Exposed":"param (a)","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Param (b)","Exposed":"param (b)","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Param (c)","Exposed":"param (c)","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"out","Exposed":"out"}]}],"SmallViewRack":[{"Processes":[1],"Process":null,"Height":200.0,"Nodal":true}],"FullViewRack":[{"Process":0,"Nodal":true}],"DefaultDuration":11057453569,"MinDuration":11057453569,"MaxDuration":11057453569,"GuiDuration":11452429695,"Speed":1.0,"Rigidity":true,"MinNull":false,"MaxInf":false,"Signatures":[],"StartState":5,"EndState":6,"StartDate":217192260,"HeightPercentage":0.6503710618436406,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":-1.0,"Center":0,"ViewMode":0,"SmallViewShown":true,"HasSignature":false},{"ObjectName":"Scenario::IntervalModel","id":5,"Metadata":{"ScriptingName":"Interval.orly61","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[],"SmallViewRack":[],"FullViewRack":[],"DefaultDuration":0,"MinDuration":0,"MaxDuration":0,"GuiDuration":601217744,"Speed":1.0,"Rigidity":true,"MinNull":false,"MaxInf":false,"Signatures":[],"StartState":7,"EndState":8,"StartDate":217192260,"HeightPercentage":0.33560093348891484,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":-1.0,"Center":0,"ViewMode":0,"SmallViewShown":false,"HasSignature":false},{"ObjectName":"Scenario::IntervalModel","id":6,"Metadata":{"ScriptingName":"Signal display","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio in","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio out","Exposed":"audio out","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"9906e563-ddeb-4ecd-908c-952baee2a0a5","ObjectName":"SignalDisplay","id":1,"Metadata":{"ScriptingName":"Signal display","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10532307692,"Height":300.0,"StartOffset":0,"LoopDuration":7056000000,"Pos":[40.0,40.0],"Size":[200.0,100.0],"Loops":true,"Inlets":[{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"in","Exposed":"in","Value":{},"Init":{},"Domain":{}}],"Outlets":[{"uuid":"3620ea94-5991-41cf-89b3-11f842cc39d0","ObjectName":"Outlet","id":0,"Hidden":true,"Custom":"out","Exposed":"out","Value":{"Tuple":[{"Float":0.6339532136917114},{"Float":2.4319207668304443}]},"Domain":{}}]}],"SmallViewRack":[{"Processes":[1],"Process":1,"Height":200.0,"Nodal":false}],"FullViewRack":[{"Process":1,"Nodal":false}],"DefaultDuration":10532307692,"MinDuration":10532307692,"MaxDuration":10532307692,"GuiDuration":10931630769,"Speed":1.0,"Rigidity":true,"MinNull":false,"MaxInf":false,"Signatures":[],"StartState":8,"EndState":9,"StartDate":217192260,"HeightPercentage":0.33560093348891484,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":-1.0,"Center":0,"ViewMode":0,"SmallViewShown":true,"HasSignature":false}],"Comments":[]}],"SmallViewRack":[],"FullViewRack":[{"Process":1,"Nodal":false}],"DefaultDuration":10584000000,"MinDuration":10584000000,"MaxDuration":11113200000,"GuiDuration":11642400000,"Speed":1.0,"Rigidity":false,"MinNull":false,"MaxInf":true,"Signatures":[[0,[4,4]]],"StartState":0,"EndState":1,"StartDate":0,"HeightPercentage":0.0,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":15120000.0,"Center":0,"ViewMode":1,"SmallViewShown":false,"HasSignature":true},"StartTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":0,"Metadata":{"ScriptingName":"Sync.start","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":0,"Events":[0],"MusicalSync":-1.0,"AutoTrigger":false,"Start":true,"Active":false,"Expression":" { true == false } "},"EndTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":1,"Metadata":{"ScriptingName":"Sync.end","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":10584000000,"Events":[1],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":true,"Expression":" { true == false } "},"StartEvent":{"ObjectName":"Scenario::EventModel","id":0,"Metadata":{"ScriptingName":"Event.start","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":0,"States":[0],"Condition":"","Date":0,"Offset":0},"EndEvent":{"ObjectName":"Scenario::EventModel","id":1,"Metadata":{"ScriptingName":"Event.end","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":1,"States":[1],"Condition":"","Date":10584000000,"Offset":0},"StartState":{"ObjectName":"Scenario::StateModel","id":0,"Metadata":{"ScriptingName":"State.start","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":0,"PreviousConstraint":null,"NextConstraint":0,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]},"EndState":{"ObjectName":"Scenario::StateModel","id":1,"Metadata":{"ScriptingName":"State.end","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":0,"NextConstraint":null,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"Controls":[],"StateProcesses":[]}},"Speed":1.0,"Cables":[{"ObjectName":"Process::Cable","id":1,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"Scenario","ObjectId":1},{"ObjectName":"Scenario::IntervalModel","ObjectId":4},{"ObjectName":"MathGenerator","ObjectId":1},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"Scenario","ObjectId":1},{"ObjectName":"Scenario::IntervalModel","ObjectId":2},{"ObjectName":"puara_leaky_integrator_avnd","ObjectId":1},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":2,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"Scenario","ObjectId":1},{"ObjectName":"Scenario::IntervalModel","ObjectId":2},{"ObjectName":"puara_leaky_integrator_avnd","ObjectId":1},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"Scenario","ObjectId":1},{"ObjectName":"Scenario::IntervalModel","ObjectId":6},{"ObjectName":"SignalDisplay","ObjectId":1},{"ObjectName":"Inlet","ObjectId":0}]}],"BusIntervals":[]},"Plugins":[{"uuid":"1f923578-08c3-49be-9ba9-69c144ee2e32","Refresh":false,"Reconnect":false,"MidiRatio":1.0},{"uuid":"6e610e1f-9de2-4c36-90dd-0ef570002a21","RootNode":{},"Children":[]}],"Version":4,"Commit":"e7fcc31bb79d240c34f9a9d7bf1bc1a88a3eed89","Tag":"3.5.2"} \ No newline at end of file diff --git a/docs/common-practices/tutorial-smoothing-data-with-puara.md b/docs/common-practices/tutorial-smoothing-data-with-puara.md new file mode 100644 index 00000000..2f937814 --- /dev/null +++ b/docs/common-practices/tutorial-smoothing-data-with-puara.md @@ -0,0 +1,44 @@ +--- +layout: default +title: 'Smoothing Data with Puara' +parent: Common practices +nav_order: 25 +--- + +# Smoothing Data with the Leaky Integrator + +Rapidly changing data from sensors or generative algorithms can sometimes be too "jittery" for direct use in controlling sound or visuals. We often want to smooth this data to get more organic, gradual changes. + +This tutorial demonstrates how to use the **Leaky Integrator** process from the Puara Gestures library to smooth a noisy signal. + +### The Goal + +We will generate a noisy, random signal and pass it through the Leaky Integrator to see how it smooths the output. + +### Setting up the Score + +1. From the Process Library, add the following three objects to your scenario: + * `Control/Generators/Expression Value Generator` + * `Utilities/Puara/Leaky Integrator` + * `Monitoring/Signal display` + +2. Configure the `Expression Value Generator`. Set its expression to something that creates noise, for example, `random()`. + +3. Connect the processes as shown below. The output of the generator feeds the `Input` of the integrator, and the `Output` of the integrator is visualized by the display. + +Leaky Integrator Example + +### Running and Experimenting + +Now, run the scenario. The `Signal Display` will show the smoothed output from the `Leaky Integrator`. + +* **Adjust the `Leak Factor`:** + * Set it close to `1.0`. The output signal will become very flat and change very slowly, as it is "leaking" very little of the new information. + * Set it close to `0.0`. The output signal will closely follow the noisy input, as it is "leaking" almost all of the old value on each step. + +* **Adjust the `Leak Frequency (Hz)`:** + * Lower this value to see the integration happen at a slower rate, resulting in a more stepped, less responsive output. + +By combining these two parameters, you can precisely control the character of your smoothed signal. + +You can download a complete example score here: [/assets/scores/reference/processes/LeakyIntegratorExample.score](/assets/scores/reference/processes/LeakyIntegratorExample.score) \ No newline at end of file diff --git a/docs/reference-manual/processes/library/puara-gestures.md b/docs/reference-manual/processes/library/puara-gestures.md new file mode 100644 index 00000000..333b172d --- /dev/null +++ b/docs/reference-manual/processes/library/puara-gestures.md @@ -0,0 +1,96 @@ +--- +layout: default +title: Puara Gestures +parent: Processes +grand_parent: Reference + + +nav_order: 60 +--- + +# Puara Gestures + +This section describes the processes ported from the [Puara-gestures](https://github.com/Puara/puara-gestures/) library. This library provides a powerful toolkit for creating and managing high-level gestural descriptors from sensor data. + +--- + +## Leaky Integrator + +The **Leaky Integrator** process acts as an accumulator that builds up a value based on its input signal over time. Simultaneously, it gradually 'leaks' or decays, preventing the value from growing indefinitely and allowing it to fall back to zero when the input stops. + +This behavior makes it ideal for measuring the 'energy' of a continuous gesture, such as a shake, or for creating smooth, organic-feeling transitions by filtering out noisy sensor data (acting as a low-pass filter). The `Leak Factor` directly controls the rate of this decay. + +### Parameters + +| Parameter | Description | +| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | +| **Inputs** | | +| `Input` | The incoming signal to be smoothed. | +| `Leak Factor` | A `float` from 0.0 to 1.0 that controls the amount of smoothing. A value of `0.0` means the output immediately jumps to the new input (no smoothing), while a value of `1.0` means the output does not change (full smoothing). Default is `0.5`. | +| `Leak Frequency (Hz)` | A `float` from 0.0 to 200.0 Hz that sets the rate at which the integrator updates its value. The control uses a logarithmic mapping for more intuitive musical control. Default is `100.0`. | +| **Outputs** | | +| `Output` | The smoothed output signal. | + +--- + +## Roll + +The **Roll** process calculates the side-to-side tilt (roll angle) of a device. It uses a combination of accelerometer, gyroscope, and magnetometer data for a stable and accurate orientation reading. This is ideal for gestural control where you want to map the rotation of a device (like a phone) to a parameter. + +The process includes built-in options for transforming the output: +- **Unwrap:** Prevents the angle from jumping when it crosses the -π to +π boundary, allowing for continuous rotation tracking. +- **Smooth:** Averages recent values to reduce jitter from noisy sensors. +- **Wrap:** Confines the final output to a specific range (e.g., 0 to 2π). + +### Parameters + +| Parameter | Description | +| :----------------- | :------------------------------------------------------------------------------------------------------ | +| **Inputs** | | +| `Acceleration` | Expects 3D coordinate data (`{x, y, z}`) from an accelerometer. | +| `Gyroscope` | Expects 3D coordinate data (`{x, y, z}`) from a gyroscope. | +| `Magnetometer` | Expects 3D coordinate data (`{x, y, z}`) from a magnetometer. | +| `Enable Unwrap` | A boolean toggle. When `true`, allows the output angle to increase or decrease indefinitely. Default is `true`. | +| `Enable Smooth` | A boolean toggle. When `true`, applies a smoothing filter to the output. Default is `true`. | +| `Enable Wrap` | A boolean toggle. When `true`, wraps the final output to a specific range (e.g., 0 to 2π). Default is `false`. | +| **Outputs** | | +| `Output` | The calculated roll angle in radians. | + + +--- + +## Tilt + +The **Tilt** process calculates the forward-and-backward tilt (also known as "pitch") of a device. It uses a combination of accelerometer, gyroscope, and magnetometer data to provide a stable and accurate orientation reading. This is useful for gestural control where you want to map the forward/backward tilting of a device to a parameter. + +### Parameters + +| Parameter | Description | +| :------------- | :------------------------------------------------------------------------------ | +| **Inputs** | | +| `Acceleration` | Expects 3D coordinate data (`{x, y, z}`) from an accelerometer. | +| `Gyroscope` | Expects 3D coordinate data (`{x, y, z}`) from a gyroscope. | +| `Magnetometer` | Expects 3D coordinate data (`{x, y, z}`) from a magnetometer. | +| **Outputs** | | +| `Output` | The calculated tilt (pitch) angle in radians, ranging from `-π/2` to `+π/2`. | + + +--- + +## Shake + +The **Shake** process detects shaking gestures from 3D accelerometer data. It calculates the overall magnitude of the shake, making it ideal for triggering events or controlling parameters based on energetic motion. The detection algorithm's sensitivity and response curve can be finely tuned using the provided parameters. + +### Parameters + +| Parameter | Description | +| :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | +| **Inputs** | | +| `Acceleration` | Expects 3D coordinate data (`{x, y, z}`) from an accelerometer. | +| `Integrator Frequency (Hz)` | A `float` from 0.0 to 200.0 Hz that sets the update rate of the internal smoothing filter. Higher values are more responsive. Default is `10.0`. | +| `Fast Leak` | A `float` from 0.0 to 1.0. This controls how quickly the shake value increases when a shake is detected (i.e., when motion exceeds the `Activation Threshold`). A lower value means a faster rise. Default is `0.6`. | +| `Slow Leak` | A `float` from 0.0 to 1.0. This controls how quickly the shake value decays when the device is still. A lower value means a faster decay. Default is `0.3`. | +| `Activation Threshold` | A `float` from 0.0 to 1.0 that sets the motion sensitivity. Acceleration above this threshold is considered a shake. Default is `0.1`. | +| **Outputs** | | +| `Output` | The calculated shake magnitude, a single `float` value. | +