summaryrefslogtreecommitdiffstats
path: root/osc_ctrl.py
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-10-27 16:00:22 -0700
committeryum <yum.food.vr@gmail.com>2022-10-27 16:00:22 -0700
commitfd7ea2f72a486888c30726a2482fcc1f7fce9378 (patch)
treecae0ee99fca59d65062074a546c3975404f7ad89 /osc_ctrl.py
parenteefa14c431efa4e3bc16cafbcb004e41622c2411 (diff)
Add fast clear animation
The old clear mechanism would write an empty cell in every layer, which would take (0.3 seconds) * (11 layers) == about 3 seconds. The new mechanism drives an animation which overwrites every character slot simultaneously, taking only 0.1 seconds. A nice ~30x speedup. * Fix the transcription exponential backoff logic. Saying new things will reset the delay to the minimum again. * Clearing the board will also reset the transcription delay back to the minimum. * Tune the noise detection minimum to 0.2 instead of 0.1. Speaking softly into the mic seems to fail to exceed the 0.1 threshold pretty often.
Diffstat (limited to 'osc_ctrl.py')
-rw-r--r--osc_ctrl.py44
1 files changed, 26 insertions, 18 deletions
diff --git a/osc_ctrl.py b/osc_ctrl.py
index 328b55c..2fede06 100644
--- a/osc_ctrl.py
+++ b/osc_ctrl.py
@@ -35,25 +35,27 @@ state = EvilGlobalState()
# The characters in the TaSTT are all numbered from top left to bottom right.
# This function provides a mapping from letter ('a') to index (26).
-def generateEncoding(state):
+def generateEncoding():
+ encoding = {}
for i in range(0, 26):
- state.encoding[chr(ord('A') + i)] = i
+ encoding[chr(ord('A') + i)] = i
for i in range(26, 52):
- state.encoding[chr(ord('a') + i - 26)] = i
+ encoding[chr(ord('a') + i - 26)] = i
for i in range(52, 62):
- state.encoding[chr(ord('0') + i - 52)] = i
- state.encoding[','] = 62
- state.encoding['.'] = 63
- state.encoding[' '] = 64
- state.encoding['?'] = 65
- state.encoding['!'] = 66
- state.encoding[';'] = 67
- state.encoding[':'] = 68
- state.encoding['-'] = 69
- state.encoding['_'] = 70
- state.encoding["'"] = 71
- state.encoding['"'] = 72
-generateEncoding(state)
+ encoding[chr(ord('0') + i - 52)] = i
+ encoding[','] = 62
+ encoding['.'] = 63
+ encoding[' '] = 64
+ encoding['?'] = 65
+ encoding['!'] = 66
+ encoding[';'] = 67
+ encoding[':'] = 68
+ encoding['-'] = 69
+ encoding['_'] = 70
+ encoding["'"] = 71
+ encoding['"'] = 72
+ return encoding
+state.encoding = generateEncoding()
# Encodes a list of lines into the character set used by the board.
# Pads lines with spaces and adds lines so that the total number of
@@ -329,7 +331,13 @@ def sendRawMessage(client, msg):
sendMessageCellDiscrete(client, cell_msg, cell)
def clear(client):
- sendRawMessage(client, [state.encoding[' ']] * BOARD_ROWS * BOARD_COLS)
+ addr="/avatar/parameters/" + generate_utils.getClearBoardParam()
+ client.send_message(addr, True)
+
+ time.sleep(CELL_TX_TIME_S / 3.0)
+
+ addr="/avatar/parameters/" + generate_utils.getClearBoardParam()
+ client.send_message(addr, False)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
@@ -339,7 +347,7 @@ if __name__ == "__main__":
client = getClient(args.i, args.p)
- generateEncoding(state)
+ state.encoding = generateEncoding()
tx_state = OscTxState()
for line in fileinput.input():