summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-10-11 18:59:24 -0700
committeryum <yum.food.vr@gmail.com>2022-10-11 18:59:24 -0700
commit3e64c05c9f0b67e9ec1ae71153012ce9f29277ad (patch)
tree3db220039fc68805807c6e2b7267cf5420c3df11
parent6daa4e6d9aec98d1a99774b967fafb1bb2d58e57 (diff)
Add ability to leave board in world
* Add VRLabs' World Constraint as a submodule * Add animations for world constraint * Add toggles for board * Add libunity.py (no content yet) * Support >30s transcription * Add board FBX
-rw-r--r--.gitmodules3
-rw-r--r--Animations/TaSTT_Lock_Hand_Disable.anim98
-rw-r--r--Animations/TaSTT_Lock_Hand_Enable.anim98
-rw-r--r--Animations/TaSTT_Lock_World_Disable.anim53
-rw-r--r--Animations/TaSTT_Lock_World_Enable.anim53
-rw-r--r--TaSTT.fbxbin0 -> 17116 bytes
m---------World-Constraint0
-rw-r--r--generate_fx.py116
-rw-r--r--generate_params.py6
-rw-r--r--generate_utils.py6
-rw-r--r--libunity.py4
-rw-r--r--osc_ctrl.py26
-rw-r--r--transcribe.py42
13 files changed, 455 insertions, 50 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..0e8fa92
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "World-Constraint"]
+ path = World-Constraint
+ url = https://github.com/VRLabs/World-Constraint
diff --git a/Animations/TaSTT_Lock_Hand_Disable.anim b/Animations/TaSTT_Lock_Hand_Disable.anim
new file mode 100644
index 0000000..1d5b956
--- /dev/null
+++ b/Animations/TaSTT_Lock_Hand_Disable.anim
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: TaSTT_Lock_Hand_Disable
+ serializedVersion: 6
+ m_Legacy: 0
+ m_Compressed: 0
+ m_UseHighQualityCurve: 1
+ m_RotationCurves: []
+ m_CompressedRotationCurves: []
+ m_EulerCurves: []
+ m_PositionCurves: []
+ m_ScaleCurves: []
+ m_FloatCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Sources.Array.data[0].weight
+ path: World Constraint/Container/TaSTT
+ classID: 1773428102
+ script: {fileID: 0}
+ m_PPtrCurves: []
+ m_SampleRate: 60
+ m_WrapMode: 0
+ m_Bounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 0, y: 0, z: 0}
+ m_ClipBindingConstant:
+ genericBindings:
+ - serializedVersion: 2
+ path: 1272388438
+ attribute: 15
+ script: {fileID: 0}
+ typeID: 1773428102
+ customType: 35
+ isPPtrCurve: 0
+ pptrCurveMapping: []
+ m_AnimationClipSettings:
+ serializedVersion: 2
+ m_AdditiveReferencePoseClip: {fileID: 0}
+ m_AdditiveReferencePoseTime: 0
+ m_StartTime: 0
+ m_StopTime: 0
+ m_OrientationOffsetY: 0
+ m_Level: 0
+ m_CycleOffset: 0
+ m_HasAdditiveReferencePose: 0
+ m_LoopTime: 1
+ m_LoopBlend: 0
+ m_LoopBlendOrientation: 0
+ m_LoopBlendPositionY: 0
+ m_LoopBlendPositionXZ: 0
+ m_KeepOriginalOrientation: 0
+ m_KeepOriginalPositionY: 1
+ m_KeepOriginalPositionXZ: 0
+ m_HeightFromFeet: 0
+ m_Mirror: 0
+ m_EditorCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Sources.Array.data[0].weight
+ path: World Constraint/Container/TaSTT
+ classID: 1773428102
+ script: {fileID: 0}
+ m_EulerEditorCurves: []
+ m_HasGenericRootTransform: 0
+ m_HasMotionFloatCurves: 0
+ m_Events: []
diff --git a/Animations/TaSTT_Lock_Hand_Enable.anim b/Animations/TaSTT_Lock_Hand_Enable.anim
new file mode 100644
index 0000000..9b81fa2
--- /dev/null
+++ b/Animations/TaSTT_Lock_Hand_Enable.anim
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: TaSTT_Lock_Hand_Enable
+ serializedVersion: 6
+ m_Legacy: 0
+ m_Compressed: 0
+ m_UseHighQualityCurve: 1
+ m_RotationCurves: []
+ m_CompressedRotationCurves: []
+ m_EulerCurves: []
+ m_PositionCurves: []
+ m_ScaleCurves: []
+ m_FloatCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Sources.Array.data[0].weight
+ path: World Constraint/Container/TaSTT
+ classID: 1773428102
+ script: {fileID: 0}
+ m_PPtrCurves: []
+ m_SampleRate: 60
+ m_WrapMode: 0
+ m_Bounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 0, y: 0, z: 0}
+ m_ClipBindingConstant:
+ genericBindings:
+ - serializedVersion: 2
+ path: 1272388438
+ attribute: 15
+ script: {fileID: 0}
+ typeID: 1773428102
+ customType: 35
+ isPPtrCurve: 0
+ pptrCurveMapping: []
+ m_AnimationClipSettings:
+ serializedVersion: 2
+ m_AdditiveReferencePoseClip: {fileID: 0}
+ m_AdditiveReferencePoseTime: 0
+ m_StartTime: 0
+ m_StopTime: 0
+ m_OrientationOffsetY: 0
+ m_Level: 0
+ m_CycleOffset: 0
+ m_HasAdditiveReferencePose: 0
+ m_LoopTime: 1
+ m_LoopBlend: 0
+ m_LoopBlendOrientation: 0
+ m_LoopBlendPositionY: 0
+ m_LoopBlendPositionXZ: 0
+ m_KeepOriginalOrientation: 0
+ m_KeepOriginalPositionY: 1
+ m_KeepOriginalPositionXZ: 0
+ m_HeightFromFeet: 0
+ m_Mirror: 0
+ m_EditorCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Sources.Array.data[0].weight
+ path: World Constraint/Container/TaSTT
+ classID: 1773428102
+ script: {fileID: 0}
+ m_EulerEditorCurves: []
+ m_HasGenericRootTransform: 0
+ m_HasMotionFloatCurves: 0
+ m_Events: []
diff --git a/Animations/TaSTT_Lock_World_Disable.anim b/Animations/TaSTT_Lock_World_Disable.anim
index d288d19..7d1f0de 100644
--- a/Animations/TaSTT_Lock_World_Disable.anim
+++ b/Animations/TaSTT_Lock_World_Disable.anim
@@ -16,7 +16,26 @@ AnimationClip:
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
- m_FloatCurves: []
+ m_FloatCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Enabled
+ path: World Constraint/Container
+ classID: 1773428102
+ script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
@@ -24,14 +43,21 @@ AnimationClip:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
- genericBindings: []
+ genericBindings:
+ - serializedVersion: 2
+ path: 3572513839
+ attribute: 3305885265
+ script: {fileID: 0}
+ typeID: 1773428102
+ customType: 0
+ isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
- m_StopTime: 1
+ m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
@@ -46,7 +72,26 @@ AnimationClip:
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
- m_EditorCurves: []
+ m_EditorCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Enabled
+ path: World Constraint/Container
+ classID: 1773428102
+ script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
diff --git a/Animations/TaSTT_Lock_World_Enable.anim b/Animations/TaSTT_Lock_World_Enable.anim
index 6e666d3..18a40f9 100644
--- a/Animations/TaSTT_Lock_World_Enable.anim
+++ b/Animations/TaSTT_Lock_World_Enable.anim
@@ -16,7 +16,26 @@ AnimationClip:
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
- m_FloatCurves: []
+ m_FloatCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Enabled
+ path: World Constraint/Container
+ classID: 1773428102
+ script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
@@ -24,14 +43,21 @@ AnimationClip:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
- genericBindings: []
+ genericBindings:
+ - serializedVersion: 2
+ path: 3572513839
+ attribute: 3305885265
+ script: {fileID: 0}
+ typeID: 1773428102
+ customType: 0
+ isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
- m_StopTime: 1
+ m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
@@ -46,7 +72,26 @@ AnimationClip:
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
- m_EditorCurves: []
+ m_EditorCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_Enabled
+ path: World Constraint/Container
+ classID: 1773428102
+ script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
diff --git a/TaSTT.fbx b/TaSTT.fbx
new file mode 100644
index 0000000..b449755
--- /dev/null
+++ b/TaSTT.fbx
Binary files differ
diff --git a/World-Constraint b/World-Constraint
new file mode 160000
+Subproject 1144d5b61d168d6b00064d72f444714e7b11459
diff --git a/generate_fx.py b/generate_fx.py
index 515d208..0b9b9ab 100644
--- a/generate_fx.py
+++ b/generate_fx.py
@@ -136,6 +136,12 @@ def genAnimator(state):
params["ANIMATOR_PARAMETER_NAME"] = getEnableParam()
print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params))
+ params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getHandToggleParam()
+ print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params))
+
+ params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getHipToggleParam()
+ print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params))
+
for i in range(0, NUM_LAYERS):
params["ANIMATOR_PARAMETER_NAME"] = getLayerParam(i)
print(replaceMacros(ANIMATOR_PARAMETER_INT, params))
@@ -152,7 +158,6 @@ def genAnimator(state):
params["ANIMATOR_PARAMETER_NAME"] = getSelectParam(i, 3)
print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params))
-
print(replaceMacros(ANIMATOR_LAYER_HEADER, params))
for i in range(0, NUM_LAYERS):
@@ -161,6 +166,16 @@ def genAnimator(state):
params["TASTT_LAYER_NAME"] = getLayerParam(i)
print(replaceMacros(ANIMATOR_LAYER_TASTT, params))
+ params["TASTT_HAND_TOGGLE_LAYER_U2"] = get_u2("1107", state)
+ params["TASTT_LAYER_U2"] = params["TASTT_HAND_TOGGLE_LAYER_U2"]
+ params["TASTT_LAYER_NAME"] = generate_utils.getHandToggleParam()
+ print(replaceMacros(ANIMATOR_LAYER_TASTT, params))
+
+ params["TASTT_HIP_TOGGLE_LAYER_U2"] = get_u2("1107", state)
+ params["TASTT_LAYER_U2"] = params["TASTT_HIP_TOGGLE_LAYER_U2"]
+ params["TASTT_LAYER_NAME"] = generate_utils.getHipToggleParam()
+ print(replaceMacros(ANIMATOR_LAYER_TASTT, params))
+
params["TASTT_RESIZE_LAYER_U2"] = get_u2("1107", state)
params["TASTT_LAYER_U2"] = params["TASTT_RESIZE_LAYER_U2"]
params["TASTT_LAYER_NAME"] = "TaSTT_Resize"
@@ -745,7 +760,7 @@ def genTasttResizeLayer(state):
print(replaceMacros(TASTT_NARY_STATE_HEADER_TRANSITION, params))
print(replaceMacros(TASTT_NARY_STATE_FOOTER, params))
-
+
# Animation transitions.
for e0 in range(0, 2):
params["THRESHOLD0"] = str(e0)
@@ -796,7 +811,6 @@ def genTasttResizeLayer(state):
# Layer
params["TASTT_LAYER_U2"] = params["TASTT_RESIZE_LAYER_U2"]
- params["TASTT_LAYER_NAME"] = params["TASTT_LAYER_NAME"]
print(replaceMacros(TASTT_LAYER_HEADER, params))
params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
@@ -810,3 +824,99 @@ def genTasttResizeLayer(state):
print(replaceMacros(TASTT_LAYER_FOOTER, params))
genTasttResizeLayer(state)
+
+def genTasttHipToggleLayer(state):
+ # Default state.
+ params["TASTT_HIP_TOGGLE_ON_U2"] = get_u2("1102", state)
+ params["TASTT_DEFAULT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"]
+ params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"]
+ params["TASTT_STATE_NAME"] = generate_utils.getHipToggleParam() + "_ON"
+ params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
+ anim_meta_filename = "Animations/TaSTT_Lock_World_Enable.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
+ print(replaceMacros(TASTT_ANIM_STATE, params))
+
+ # Active state transition.
+ params["BOOL_PARAM"] = generate_utils.getHipToggleParam()
+ params["THRESHOLD"] = str(0)
+ params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["TASTT_HIP_TOGGLE_OFF_U2"] = get_u2("1102", state)
+ params["DST_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
+ # Active state.
+ params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"]
+ params["TASTT_STATE_NAME"] = generate_utils.getHipToggleParam() + "_OFF"
+ params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
+ anim_meta_filename = "Animations/TaSTT_Lock_World_Disable.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
+ print(replaceMacros(TASTT_ANIM_STATE, params))
+
+ # Default state transition.
+ params["BOOL_PARAM"] = generate_utils.getHipToggleParam()
+ params["THRESHOLD"] = str(1)
+ params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["DST_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
+ # Layer
+ params["TASTT_LAYER_U2"] = params["TASTT_HIP_TOGGLE_LAYER_U2"]
+ params["TASTT_LAYER_NAME"] = generate_utils.getHipToggleParam()
+ print(replaceMacros(TASTT_LAYER_HEADER, params))
+
+ params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"]
+ print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params))
+ params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"]
+ print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params))
+
+ print(replaceMacros(TASTT_LAYER_FOOTER, params))
+
+genTasttHipToggleLayer(state)
+
+def genTasttHandToggleLayer(state):
+ # Default state.
+ params["TASTT_HAND_TOGGLE_ON_U2"] = get_u2("1102", state)
+ params["TASTT_DEFAULT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"]
+ params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"]
+ params["TASTT_STATE_NAME"] = generate_utils.getHandToggleParam() + "_ON"
+ params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
+ anim_meta_filename = "Animations/TaSTT_Lock_Hand_Enable.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
+ print(replaceMacros(TASTT_ANIM_STATE, params))
+
+ # Active state transition.
+ params["BOOL_PARAM"] = generate_utils.getHandToggleParam()
+ params["THRESHOLD"] = str(0)
+ params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["TASTT_HAND_TOGGLE_OFF_U2"] = get_u2("1102", state)
+ params["DST_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
+ # Active state.
+ params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"]
+ params["TASTT_STATE_NAME"] = generate_utils.getHandToggleParam() + "_OFF"
+ params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
+ anim_meta_filename = "Animations/TaSTT_Lock_Hand_Disable.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
+ print(replaceMacros(TASTT_ANIM_STATE, params))
+
+ # Default state transition.
+ params["BOOL_PARAM"] = generate_utils.getHandToggleParam()
+ params["THRESHOLD"] = str(1)
+ params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["DST_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
+ # Layer
+ params["TASTT_LAYER_U2"] = params["TASTT_HAND_TOGGLE_LAYER_U2"]
+ params["TASTT_LAYER_NAME"] = generate_utils.getHandToggleParam()
+ print(replaceMacros(TASTT_LAYER_HEADER, params))
+
+ params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"]
+ print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params))
+ params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"]
+ print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params))
+
+ print(replaceMacros(TASTT_LAYER_FOOTER, params))
+
+genTasttHandToggleLayer(state)
diff --git a/generate_params.py b/generate_params.py
index 2bede87..665272b 100644
--- a/generate_params.py
+++ b/generate_params.py
@@ -54,6 +54,12 @@ print(generate_utils.replaceMacros(BOOL_PARAM, params))
params["PARAM_NAME"] = generate_utils.getEnableParam()
print(generate_utils.replaceMacros(BOOL_PARAM, params))
+params["PARAM_NAME"] = generate_utils.getHandToggleParam()
+print(generate_utils.replaceMacros(BOOL_PARAM, params))
+
+params["PARAM_NAME"] = generate_utils.getHipToggleParam()
+print(generate_utils.replaceMacros(BOOL_PARAM, params))
+
for i in range(0, generate_utils.NUM_LAYERS):
params["PARAM_NAME"] = generate_utils.getLayerParam(i)
print(generate_utils.replaceMacros(INT_PARAM, params))
diff --git a/generate_utils.py b/generate_utils.py
index a30b967..68301fa 100644
--- a/generate_utils.py
+++ b/generate_utils.py
@@ -36,6 +36,12 @@ def getResize0Param():
def getResize1Param():
return "TaSTT_Resize_1"
+def getHipToggleParam():
+ return "TaSTT_Hip_Toggle"
+
+def getHandToggleParam():
+ return "TaSTT_Hand_Toggle"
+
# Each layer controls a group of cells. There's only one letter per layer, thus
# this is also the name of the parameter which sets the letter for a layer.
def getLayerParam(which_layer):
diff --git a/libunity.py b/libunity.py
new file mode 100644
index 0000000..897518f
--- /dev/null
+++ b/libunity.py
@@ -0,0 +1,4 @@
+# Merge two FX layers.
+# fx0, fx1 are both paths to animators.
+def mergeFX(fx0, fx1):
+ pass
diff --git a/osc_ctrl.py b/osc_ctrl.py
index 844e311..ec3515d 100644
--- a/osc_ctrl.py
+++ b/osc_ctrl.py
@@ -244,7 +244,7 @@ def resizeBoard(num_lines, tx_state, shrink_only):
# This may take multiple calls to complete. Returns True once it's done.
def sendMessageLazy(msg, tx_state):
lines = splitMessage(msg)
- resizeBoard(len(lines), tx_state, shrink_only=False)
+ #resizeBoard(len(lines), tx_state, shrink_only=False)
msg_encoded = encodeMessage(lines)
msg_encoded_len = len(msg_encoded)
@@ -280,7 +280,7 @@ def sendMessageLazy(msg, tx_state):
sendMessageCellDiscrete(cell_msg, cell)
tx_state.last_msg_encoded = msg_encoded
- resizeBoard(len(lines), tx_state, shrink_only=True)
+ #resizeBoard(len(lines), tx_state, shrink_only=True)
return True
def sendMessage(msg, page_sleep_s):
@@ -320,28 +320,6 @@ def sendRawMessage(msg):
def clear():
sendRawMessage([state.encoding[' ']] * BOARD_ROWS * BOARD_COLS)
-def closeBoard():
- print("Closing board... "),
- addr="/avatar/parameters/" + generate_utils.getResize0Param()
- client.send_message(addr, True)
- addr="/avatar/parameters/" + generate_utils.getResize1Param()
- client.send_message(addr, True)
-
- time.sleep(CELL_TX_TIME_S / 3.0)
-
- addr="/avatar/parameters/" + generate_utils.getResizeEnableParam()
- client.send_message(addr, True)
-
- # The animation is 0.5 seconds, with another 0.5 second buffer after. We
- # want to stop in that buffer.
- time.sleep(0.7)
-
- addr="/avatar/parameters/" + generate_utils.getResizeEnableParam()
- client.send_message(addr, False)
-
- time.sleep(1)
- print("done")
-
if __name__ == "__main__":
generateEncoding(state)
diff --git a/transcribe.py b/transcribe.py
index 4548214..d0e3574 100644
--- a/transcribe.py
+++ b/transcribe.py
@@ -22,7 +22,9 @@ class AudioState:
# The maximum length that recordAudio() will put into frames before it
# starts dropping from the start.
- MAX_LENGTH_S = 30
+ MAX_LENGTH_S = 90
+ # The minimum length that recordAudio() will wait for before saving audio.
+ MIN_LENGTH_S = 3
# PyAudio object
p = None
@@ -50,15 +52,19 @@ def getMicStream():
print("Finding index mic...")
got_match = False
device_index = -1
+ mic_str = "Focusrite"
+ index_str = "Digital Audio Interface"
+ target_str = mic_str
while got_match == False:
for i in range(0, numdevices):
if (audio_state.p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
device_name = audio_state.p.get_device_info_by_host_api_device_index(0, i).get('name')
- #print("Input Device id ", i, " - ", device_name)
- if "Digital Audio Interface" in device_name:
+ print("Input Device id ", i, " - ", device_name)
+ if target_str in device_name:
print("Got match: {}".format(device_name))
device_index = i
got_match = True
+ break
if got_match == False:
print("No match, sleeping")
time.sleep(3)
@@ -87,6 +93,10 @@ def recordAudio(audio_state):
# Saves audio. recordAudio() may continue running while this takes place.
def saveAudio(audio_state, filename):
+ min_frames = int(audio_state.RATE * audio_state.MIN_LENGTH_S / audio_state.CHUNK)
+ if len(audio_state.frames) < min_frames:
+ return
+
wf = wave.open(filename, 'wb')
wf.setnchannels(audio_state.CHANNELS)
wf.setsampwidth(audio_state.p.get_sample_size(audio_state.FORMAT))
@@ -106,20 +116,17 @@ def resetAudio(audio_state):
# Transcribe the audio recorded in a file.
def transcribe(model, filename):
- print("Loading audio")
- audio = whisper.load_audio(filename)
- audio = whisper.pad_or_trim(audio)
- mel = whisper.log_mel_spectrogram(audio).to(model.device)
- options = whisper.DecodingOptions(language = "en")
- result = whisper.decode(model, mel, options)
- print("Transcribed text: {}".format(result.text))
- return result.text
+ result = whisper.transcribe(model=model, audio=filename, language="en")
+ return result["text"]
def transcribeAudio(audio_state, model):
while audio_state.transcribe_audio == True:
- print("Saving audio")
saveAudio(audio_state, "audio.wav")
+ if not os.path.isfile("audio.wav"):
+ time.sleep(0.1)
+ continue
+
print("Beginning transcription")
text = transcribe(model, "audio.wav")
@@ -127,6 +134,8 @@ def transcribeAudio(audio_state, model):
audio_state.text = text
audio_state.text_lock.release()
+ print("Transcription: {}".format(audio_state.text))
+
# Pace this out
time.sleep(0.2)
@@ -143,6 +152,9 @@ def sendAudio(audio_state):
time.sleep(0.05)
if __name__ == "__main__":
+ if os.path.isfile("audio.wav"):
+ os.remove("audio.wav")
+
audio_state = getMicStream()
record_audio_thd = threading.Thread(target = recordAudio, args = [audio_state])
@@ -157,9 +169,9 @@ if __name__ == "__main__":
transcribe_audio_thd.daemon = True
transcribe_audio_thd.start()
- send_audio_thd = threading.Thread(target = sendAudio, args = [audio_state])
- send_audio_thd.daemon = True
- send_audio_thd.start()
+ #send_audio_thd = threading.Thread(target = sendAudio, args = [audio_state])
+ #send_audio_thd.daemon = True
+ #send_audio_thd.start()
print("Press enter to start a new message")
for line in fileinput.input():