summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-10-24 22:08:06 -0700
committeryum <yum.food.vr@gmail.com>2022-10-24 22:08:06 -0700
commit08655f96dc798e3e129058a5e97c5aa7ff96e798 (patch)
treeb2543852ec52fec22319f562a737e48e95681b37
parent4b0d262f4630538cc04f6e8bda407fe3f3ba213b (diff)
STT now beeps when it shows text, and can be locked to world
Empty cells are excluded from the beeping behavior. Note: I have not checked in the prefab with the audio source yet. * libtastt gen_fx now adds 3 toggles to FX layer: toggle board, toggle world lock, toggle beep sound * libunity guid_map can now append instead of replacing * TaSTT_Toggle_{On,Off}.anim now use the prefab path, as do generated animations
-rw-r--r--Animations/TaSTT_Toggle_Off.anim4
-rw-r--r--Animations/TaSTT_Toggle_On.anim4
-rw-r--r--Examples/FX_no_write_defaults.controller2
-rw-r--r--dev_cheatsheat.txt2
-rw-r--r--generate_params.py6
-rw-r--r--generate_utils.py7
-rw-r--r--libtastt.py53
-rw-r--r--libunity.py8
-rw-r--r--osc_ctrl.py14
9 files changed, 93 insertions, 7 deletions
diff --git a/Animations/TaSTT_Toggle_Off.anim b/Animations/TaSTT_Toggle_Off.anim
index 7a604bc..644379f 100644
--- a/Animations/TaSTT_Toggle_Off.anim
+++ b/Animations/TaSTT_Toggle_Off.anim
@@ -42,7 +42,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_IsActive
- path: TaSTT
+ path: World Constraint/Container/TaSTT
classID: 1
script: {fileID: 0}
m_PPtrCurves: []
@@ -107,7 +107,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_IsActive
- path: TaSTT
+ path: World Constraint/Container/TaSTT
classID: 1
script: {fileID: 0}
m_EulerEditorCurves: []
diff --git a/Animations/TaSTT_Toggle_On.anim b/Animations/TaSTT_Toggle_On.anim
index 667cfdf..97ca5e4 100644
--- a/Animations/TaSTT_Toggle_On.anim
+++ b/Animations/TaSTT_Toggle_On.anim
@@ -42,7 +42,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_IsActive
- path: TaSTT
+ path: World Constraint/Container/TaSTT
classID: 1
script: {fileID: 0}
m_PPtrCurves: []
@@ -107,7 +107,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_IsActive
- path: TaSTT
+ path: World Constraint/Container/TaSTT
classID: 1
script: {fileID: 0}
m_EulerEditorCurves: []
diff --git a/Examples/FX_no_write_defaults.controller b/Examples/FX_no_write_defaults.controller
index 1ee52b8..5136e82 100644
--- a/Examples/FX_no_write_defaults.controller
+++ b/Examples/FX_no_write_defaults.controller
@@ -6,7 +6,7 @@ AnimatorController:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_Name: FX2
+ m_Name: FX_no_write_defaults
serializedVersion: 5
m_AnimatorParameters:
- m_Name: GestureLeftWeight
diff --git a/dev_cheatsheat.txt b/dev_cheatsheat.txt
index e23b8cc..db9697f 100644
--- a/dev_cheatsheat.txt
+++ b/dev_cheatsheat.txt
@@ -10,7 +10,7 @@ Combining TaSTT_fx with a normal animator
date
rm -rf generated/animations
./libunity.py guid_map --project_root=$(cd ..; pwd) --save_to guid.map
-./libtastt.py gen_anims
+#./libtastt.py gen_anims
./libtastt.py gen_fx > TaSTT_fx.controller
./libunity.py merge --fx0 ../FXGeneric.controller --fx1 ../FXSpecific.controller > FX0.controller
./libunity.py add_toggle --fx0 FX0.controller > FX1.controller
diff --git a/generate_params.py b/generate_params.py
index d91e801..782fdb4 100644
--- a/generate_params.py
+++ b/generate_params.py
@@ -63,6 +63,12 @@ print(generate_utils.replaceMacros(BOOL_PARAM, params))
params["PARAM_NAME"] = generate_utils.getToggleParam()
print(generate_utils.replaceMacros(BOOL_PARAM, params))
+params["PARAM_NAME"] = generate_utils.getSpeechNoiseToggleParam()
+print(generate_utils.replaceMacros(BOOL_PARAM, params))
+
+params["PARAM_NAME"] = generate_utils.getLockWorldParam()
+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 e066eb1..df08953 100644
--- a/generate_utils.py
+++ b/generate_utils.py
@@ -12,7 +12,6 @@ def replaceMacros(lines, macro_defs):
BOARD_ROWS=8
BOARD_COLS=22
INDEX_BITS=4
-#CHARS_PER_CELL=4
CHARS_PER_CELL=80
NUM_LAYERS=ceil((BOARD_ROWS * BOARD_COLS) / (2**INDEX_BITS))
@@ -46,6 +45,12 @@ def getHandToggleParam():
def getToggleParam():
return "TaSTT_Toggle"
+def getSpeechNoiseToggleParam():
+ return "TaSTT_Speech_Noise_Toggle"
+
+def getLockWorldParam():
+ return "TaSTT_Lock_World"
+
# 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: int) -> str:
diff --git a/libtastt.py b/libtastt.py
index 9492e35..12c95f0 100644
--- a/libtastt.py
+++ b/libtastt.py
@@ -170,6 +170,7 @@ def generateAnimations(anim_dir, guid_map):
keyframe.mapping['value'] = str(letter + 0.1)
# Populate path to letter parameter
curve.mapping['attribute'] = "material.{}".format(generate_utils.getShaderParamByRowCol(row, col))
+ curve.mapping['path'] = "World Constraint/Container/TaSTT"
# Add curve to animation
clip.mapping['m_FloatCurves'].sequence.append(curve)
clip.mapping['m_EditorCurves'].sequence.append(curve)
@@ -332,6 +333,42 @@ def generateFXLayer(which_layer: int, anim: libunity.UnityAnimator, layer:
dummy_param = generate_utils.getDummyParam()
anim.addTransitionBooleanCondition(state,
home_state_transition, dummy_param, False)
+ pass
+
+# Generic toggle adding utility.
+# Generates the layer and parameter.
+def generateToggle(layer_name: str,
+ gen_anim_dir: str,
+ off_anim_basename: str,
+ on_anim_basename: str,
+ anim: libunity.UnityAnimator):
+ layer = anim.addLayer(layer_name)
+
+ # For simplicity, use the layer name as the parameter name.
+ parameter_name = layer_name
+ anim.addParameter(parameter_name, bool)
+
+ off_state = anim.addAnimatorState(layer, layer_name + "_Off",
+ is_default_state = True)
+ on_state = anim.addAnimatorState(layer, layer_name + "_On", dy=100)
+
+ off_anim_path = gen_anim_dir + off_anim_basename
+ off_anim_meta = libunity.Metadata()
+ off_anim_meta.load(off_anim_path)
+ on_anim_path = gen_anim_dir + on_anim_basename
+ on_anim_meta = libunity.Metadata()
+ on_anim_meta.load(on_anim_path)
+
+ anim.setAnimatorStateAnimation(off_state, off_anim_meta.guid)
+ anim.setAnimatorStateAnimation(on_state, on_anim_meta.guid)
+
+ off_to_on_trans = anim.addTransition(on_state)
+ anim.addTransitionBooleanCondition(off_state,
+ off_to_on_trans, parameter_name, True)
+
+ on_to_off_trans = anim.addTransition(off_state)
+ anim.addTransitionBooleanCondition(on_state,
+ on_to_off_trans, parameter_name, False)
pass
@@ -345,6 +382,22 @@ def generateFX(guid_map, gen_anim_dir):
print("Generating layer {}/{}".format(which_layer, len(layers.items())), file=sys.stderr)
generateFXLayer(which_layer, anim, layer, gen_anim_dir)
+ generateToggle(generate_utils.getSpeechNoiseToggleParam(),
+ "Animations/",
+ "TaSTT_Speech_Noise_Off.anim",
+ "TaSTT_Speech_Noise_On.anim",
+ anim)
+ generateToggle(generate_utils.getToggleParam(),
+ "Animations/",
+ "TaSTT_Toggle_Off.anim",
+ "TaSTT_Toggle_On.anim",
+ anim)
+ generateToggle(generate_utils.getLockWorldParam(),
+ "Animations/",
+ "TaSTT_Lock_World_Disable.anim",
+ "TaSTT_Lock_World_Enable.anim",
+ anim)
+
return anim
def parseArgs():
diff --git a/libunity.py b/libunity.py
index 486df9f..dcf3b69 100644
--- a/libunity.py
+++ b/libunity.py
@@ -1120,6 +1120,8 @@ if __name__ == "__main__":
"result of the computation")
parser.add_argument("--guid_map", type=str, help="Path to guid.map, " +
"generated by a previous call to `guid_map`")
+ parser.add_argument("--guid_map_append", type=bool, help="If set, " +
+ "append to GUID map instead of overwriting.")
args = parser.parse_args()
if args.cmd == "merge":
@@ -1152,6 +1154,12 @@ if __name__ == "__main__":
print("Looking up GUIDs under {}".format(args.project_root),
file=sys.stderr)
guid_map = getGuidMap(args.project_root)
+ if args.guid_map_append:
+ tmp_map = {}
+ with open(args.save_to, "rb") as f:
+ tmp_map = pickle.load(f)
+ # combine guid_map and tmp_map
+ guid_map = {**guid_map, **tmp_map}
print("Saving to {}".format(args.save_to), file=sys.stderr)
with open(args.save_to, 'wb') as f:
pickle.dump(guid_map, f)
diff --git a/osc_ctrl.py b/osc_ctrl.py
index 14f4ba5..4ef238e 100644
--- a/osc_ctrl.py
+++ b/osc_ctrl.py
@@ -99,6 +99,12 @@ def sendMessageCellDiscrete(client, msg_cell, which_cell):
# Disable each layer.
disable(client)
+ empty_cell = [state.encoding[' ']] * NUM_LAYERS
+ if msg_cell != state.encoding[' '] * BOARD_COLS:
+ addr="/avatar/parameters/" + generate_utils.getSpeechNoiseToggleParam()
+ client.send_message(addr, False)
+ print("beep")
+
time.sleep(CELL_TX_TIME_S / 3.0)
# Really long messages just wrap back around.
@@ -112,6 +118,14 @@ def sendMessageCellDiscrete(client, msg_cell, which_cell):
# Seek each layer to the current cell.
for i in range(0, len(msg_cell)):
updateCell(client, i, msg_cell[i], s0, s1, s2, s3)
+ if msg_cell != empty_cell:
+ addr="/avatar/parameters/" + generate_utils.getSpeechNoiseToggleParam()
+ client.send_message(addr, False)
+
+ # If we're drawing something, turn the beep on.
+ if msg_cell != empty_cell:
+ addr="/avatar/parameters/" + generate_utils.getSpeechNoiseToggleParam()
+ client.send_message(addr, True)
# Wait for convergence.
time.sleep(CELL_TX_TIME_S / 3.0)