1
0
mirror of https://github.com/Escartem/AnimeWwise.git synced 2026-06-04 23:40:25 +08:00

added vorbis support

This commit is contained in:
Escartem
2024-12-03 19:16:47 +01:00
parent 4faf25df5a
commit 095bdc8dd2
2 changed files with 72 additions and 27 deletions

View File

@@ -14,48 +14,57 @@ class FileReader:
if name:
self.name = name
def _read(self, mode:str, bufferLength:int, endianness:str=None) -> bytes:
def _read(self, mode:str, bufferLength:int, endianness:str=None, pos:int=None) -> bytes:
# endianness override
if endianness is None:
endianness = self.endianness
endianness = "<" if endianness == "little" else ">"
return struct.unpack(f"{endianness}{mode}", bytearray(self.stream.read(bufferLength)))[0]
if pos:
pos_backup = self.GetBufferPos()
self.SetBufferPos(pos)
data = struct.unpack(f"{endianness}{mode}", bytearray(self.stream.read(bufferLength)))[0]
if pos:
self.SetBufferPos(pos_backup)
return data
# read methods
def ReadInt8(self, endianness:str=None) -> int:
return self._read("b", 1, endianness)
def ReadInt8(self, endianness:str=None, pos:int=None) -> int:
return self._read("b", 1, endianness, pos)
def ReadUInt8(self, endianness:str=None) -> int:
return self._read("B", 1, endianness)
def ReadUInt8(self, endianness:str=None, pos:int=None) -> int:
return self._read("B", 1, endianness, pos)
def ReadInt16(self, endianness:str=None) -> int:
return self._read("h", 2, endianness)
def ReadInt16(self, endianness:str=None, pos:int=None) -> int:
return self._read("h", 2, endianness, pos)
def ReadUInt16(self, endianness:str=None) -> int:
return self._read("H", 2, endianness)
def ReadUInt16(self, endianness:str=None, pos:int=None) -> int:
return self._read("H", 2, endianness, pos)
def ReadInt32(self, endianness:str=None) -> int:
return self._read("i", 4, endianness)
def ReadInt32(self, endianness:str=None, pos:int=None) -> int:
return self._read("i", 4, endianness, pos)
def ReadUInt32(self, endianness:str=None) -> int:
return self._read("I", 4, endianness)
def ReadUInt32(self, endianness:str=None, pos:int=None) -> int:
return self._read("I", 4, endianness, pos)
def ReadLong(self, endianness:str=None) -> int:
return self._read("l", 4, endianness)
def ReadLong(self, endianness:str=None, pos:int=None) -> int:
return self._read("l", 4, endianness, pos)
def ReadULong(self, endianness:str=None) -> int:
return self._read("L", 4, endianness)
def ReadULong(self, endianness:str=None, pos:int=None) -> int:
return self._read("L", 4, endianness, pos)
def ReadLongLong(self, endianness:str=None) -> int:
return self._read("q", 8, endianness)
def ReadLongLong(self, endianness:str=None, pos:int=None) -> int:
return self._read("q", 8, endianness, pos)
def ReadULongLong(self, endianness:str=None) -> int:
return self._read("Q", 8, endianness)
def ReadULongLong(self, endianness:str=None, pos:int=None) -> int:
return self._read("Q", 8, endianness, pos)
def ReadBytes(self, length:int, endianness:str=None) -> bytes:
return self._read(f"{str(length)}s", int(length), endianness)
def ReadBytes(self, length:int, endianness:str=None, pos:int=None) -> bytes:
return self._read(f"{str(length)}s", int(length), endianness, pos)
# buffer utils
def GetBufferPos(self) -> int: