forked from larrykoubiak/pyplaydia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsector.py
97 lines (79 loc) · 2.17 KB
/
sector.py
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
from enum import Enum, Flag, auto
from struct import pack, unpack
class Submodes(Flag):
EOR = auto()
Video = auto()
Audio = auto()
Data = auto()
Trigger = auto()
Form = auto()
RTS = auto()
EOF = auto()
class Codings(Flag):
Stereo = 0x01
LowSampleRate = 0x04
EightBit = 0x10
class Sector():
def __init__(self, data, filestreamid, filestreamoffset):
self.__filestreamid = filestreamid
self.__filestreamoffset = filestreamoffset
header = unpack("<12sBBBBBBBBI", data)
self.__syncpattern = header[0]
self.__minute = header[1]
self.__second = header[2]
self.__block = header[3]
self.__mode = header[4]
self.__filenumber = header[5]
self.__channel = header[6]
self.__submode = Submodes(header[7])
self.__coding = Codings(header[8])
self.__data = None
@property
def FileStreamId(self):
return self.__filestreamid
@property
def FileStreamOffset(self):
return self.__filestreamoffset
@property
def SyncPattern(self):
return self.__syncpattern
@property
def Minute(self):
return (self.__minute & 0xF + (10 * (self.__minute >> 4)))
@property
def Second(self):
return (self.__second & 0xF + (10 * (self.__second >> 4)))
@property
def Block(self):
return (self.__block & 0xF + (10 * (self.__block >> 4)))
@property
def Mode(self):
return self.__mode
@property
def FileNumber(self):
return self.__filenumber
@property
def Channel(self):
return self.__channel
@property
def Submode(self):
return self.__submode
@property
def Coding(self):
return self.__coding
@property
def Data(self):
return self.__data
@Data.setter
def Data(self, value):
self.__data = value
def __repr__(self):
formatstr = '<Sector Mode {} File {} Channel {} {} {}>'
result = formatstr.format(
self.__mode,
self.__filenumber,
self.__channel,
self.__submode,
self.__coding
)
return result