set last page flag on opus in case something wants that
This commit is contained in:
parent
6e50a386ec
commit
f0960f6115
|
@ -14,9 +14,11 @@ def crc32ogg(seq):
|
|||
return crc
|
||||
|
||||
|
||||
def paginate(sequence: int, content: bytes):
|
||||
def paginate(sequence: int, is_last: bool, content: bytes):
|
||||
# Version, flags, position, serial number, sequence number, checksum, segments, segment table
|
||||
flags = 2 if sequence == 0 else 0
|
||||
if is_last:
|
||||
flags |= 4
|
||||
page = bytearray(
|
||||
b"OggS"
|
||||
+ struct.pack(
|
||||
|
@ -27,8 +29,6 @@ def paginate(sequence: int, content: bytes):
|
|||
+ content
|
||||
)
|
||||
struct.pack_into("<I", page, 22, crc32ogg(page))
|
||||
if sequence == 0:
|
||||
print(page)
|
||||
return page
|
||||
|
||||
|
||||
|
@ -64,17 +64,20 @@ def write_opus(ktss: bytes, filename: pathlib.Path):
|
|||
+ channel_mapping
|
||||
)
|
||||
# Channel mapping is apparently incorrect for 6 channels but I don't care
|
||||
out.write(paginate(0, opus_header))
|
||||
out.write(paginate(0, False, opus_header))
|
||||
|
||||
comment_header = b"OpusTags\4\0\0\0ktss\0\0\0\0\0\0\0\0"
|
||||
out.write(paginate(1, comment_header))
|
||||
out.write(paginate(1, False, comment_header))
|
||||
|
||||
# Weird length encoding here, not opus standard
|
||||
sequence = 2
|
||||
offset = start_offset
|
||||
while offset < len(ktss):
|
||||
(packet_len,) = struct.unpack(">I", ktss[offset : offset + 4])
|
||||
out.write(paginate(sequence, ktss[offset + 8 : offset + 8 + packet_len]))
|
||||
is_last = offset + 8 + packet_len >= len(ktss)
|
||||
out.write(
|
||||
paginate(sequence, is_last, ktss[offset + 8 : offset + 8 + packet_len])
|
||||
)
|
||||
|
||||
offset += packet_len + 8
|
||||
sequence += 1
|
||||
|
|
Loading…
Reference in a new issue