1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#!/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
|