mirror of
https://github.com/iluvcapra/wavinfo.git
synced 2025-12-31 17:00:41 +00:00
ADM impl
This commit is contained in:
@@ -4,6 +4,7 @@ ADM Reader
|
|||||||
|
|
||||||
from struct import unpack, unpack_from, calcsize
|
from struct import unpack, unpack_from, calcsize
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ class ChannelEntry:
|
|||||||
"audioPackFormatID"
|
"audioPackFormatID"
|
||||||
|
|
||||||
|
|
||||||
class WavAxmlReader:
|
class WavADMReader:
|
||||||
"""
|
"""
|
||||||
Reads XML data from an EBU ADM (Audio Definiton Model) WAV File.
|
Reads XML data from an EBU ADM (Audio Definiton Model) WAV File.
|
||||||
"""
|
"""
|
||||||
@@ -35,7 +36,7 @@ class WavAxmlReader:
|
|||||||
header_fmt = "<HH"
|
header_fmt = "<HH"
|
||||||
uid_fmt = "<H12s14s11sx"
|
uid_fmt = "<H12s14s11sx"
|
||||||
|
|
||||||
self.axml = ET.fromstring(axml_data)
|
self.axml = ET.parse(BytesIO(axml_data))
|
||||||
|
|
||||||
self.track_count, uid_count = unpack(header_fmt, chna_data)
|
self.track_count, uid_count = unpack(header_fmt, chna_data)
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ from .riff_parser import parse_chunk, ChunkDescriptor, ListChunkDescriptor
|
|||||||
from .wave_ixml_reader import WavIXMLFormat
|
from .wave_ixml_reader import WavIXMLFormat
|
||||||
from .wave_bext_reader import WavBextReader
|
from .wave_bext_reader import WavBextReader
|
||||||
from .wave_info_reader import WavInfoChunkReader
|
from .wave_info_reader import WavInfoChunkReader
|
||||||
from .wave_axml_reader import WavAxmlReader
|
from .wave_adm_reader import WavADMReader
|
||||||
|
|
||||||
#: Calculated statistics about the audio data.
|
#: Calculated statistics about the audio data.
|
||||||
WavDataDescriptor = namedtuple('WavDataDescriptor', 'byte_count frame_count')
|
WavDataDescriptor = namedtuple('WavDataDescriptor', 'byte_count frame_count')
|
||||||
@@ -77,7 +77,7 @@ class WavInfoReader:
|
|||||||
self.ixml = self._get_ixml(wavfile)
|
self.ixml = self._get_ixml(wavfile)
|
||||||
|
|
||||||
#: :class:`wavinfo.wave_axml_reader.WavAxmlReader` with ADM metadata
|
#: :class:`wavinfo.wave_axml_reader.WavAxmlReader` with ADM metadata
|
||||||
self.adm = self._get_axml(wavfile)
|
self.adm = self._get_adm(wavfile)
|
||||||
|
|
||||||
#: :class:`wavinfo.wave_info_reader.WavInfoChunkReader` with RIFF INFO metadata
|
#: :class:`wavinfo.wave_info_reader.WavInfoChunkReader` with RIFF INFO metadata
|
||||||
self.info = self._get_info(wavfile, encoding=self.info_encoding)
|
self.info = self._get_info(wavfile, encoding=self.info_encoding)
|
||||||
@@ -134,10 +134,10 @@ class WavInfoReader:
|
|||||||
bext_data = self._find_chunk_data(b'bext', f, default_none=True)
|
bext_data = self._find_chunk_data(b'bext', f, default_none=True)
|
||||||
return WavBextReader(bext_data, encoding) if bext_data else None
|
return WavBextReader(bext_data, encoding) if bext_data else None
|
||||||
|
|
||||||
def _get_axml(self, f):
|
def _get_adm(self, f):
|
||||||
axml = self._find_chunk_data(b'axml', f, default_none=True)
|
axml = self._find_chunk_data(b'axml', f, default_none=True)
|
||||||
chna = self._find_chunk_data(b'chna', f, default_none=True)
|
chna = self._find_chunk_data(b'chna', f, default_none=True)
|
||||||
return WavAxmlReader(axml_data=axml, chna_data=chna)
|
return WavADMReader(axml_data=axml, chna_data=chna) if axml and chna else None
|
||||||
|
|
||||||
def _get_ixml(self, f):
|
def _get_ixml(self, f):
|
||||||
ixml_data = self._find_chunk_data(b'iXML', f, default_none=True)
|
ixml_data = self._find_chunk_data(b'iXML', f, default_none=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user