mirror of
https://github.com/iluvcapra/pycmx.git
synced 2025-12-31 17:00:53 +00:00
Some implementation of the ChannelMap class
This commit is contained in:
@@ -1,13 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
# pycmx
|
||||||
# coding: utf-8
|
# (c) 2018 Jamie Hardt
|
||||||
|
|
||||||
# # CMX3600 EDL Parsing
|
|
||||||
#
|
|
||||||
# ## String Helper
|
|
||||||
#
|
|
||||||
# We start with a `colliate` function, which will help us divide a string into fixed-width columns.
|
|
||||||
|
|
||||||
# EDLs
|
|
||||||
|
|
||||||
from .parse_cmx_statements import parse_cmx3600_statements
|
from .parse_cmx_statements import parse_cmx3600_statements
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
@@ -42,43 +34,45 @@ class NamedTupleParser:
|
|||||||
|
|
||||||
|
|
||||||
class CmxChannelMap:
|
class CmxChannelMap:
|
||||||
def __init__(self, cmx_string):
|
|
||||||
self.v = False
|
chan_map = { "V" : (True, False, False),
|
||||||
self.a1 = False
|
"A" : (False, True, False),
|
||||||
self.a2 = False
|
"A2" : (False, False, True),
|
||||||
self.a3 = False
|
"AA" : (False, True, True),
|
||||||
self.a4 = False
|
"B" : (True, True, False),
|
||||||
if cmx_string == "V":
|
"V/AA" : (True, True, True),
|
||||||
self.v = True
|
"V/A2" : (True, False, True)
|
||||||
elif cmx_string == "A":
|
}
|
||||||
self.a1 = True
|
|
||||||
elif cmx_string == "A2":
|
|
||||||
self.a2 = True
|
def __init__(self, v=False, a1=False, a2=False, a3=False, a4=False):
|
||||||
elif cmx_string == "AA":
|
self.v = v
|
||||||
self.a1 = True
|
self.a1 = a1
|
||||||
self.a2 = True
|
self.a2 = a2
|
||||||
elif cmx_string == "B":
|
self.a3 = a3
|
||||||
self.v = True
|
self.a4 = a4
|
||||||
self.a1 = True
|
|
||||||
elif cmx_string == "V/AA":
|
|
||||||
self.v = True
|
def appendEvent(self, event_str):
|
||||||
self.a1 = True
|
if event_str in self.chan_map:
|
||||||
self.a2 = True
|
channels = self.chan_map[event_str]
|
||||||
elif cmx_string == "V/A2":
|
self.v = channels[0]
|
||||||
self.v = True
|
self.a1 = channels[1]
|
||||||
self.a2 = True
|
self.a2 = channels[2]
|
||||||
|
|
||||||
|
|
||||||
def appendExt(self, audio_ext):
|
def appendExt(self, audio_ext):
|
||||||
self.a3 = ext.audio3
|
self.a3 = ext.audio3
|
||||||
self.a4 = ext.audio4
|
self.a4 = ext.audio4
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "CmxChannelMap(v="+ self.v.__repr__( ) + \
|
||||||
|
",a1=" + self.a1.__repr__() + \
|
||||||
|
",a2=" + self.a2.__repr__() + \
|
||||||
|
",a3=" + self.a3.__repr__() + \
|
||||||
|
",a4=" + self.a4.__repr__() +")"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Cmx3600Event = namedtuple("Cmx3600Event",['title','number','clip_name', 'source_name','channels',
|
|
||||||
'source_start','source_finish',
|
|
||||||
'record_start','record_finish',
|
|
||||||
'fcm_drop'])
|
|
||||||
|
|
||||||
def parse_cmx3600(file):
|
def parse_cmx3600(file):
|
||||||
"""Accepts the path to a CMX EDL and returns a list of all events contained therein."""
|
"""Accepts the path to a CMX EDL and returns a list of all events contained therein."""
|
||||||
statements = parse_cmx3600_statements(file)
|
statements = parse_cmx3600_statements(file)
|
||||||
@@ -88,7 +82,6 @@ def parse_cmx3600(file):
|
|||||||
return event_list(title, parser)
|
return event_list(title, parser)
|
||||||
|
|
||||||
def event_list(title, parser):
|
def event_list(title, parser):
|
||||||
print("Parsing event list")
|
|
||||||
state = {"fcm_drop" : False}
|
state = {"fcm_drop" : False}
|
||||||
|
|
||||||
events_result = []
|
events_result = []
|
||||||
@@ -102,9 +95,12 @@ def event_list(title, parser):
|
|||||||
events_result.append(this_event)
|
events_result.append(this_event)
|
||||||
|
|
||||||
raw_event = parser.current_token
|
raw_event = parser.current_token
|
||||||
|
channels = CmxChannelMap()
|
||||||
|
channels.appendEvent(raw_event.channels)
|
||||||
|
|
||||||
this_event = {'title': title, 'number': raw_event.event, 'clip_name': None ,
|
this_event = {'title': title, 'number': raw_event.event, 'clip_name': None ,
|
||||||
'source_name': raw_event.source,
|
'source_name': raw_event.source,
|
||||||
'channels': CmxChannelMap(raw_event.channels),
|
'channels': channels,
|
||||||
'source_start': raw_event.source_in,
|
'source_start': raw_event.source_in,
|
||||||
'source_finish': raw_event.source_out,
|
'source_finish': raw_event.source_out,
|
||||||
'record_start': raw_event.record_in,
|
'record_start': raw_event.record_in,
|
||||||
@@ -116,8 +112,9 @@ def event_list(title, parser):
|
|||||||
this_event['clip_name'] = parser.current_token.name
|
this_event['clip_name'] = parser.current_token.name
|
||||||
elif parser.accept('SourceFile'):
|
elif parser.accept('SourceFile'):
|
||||||
this_event['source_name'] = parser.current_token.filename
|
this_event['source_name'] = parser.current_token.filename
|
||||||
|
elif parser.accept('Trailer'):
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
events_result.append(parser.current_token)
|
|
||||||
parser.next_token()
|
parser.next_token()
|
||||||
|
|
||||||
if this_event != None:
|
if this_event != None:
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ StmtAudioExt = namedtuple("AudioExt",["audio3","audio4"])
|
|||||||
StmtClipName = namedtuple("ClipName",["name"])
|
StmtClipName = namedtuple("ClipName",["name"])
|
||||||
StmtSourceFile = namedtuple("SourceFile",["filename"])
|
StmtSourceFile = namedtuple("SourceFile",["filename"])
|
||||||
StmtRemark = namedtuple("Remark",["text"])
|
StmtRemark = namedtuple("Remark",["text"])
|
||||||
|
StmtTrailer = namedtuple("Trailer",["text"])
|
||||||
StmtUnrecognized = namedtuple("Unrecognized",["content"])
|
StmtUnrecognized = namedtuple("Unrecognized",["content"])
|
||||||
|
|
||||||
|
|
||||||
@@ -55,6 +56,8 @@ def parse_cmx3600_line(line):
|
|||||||
return parse_extended_audio_channels(line)
|
return parse_extended_audio_channels(line)
|
||||||
elif line.startswith("*"):
|
elif line.startswith("*"):
|
||||||
return parse_remark( line[1:].strip())
|
return parse_remark( line[1:].strip())
|
||||||
|
elif line.startswith(">>>"):
|
||||||
|
return parse_trailer_statement(line)
|
||||||
else:
|
else:
|
||||||
return parse_unrecognized(line)
|
return parse_unrecognized(line)
|
||||||
|
|
||||||
@@ -117,3 +120,7 @@ def parse_columns_for_standard_form(line, event_field_length, source_field_lengt
|
|||||||
record_out=column_strings[16].strip())
|
record_out=column_strings[16].strip())
|
||||||
|
|
||||||
|
|
||||||
|
def parse_trailer_statement(line):
|
||||||
|
trimmed = line[3:].strip()
|
||||||
|
return StmtTrailer(trimmed)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user