From 63ba5a8dc2aa4ec3e6f203b0ba4db249ecf0b00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 27 Jul 2016 21:33:09 +0200 Subject: Rename helpers to music_sampler --- music_sampler/music_effect.py | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 music_sampler/music_effect.py (limited to 'music_sampler/music_effect.py') diff --git a/music_sampler/music_effect.py b/music_sampler/music_effect.py new file mode 100644 index 0000000..4bdbb26 --- /dev/null +++ b/music_sampler/music_effect.py @@ -0,0 +1,62 @@ +class GainEffect: + effect_types = [ + 'fade' + ] + + def __init__(self, effect, audio_segment, initial_loop, 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 + self.initial_loop = initial_loop + 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, current_loop, 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, + current_loop, + frame_count) + + # Fading + def fade_init(self, gain=0, **kwargs): + self.audio_segment_frame_count = self.audio_segment.frame_count() + self.first_frame = int( + self.audio_segment_frame_count * self.initial_loop +\ + self.audio_segment.frame_rate * self.start) + self.last_frame = int( + self.audio_segment_frame_count * self.initial_loop +\ + 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, current_loop, frame_count): + current_frame = current_frame \ + + (current_loop - self.initial_loop) \ + * self.audio_segment_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 + ] + + -- cgit v1.2.3