Steinberg in progress

This commit is contained in:
Jamie Hardt
2022-12-07 20:03:34 -08:00
parent 75395b5922
commit fa99b9d321

View File

@@ -9,7 +9,7 @@ IXMLTrack = namedtuple('IXMLTrack', ['channel_index', 'interleave_index', 'name'
class SteinbergMetadata:
"""
Vendor-specific Steinberg metadata
Vendor-specific Steinberg metadata.
"""
class AudioSpeakerArrangement(IntEnum):
@@ -49,20 +49,87 @@ class SteinbergMetadata:
AURO_13_0 = 41
AURO_13_1 = 42
def __init__(self, xml : ET.ElementTree) -> None:
Steinberg_xpath = "//BWFXML/STEINBERG"
@classmethod
def present(cls, xml: ET.ElementTree) -> bool:
"""
Parse Steinberg iXML data
Test if `xml` has Steinberg metadata.
:param xml: an iXML ElementTree
"""
x = xml.find(cls.Steinberg_xpath)
return len(x) > 0
def __init__(self, xml: ET.ElementTree) -> None:
"""
Parse Steinberg iXML data.
:param xml: The entire iXML Tree
"""
self.parsed = xml.find("//BWFXML/STEINBERG")
@property
def audio_speaker_arrangement(self) -> AudioSpeakerArrangement:
"""
AudioSpeakerArrangement
"""
val = self.parsed.find("./ATTR_LIST/ATTR[NAME/text() = 'AudioSpeakerArrangement']/VALUE/text()")
return type(self).AudioSpeakerArrangement(int(val))
@property
def sample_format_size(self) -> Optional[int]:
"""
AudioSampleFormatSize
"""
pass
@property
def media_company(self) -> Optional[str]:
"""
MediaCompany
"""
pass
@property
def media_drop_frames(self) -> Optional[bool]:
"""
MediaDropFrames
"""
pass
@property
def media_duration(self) -> Optional[float]:
"""
MediaDuration
"""
pass
@property
def media_start_time(self) -> Optional[float]:
"""
MediaStartTime
"""
pass
@property
def media_track_title(self) -> Optional[str]:
"""
MediaTrackTitle
"""
pass
@property
def program_name(self) -> Optional[str]:
"""
ProgramName
"""
pass
@property
def program_version(self) -> Optional[str]:
"""
ProgramVersion
"""
pass
class WavIXMLFormat:
@@ -158,7 +225,10 @@ class WavIXMLFormat:
"""
Steinberg vendor iXML metadata if present.
"""
if SteinbergMetadata.present(self.raw_xml):
return SteinbergMetadata(self.raw_xml)
else:
return None
def to_dict(self):
return dict(track_list=list(map(lambda x: x._asdict(), self.track_list)),
@@ -169,86 +239,3 @@ class WavIXMLFormat:
family_uid=self.family_uid,
family_name=self.family_name
)
# Nuendo Audio Speaker Arrangement Codes
# Nuendo Keys
# AudioSampleFormatSize, AudioSpeakerArrangement, MediaCompany, MediaDropFrames, MediaDuration(float) (seconds, session length?),
# MediaStartTime(float), MediaTrackTitle, ProgramName, ProgramVersion,
# tests/test_files/nuendo//wavinfo Test Project - Audio - LRCS.wav
# 14
# tests/test_files/nuendo//wavinfo Test Project - Audio - Stereo.wav
# 1
# tests/test_files/nuendo//wavinfo Test Project - Audio - LRC.wav
# 10
# tests/test_files/nuendo//wavinfo Test Project - Audio - Mono.wav
# 0
# tests/test_files/nuendo//wavinfo Test Project - Audio - Quad.wav
# 15
# tests/test_files/nuendo//wavinfo Test Project - Audio - 5.1.wav
# 19
# tests/test_files/nuendo//wavinfo Test Project - Audio - 5.0.wav
# 18
# tests/test_files/nuendo//wavinfo Test Project - Audio - 6.1 Surround EX.wav
# 22
# tests/test_files/nuendo//wavinfo Test Project - Audio - 6.0 Surround EX.wav
# 20
# tests/test_files/nuendo//wavinfo Test Project - Audio - 7.1 SDDS.wav
# 26
# tests/test_files/nuendo//wavinfo Test Project - Audio - 7.0 SDDS.wav
# 24
# tests/test_files/nuendo//wavinfo Test Project - Audio - 7.0.wav
# 25
# tests/test_files/nuendo//wavinfo Test Project - Audio - 7.1.wav
# 27
# tests/test_files/nuendo//wavinfo Test Project - Audio - 6.1 Music.wav
# 23
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 7.1.2.wav
# 33
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 5.0.4.wav
# 35
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 5.1.4.wav
# 36
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 7.0.2.wav
# 48
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 7.1.4.wav
# 44
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 7.1.6.wav
# 51
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 9.1.4.wav
# 53
# tests/test_files/nuendo//wavinfo Test Project - Audio - Atmos 9.1.6.wav
# 55
# tests/test_files/nuendo//wavinfo Test Project - Audio - 3OA.wav
# 47
# tests/test_files/nuendo//wavinfo Test Project - Audio - 1OA.wav
# 45
# tests/test_files/nuendo//wavinfo Test Project - Audio - 2OA.wav
# 46
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 10.0.wav
# 37
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 10.1.wav
# 38
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 13.1.wav
# 42
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 13.0.wav
# 41
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 11.0.wav
# 39
# tests/test_files/nuendo//wavinfo Test Project - Audio - Auro3d 11.1.wav
# 40