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