Source code for GenerIter.processor.Mix

"""
Generator class for some Process-based mixing algorithms.

Copyright 2020 Thomas Jackson Park & Jeremy Pavier

"""
import os
import random
import inspect
from pydub import AudioSegment
from GenerIter.process import Process
from GenerIter.util import debug, nextPowerOf2
import GenerIter.excepts as robox

[docs]class Mix(Process): def __init__(self): super().__init__() debug('Mix()')
[docs] def multitrack(self): # How many times do you want this to run? iterations = int(self._config["tracks"]) if "trackfade" in self._config: trackfade = self._config["trackfade"] else: trackfade = 0 voices = self._config["voices"] nvoices = len(voices) if nvoices < 2: raise robox.GIParameterErr("Insufficient voices specified for the multitrack algorithm") mute = 6.0 * nextPowerOf2(nvoices) for ctr in range(iterations): audios = [] # Randomly select our samples for voice in voices: level = voices[voice] sample = self._inventory.selectRandom(voice) audio = AudioSegment.from_wav(sample) #audio = audio.normalize() audio = audio + level audios.append(audio) summation = audios[0] for nctr in range(nvoices-1): summation = summation.overlay(audios[nctr+1], loop=True) if trackfade > 0: summation = self.declick(summation, trackfade) fname = inspect.currentframe().f_code.co_name self.write(algorithm=fname, counter=ctr, source=summation)