summaryrefslogtreecommitdiff
path: root/functions/audio.py
diff options
context:
space:
mode:
authorBen Connors <benconnors@outlook.com>2019-09-25 23:05:14 -0400
committerBen Connors <benconnors@outlook.com>2019-09-25 23:05:14 -0400
commit2b8a53f98c44e6e78d49b7c246731deef75ed6d3 (patch)
treed85e383c0d54d662ea93384b177a0ad59a40917e /functions/audio.py
parent7f85bd8ed84b23fc4e683ab90fc7babe288f1a27 (diff)
Change module layout; start chaser work
- Fix up callbacks - Clean up function implementations - More properties to prevent editing of attributes - Start work on chasers - Implement framework for chaser steps
Diffstat (limited to 'functions/audio.py')
-rw-r--r--functions/audio.py118
1 files changed, 0 insertions, 118 deletions
diff --git a/functions/audio.py b/functions/audio.py
deleted file mode 100644
index d0e599d..0000000
--- a/functions/audio.py
+++ /dev/null
@@ -1,118 +0,0 @@
-"""Audio function module.
-
-Contains the definition of the Audio, the audio primitive.
-"""
-
-import xml.etree.ElementTree as et
-
-from .function import Function
-
-from ..constants import AUDIO, BXW
-from ..exceptions import LoadError
-
-class Audio(Function):
- """Class representing an audio cue.
-
- This is the primitive for audio, and all sound cues must be based in some manner off of
- Audio. This function merely plays a single audio file once, starting at t=0.
-
- The duration of the audio is automatically determined and is zero if the file does not
- exist or is unsupported by ffmpeg.
- """
- scope = ()
- audio_scope = frozenset()
- actual_duration = 0
-
- def __init__(self, w, id_ = None, name = None, fade_in = 0, fade_out = 0,
- filename: str = None):
- super().__init__(w=w, type_=AUDIO, id_=id_, name=name, duration=0,
- fade_in=fade_in, fade_out=fade_out)
-
- self._filename = filename
-
- if filename is not None:
- self.duration = self.w.get_audio_length(filename)
- self.audio_scope = frozenset(((filename,),))
- else:
- self.duration = 0
- self.audio_scope = frozenset()
-
- self.actual_duration = self.duration
-
- def get_data(self):
- return None
-
- def copy_data(self, data):
- return None
-
- def render(self, t, data = None):
- return ((),
- ((self.id, self._filename, 0, self.fade_in, self.duration, self.fade_out),),
- None)
-
- @property
- def filename(self):
- """Return the current audio filename."""
- return self._filename
-
- @filename.setter
- def filename(self, value: str):
- """Set the current audio filename, updating the duration."""
- if value is not None:
- self.duration = self.w.get_audio_length(value)
- self.audio_scope = frozenset(((value,),))
- else:
- self.duration = 0
- self.audio_scope = frozenset()
-
- self._filename = value
- self.w.function_changed(self)
-
- def serialize(self) -> et.Element:
- e = et.Element(BXW+"function")
- e.set("type", self.type)
- e.set("id", str(self.id))
- e.set("name", self.name)
- e.set("fade-in", str(self.fade_in))
- e.set("fade-out", str(self.fade_out))
- if self.filename is not None:
- filename = et.SubElement(e, BXW+"filename")
- filename.text = self.filename
-
- return e
-
- @classmethod
- def deserialize(cls, w, e):
- if e.tag != BXW+"function":
- raise LoadError("Invalid function tag")
- elif e.get("type") != AUDIO:
- raise LoadError("Load delegated to wrong class (this is a bug)")
-
- id_ = cls.int_or_none(e.get("id"))
- if id_ is None:
- raise LoadError("Function tag has invalid/missing ID")
-
- name = e.get("name")
-
- fade_in = e.get("fade-in")
- try:
- fade_in = int(fade_in) if fade_in else 0
- except ValueError:
- raise LoadError("Invalid fade in")
-
- fade_out = e.get("fade-out")
- try:
- fade_out = int(fade_out) if fade_out else 0
- except ValueError:
- raise LoadError("Invalid fade out")
-
- if len(e) > 1:
- raise LoadError("Audio tag can have at most one filename")
- elif len(e) == 1:
- filename, = e
- filename = filename.text
- else:
- filename = None
-
- return cls(w=w, id_=id_, name=name, filename=filename, fade_in=fade_in,
- fade_out=fade_out)