--- /dev/null
+#!/usr/bin/python3
+#
+# assuming 48kHz
+
+import sys
+from enum import Enum
+
+samples = []
+with open('ints', 'r') as f:
+ for l in f.readlines():
+ l = l.strip()
+ if l == "":
+ continue
+ x = float(l) / pow(2, 31)
+ if abs(x - 0.038) < 0.002:
+ samples.append(1)
+ elif abs(x - 0.092) < 0.002:
+ samples.append(2)
+ elif abs(x + 0.092) < 0.002:
+ samples.append(3)
+ elif abs(x + 0.038) < 0.002:
+ samples.append(4)
+ elif abs(x - 0.071) < 0.002:
+ samples.append(5)
+ elif abs(x + 0.071) < 0.002:
+ samples.append(6)
+ else:
+ print("Unknown sample %f" % x)
+ sys.exit(1)
+
+
+class State(Enum):
+ QUIESCENT = 0
+ GOT_SYNC_FIRST = 1
+ GOT_SYNC = 2
+ AWAIT_UUID_SUB0 = 3
+ AWAIT_UUID_SUB1 = 4
+ AWAIT_UUID_SUB2 = 5
+ AWAIT_UUID_SUB3 = 6
+ AWAIT_EUI0 = 7
+ AWAIT_EUI1 = 8
+ AWAIT_EUI2 = 9
+ AWAIT_CRC0 = 10
+ AWAIT_CRC1 = 11
+ AWAIT_REMBITS = 12
+
+i = 0
+bits = []
+while True:
+ four = samples[i:i+4]
+ if four == [1, 2, 2, 1] or four == [4, 3, 3, 4]:
+ bits.append(0)
+ elif four == [5, 5, 6, 6] or four == [6, 6, 5, 5]:
+ bits.append(1)
+ elif len(four) == 0:
+ break
+ else:
+ print("Unknown symbol %s" % four)
+ sys.exit(1)
+ i += 4
+
+
+def to_int(bits):
+ i = 0
+ for b in bits:
+ i = i << 1
+ if b:
+ i |= 1
+ return i
+
+
+i = 0
+while True:
+ sync_word = to_int(bits[i:i+16])
+ if sync_word == 0x4d56:
+ print("Sync")
+ else:
+ print("Out of sync")
+ i += 16
+
+ edit_rate = to_int(bits[i:i+4])
+ if edit_rate == 0:
+ print("24fps")
+ else:
+ print("Unknown edit rate")
+ i += 4
+
+ # Reserved
+ i += 2
+
+ print("UUID sub index: %d" % to_int(bits[i:i+2]))
+ i += 2
+
+ print("UUID sub: %8x" % to_int(bits[i:i+32]))
+ i += 32
+
+ # Edit unit index
+ print("Edit unit index: %d" % to_int(bits[i:i+24]))
+ i += 24
+
+ # CRC
+ i += 16
+
+ # Reserved
+ i += 4
+
+ # RemBits
+ if edit_rate == 0:
+ i += 25
+
+
+