mirror of
https://github.com/iluvcapra/wavinfo.git
synced 2025-12-31 17:00:41 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84a76f9c74 | ||
|
|
5a1a12e21e | ||
|
|
06835ffe11 | ||
|
|
1b25b8214d | ||
|
|
cfc1a451bc | ||
|
|
0788613ea3 | ||
|
|
e9e4b4bcbb | ||
|
|
c114eb7cf3 | ||
|
|
4576d65da6 |
6
.idea/wavinfo.iml
generated
6
.idea/wavinfo.iml
generated
@@ -1,8 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$">
|
||||||
<orderEntry type="jdk" jdkName="Python 3.8 (wavinfo)" jdkType="Python SDK" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
@@ -2,10 +2,11 @@ dist: xenial
|
|||||||
language: python
|
language: python
|
||||||
python:
|
python:
|
||||||
# - "2.7"
|
# - "2.7"
|
||||||
- "3.5"
|
# - "3.5"
|
||||||
- "3.6"
|
- "3.6"
|
||||||
- "3.7"
|
- "3.7"
|
||||||
- "3.8"
|
- "3.8"
|
||||||
|
- "3.9"
|
||||||
script:
|
script:
|
||||||
- "gunzip tests/test_files/rf64/*.gz"
|
- "gunzip tests/test_files/rf64/*.gz"
|
||||||
- "python setup.py test"
|
- "python setup.py test"
|
||||||
|
|||||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
lxml~=4.5.2
|
||||||
|
setuptools~=49.6.0
|
||||||
|
ear~=2.0.0
|
||||||
7
setup.py
7
setup.py
@@ -26,12 +26,13 @@ setup(name='wavinfo',
|
|||||||
'License :: OSI Approved :: MIT License',
|
'License :: OSI Approved :: MIT License',
|
||||||
'Topic :: Multimedia',
|
'Topic :: Multimedia',
|
||||||
'Topic :: Multimedia :: Sound/Audio',
|
'Topic :: Multimedia :: Sound/Audio',
|
||||||
"Programming Language :: Python :: 3.5",
|
# "Programming Language :: Python :: 3.5",
|
||||||
"Programming Language :: Python :: 3.6",
|
"Programming Language :: Python :: 3.6",
|
||||||
"Programming Language :: Python :: 3.7",
|
"Programming Language :: Python :: 3.7",
|
||||||
"Programming Language :: Python :: 3.8"],
|
"Programming Language :: Python :: 3.8",
|
||||||
|
"Programming Language :: Python :: 3.9"],
|
||||||
keywords='waveform metadata audio ebu smpte avi library film tv editing editorial',
|
keywords='waveform metadata audio ebu smpte avi library film tv editing editorial',
|
||||||
install_requires=['lxml'],
|
install_requires=['lxml', 'ear'],
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'wavinfo = wavinfo.__main__:main'
|
'wavinfo = wavinfo.__main__:main'
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ Go to the documentation for wavinfo.WavInfoReader for more information.
|
|||||||
from .wave_reader import WavInfoReader
|
from .wave_reader import WavInfoReader
|
||||||
from .riff_parser import WavInfoEOFError
|
from .riff_parser import WavInfoEOFError
|
||||||
|
|
||||||
__version__ = '1.6'
|
__version__ = '1.6.2'
|
||||||
__author__ = 'Jamie Hardt <jamiehardt@gmail.com>'
|
__author__ = 'Jamie Hardt <jamiehardt@gmail.com>'
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
|
|||||||
188
wavinfo/dolby_parser.py
Normal file
188
wavinfo/dolby_parser.py
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
# Dolby RMU Metadata per EBU Tech 3285 Supp 6
|
||||||
|
#
|
||||||
|
# https://tech.ebu.ch/docs/tech/tech3285s6.pdf
|
||||||
|
#
|
||||||
|
|
||||||
|
from struct import unpack, calcsize
|
||||||
|
from enum import (Enum, IntEnum)
|
||||||
|
|
||||||
|
CHUNK_IDENT = "dbmd"
|
||||||
|
DOLBY_VERSION = "1.0.0.6"
|
||||||
|
|
||||||
|
|
||||||
|
class _DPPGenericDownMixLevel(Enum):
|
||||||
|
PLUS_3DB = 0b000
|
||||||
|
PLUS_1_5DB = 0b001
|
||||||
|
UNITY = 0b010
|
||||||
|
MINUS_1_5DB = 0b011
|
||||||
|
MINUS_3DB = 0b100
|
||||||
|
MINUS_4_5DB = 0b101
|
||||||
|
MINUS_6DB = 0b110
|
||||||
|
MUTE = 0b111
|
||||||
|
|
||||||
|
|
||||||
|
class DPPDolbySurroundEncodingMode(Enum):
|
||||||
|
RESERVED = 0b11
|
||||||
|
IN_USE = 0b10
|
||||||
|
NOT_IN_USE = 0b01
|
||||||
|
NOT_INDICATED = 0b00
|
||||||
|
|
||||||
|
# DPPLoRoDownMixCenterLevel
|
||||||
|
# DPPLtRtCenterMixLevel
|
||||||
|
# DPPLtRtSurroundMixLevel
|
||||||
|
|
||||||
|
class DolbyMetadataSegmentTypes(IntEnum):
|
||||||
|
END_MARKER = 0
|
||||||
|
DOLBY_E_METADATA = 1
|
||||||
|
DOLBY_DIGITAL_METADATA = 3
|
||||||
|
DOLBY_DIGITAL_PLUS_METADATA = 7
|
||||||
|
AUDIO_INFO = 8
|
||||||
|
|
||||||
|
|
||||||
|
class DDPBitStreamMode(Enum):
|
||||||
|
"""
|
||||||
|
Dolby Digital Plus `bsmod` field
|
||||||
|
§ 4.3.2.2
|
||||||
|
"""
|
||||||
|
COMPLETE_MAIN = 0b000
|
||||||
|
MUSIC_AND_EFFECTS = 0b001
|
||||||
|
VISUALLY_IMPAIRED = 0b010
|
||||||
|
HEARING_IMPAIRED = 0b011
|
||||||
|
DIALOGUE_ONLY = 0b100
|
||||||
|
COMMENTARY = 0b101
|
||||||
|
EMERGENCY = 0b110
|
||||||
|
VOICEOVER = 0b111 # if audioconfigmode is 1_0
|
||||||
|
KARAOKE = 0b1000 # if audioconfigmode is not 1_0
|
||||||
|
|
||||||
|
|
||||||
|
class DDPAudioCodingMode(Enum):
|
||||||
|
"""
|
||||||
|
Dolby Digital Plus `acmod` field
|
||||||
|
§ 4.3.2.3
|
||||||
|
"""
|
||||||
|
RESERVED = 0b000
|
||||||
|
CH_ORD_1_0 = 0b001
|
||||||
|
CH_ORD_2_0 = 0b010
|
||||||
|
CH_ORD_3_0 = 0b011
|
||||||
|
CH_ORD_2_1 = 0b100
|
||||||
|
CH_ORD_3_1 = 0b101
|
||||||
|
CH_ORD_2_2 = 0b110
|
||||||
|
CH_ORD_3_2 = 0b111
|
||||||
|
|
||||||
|
|
||||||
|
class DPPCenterDownMixLevel(Enum):
|
||||||
|
"""
|
||||||
|
§ 4.3.3.1
|
||||||
|
"""
|
||||||
|
DOWN_3DB = 0b00
|
||||||
|
DOWN_45DB = 0b01
|
||||||
|
DOWN_6DB = 0b10
|
||||||
|
RESERVED = 0b11
|
||||||
|
|
||||||
|
|
||||||
|
class DPPSurroundDownMixLevel(Enum):
|
||||||
|
"""
|
||||||
|
Dolby Digital Plus `surmixlev` field
|
||||||
|
§ 4.3.3.2
|
||||||
|
"""
|
||||||
|
DOWN_3DB = 0b00
|
||||||
|
DOWN_6DB = 0b01
|
||||||
|
MUTE = 0b10
|
||||||
|
RESERVED = 0b11
|
||||||
|
|
||||||
|
|
||||||
|
class DPPLanguageCode(Enum):
|
||||||
|
"""
|
||||||
|
§ 4.3.4.1 , 4.3.5 (always 0xFF)
|
||||||
|
"""
|
||||||
|
# this is removed in https://www.atsc.org/wp-content/uploads/2015/03/A52-201212-17.pdf § 5.4.2.12
|
||||||
|
# It should just be 0xff
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DPPMixLevel(int):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DPPDialnormLevel(int):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DPPRoomTime(Enum):
|
||||||
|
"""
|
||||||
|
`roomtyp` 4.3.6.3
|
||||||
|
"""
|
||||||
|
NOT_INDICATED = 0b00
|
||||||
|
LARGE_ROOM_X_CURVE = 0b01
|
||||||
|
SMALL_ROOM_FLAT_CURVE = 0b10
|
||||||
|
RESERVED = 0b11
|
||||||
|
|
||||||
|
|
||||||
|
class DPPPreferredDownMixMode(Enum):
|
||||||
|
"""
|
||||||
|
§ 4.3.8.1
|
||||||
|
"""
|
||||||
|
NOT_INDICATED = 0b00
|
||||||
|
PRO_LOGIC = 0b01
|
||||||
|
STEREO = 0b10
|
||||||
|
PRO_LOGIC_2 = 0b11
|
||||||
|
|
||||||
|
|
||||||
|
# class DPPLtRtCenterMixLevel(_DPPGenericDownMixLevel):
|
||||||
|
# pass
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class DPPLtRtSurroundMixLevel(_DPPGenericDownMixLevel):
|
||||||
|
# pass
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class DPPSurroundEXMode(_DPPGenericInUseIndicator):
|
||||||
|
# pass
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class DPPHeadphoneMode(_DPPGenericInUseIndicator):
|
||||||
|
# pass
|
||||||
|
|
||||||
|
|
||||||
|
class DPPADConverterType(Enum):
|
||||||
|
STANDARD = 0
|
||||||
|
HDCD = 1
|
||||||
|
|
||||||
|
|
||||||
|
class DDPStreamDependency(Enum):
|
||||||
|
"""
|
||||||
|
Encodes `ddplus_info1.stream_type` field § 4.3.12.1
|
||||||
|
"""
|
||||||
|
INDEPENDENT = 0
|
||||||
|
DEPENDENT = 1
|
||||||
|
INDEPENDENT_FROM_DOLBY_DIGITAL = 2
|
||||||
|
RESERVED = 3
|
||||||
|
|
||||||
|
|
||||||
|
class DDPDataRate(int):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DPPRFCompressionProfile(Enum):
|
||||||
|
NONE = 0
|
||||||
|
FILM_STANDARD = 1
|
||||||
|
FILM_LIGHT = 2
|
||||||
|
MUSIC_STANDARD = 3
|
||||||
|
MUSIC_LIGHT = 4
|
||||||
|
SPEECH = 5
|
||||||
|
|
||||||
|
|
||||||
|
class DolbyDigitalPlusMetadata:
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def parse(cls, binary_data):
|
||||||
|
binary_format = "<BBxxBBBBBBBBBBBBBxxxBxxxxxH"
|
||||||
|
assert len(binary_data >= calcsize(binary_format))
|
||||||
|
fields = unpack(binary_format, binary_data)
|
||||||
|
|
||||||
|
|
||||||
|
class WavDolbyReader:
|
||||||
|
def __init__(self, dolby_data):
|
||||||
|
version, remainder = unpack("<U", dolby_data[0]), dolby_data[1:]
|
||||||
|
|
||||||
|
## FIXME continues...
|
||||||
9
wavinfo/wave_axml_reader.py
Normal file
9
wavinfo/wave_axml_reader.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from lxml import etree as ET
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
from ear.fileio.bw64 import Bw64Reader
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# import xml.etree.ElementTree as ET
|
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
import io
|
import io
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#-*- coding: utf-8 -*-
|
#-*- coding: utf-8 -*-
|
||||||
import struct
|
import struct
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
import pathlib
|
import pathlib
|
||||||
|
|||||||
Reference in New Issue
Block a user