forked from K0lb3/UnityPy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAudioClip.py
More file actions
60 lines (53 loc) · 2.46 KB
/
AudioClip.py
File metadata and controls
60 lines (53 loc) · 2.46 KB
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
from .NamedObject import NamedObject
from ..enums import AudioType, AudioCompressionFormat, AUDIO_TYPE_EXTEMSION
from ..export import AudioClipConverter
from ..helpers.ResourceReader import get_resource_data
class AudioClip(NamedObject):
def __init__(self, reader):
super().__init__(reader=reader)
self.m_Source = ""
version = self.version
if version < (5,): # 5.0 down
self.m_Format = reader.read_int()
self.m_Type = AudioType(reader.read_int())
self.m_3D = reader.read_boolean()
self.m_UseHardware = reader.read_boolean()
reader.align_stream()
if version >= (3, 2): # and version <= (5,): # 3.2.0 to 5
self.m_Stream = reader.read_int()
self.m_Size = reader.read_int()
tsize = self.m_Size + 4 - self.m_Size % 4 if (self.m_Size % 4 != 0) else self.m_Size
if reader.byte_size + reader.byte_start - reader.Position != tsize:
self.m_Offset = reader.read_u_int()
self.m_Source = self.assets_file.full_name + ".resS"
else:
self.m_Size = reader.read_int()
else:
self.m_LoadType = reader.read_int()
self.m_Channels = reader.read_int()
self.m_Frequency = reader.read_int()
self.m_BitsPerSample = reader.read_int()
self.m_Length = reader.read_float()
self.m_IsTrackerFormat = reader.read_boolean()
reader.align_stream()
self.m_SubsoundIndex = reader.read_int()
self.m_PreloadAudioData = reader.read_boolean()
self.m_LoadInBackground = reader.read_boolean()
self.m_Legacy3D = reader.read_boolean()
reader.align_stream()
self.m_Source = reader.read_aligned_string()
self.m_Offset = reader.read_u_long()
self.m_Size = reader.read_long()
self.m_CompressionFormat = AudioCompressionFormat(reader.read_int())
if self.m_Source:
self.m_AudioData = get_resource_data(
self.m_Source, self.assets_file, self.m_Offset, self.m_Size
)
else:
self.m_AudioData = reader.read_bytes(self.m_Size)
@property
def extension(self):
return AUDIO_TYPE_EXTEMSION.get(self.m_CompressionFormat, ".audioclip")
@property
def samples(self) -> dict:
return AudioClipConverter.extract_audioclip_samples(self)