35 lines
771 B
Python
35 lines
771 B
Python
import struct
|
|
import sys
|
|
|
|
with open(sys.argv[1], 'rb') as fp:
|
|
data = fp.read()
|
|
|
|
ofs = 16
|
|
counter = 0
|
|
|
|
while ofs < len(data):
|
|
header = struct.unpack('B', data[ofs:ofs+1])[0]
|
|
ofs += 1
|
|
print(f'#{ofs} Header: {header}')
|
|
|
|
if header == 0x01:
|
|
srate = struct.unpack('I', data[ofs:ofs+4])[0]
|
|
ofs += 4
|
|
samples = struct.unpack('Q', data[ofs:ofs+8])[0]
|
|
ofs += 8
|
|
print(f'srate: {srate} | samples: {samples}\n')
|
|
elif header == 0x02:
|
|
dlen = struct.unpack('Q', data[ofs:ofs+8])[0]
|
|
ofs += 8
|
|
with open(f'{counter}.opus', 'wb') as fp:
|
|
fp.write(data[ofs:ofs+dlen])
|
|
counter += 1
|
|
ofs += dlen
|
|
print(f'opus len {dlen}')
|
|
elif header == 0x03:
|
|
silence = struct.unpack('Q', data[ofs:ofs+8])[0]
|
|
ofs += 8
|
|
print(f'silence {silence}')
|
|
elif header == 0x04:
|
|
break
|