diff options
| author | yum <yum.food.vr@gmail.com> | 2022-10-11 18:59:24 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2022-10-11 18:59:24 -0700 |
| commit | 3e64c05c9f0b67e9ec1ae71153012ce9f29277ad (patch) | |
| tree | 3db220039fc68805807c6e2b7267cf5420c3df11 | |
| parent | 6daa4e6d9aec98d1a99774b967fafb1bb2d58e57 (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-- | .gitmodules | 3 | ||||
| -rw-r--r-- | Animations/TaSTT_Lock_Hand_Disable.anim | 98 | ||||
| -rw-r--r-- | Animations/TaSTT_Lock_Hand_Enable.anim | 98 | ||||
| -rw-r--r-- | Animations/TaSTT_Lock_World_Disable.anim | 53 | ||||
| -rw-r--r-- | Animations/TaSTT_Lock_World_Enable.anim | 53 | ||||
| -rw-r--r-- | TaSTT.fbx | bin | 0 -> 17116 bytes | |||
| m--------- | World-Constraint | 0 | ||||
| -rw-r--r-- | generate_fx.py | 116 | ||||
| -rw-r--r-- | generate_params.py | 6 | ||||
| -rw-r--r-- | generate_utils.py | 6 | ||||
| -rw-r--r-- | libunity.py | 4 | ||||
| -rw-r--r-- | osc_ctrl.py | 26 | ||||
| -rw-r--r-- | transcribe.py | 42 |
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 Binary files differnew file mode 100644 index 0000000..b449755 --- /dev/null +++ b/TaSTT.fbx 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():
|
