blob: ef8dc906025a61ea71a5a1a93540532cec666516 (
plain) (
tree)
|
|
class GainEffect:
effect_types = [
'fade'
]
def __init__(self, effect, audio_segment, start, end, **kwargs):
if effect in self.effect_types:
self.effect = effect
else:
raise Exception("Unknown effect {}".format(effect))
self.start = start
self.end = end
self.audio_segment = audio_segment
getattr(self, self.effect + "_init")(**kwargs)
def get_last_gain(self):
return getattr(self, self.effect + "_get_last_gain")()
def get_next_gain(self, current_frame, frame_count):
# This returns two values:
# - The first one is the gain to apply on that frame
# - The last one is True or False depending on whether it is the last
# call to the function and the last gain should be saved permanently
return getattr(self, self.effect + "_get_next_gain")(
current_frame,
frame_count)
# Fading
def fade_init(self, gain=0, **kwargs):
self.first_frame = int(self.audio_segment.frame_rate * self.start)
self.last_frame = int(self.audio_segment.frame_rate * self.end)
self.gain= gain
def fade_get_last_gain(self):
return self.gain
def fade_get_next_gain(self, current_frame, frame_count):
if current_frame >= self.last_frame:
return [self.gain, True]
elif current_frame < self.first_frame:
return [0, False]
else:
return [
(current_frame - self.first_frame) / \
(self.last_frame - self.first_frame) * self.gain,
False
]
|