Source code for cutcutcodec.core.generation.audio.equation

"""Allow to generate sound from mathematical functions."""

import numbers

from sympy.core.basic import Basic

from cutcutcodec.core.classes.container import ContainerInput
from cutcutcodec.core.classes.layout import Layout
from cutcutcodec.core.filter.audio.equation import FilterAudioEquation


[docs] class GeneratorAudioEquation(FilterAudioEquation, ContainerInput): """Generate an audio stream whose channels are defened by any equations. It is a particular case of ``cutcutcodec.core.filter.equation.FilterAudioEquation``. Examples -------- >>> import torch >>> from cutcutcodec.core.generation.audio.equation import GeneratorAudioEquation >>> (stream,) = GeneratorAudioEquation("sin(2*pi*440*t)").out_streams >>> torch.round(stream.snapshot(0, 3520, 8), decimals=3) FrameAudio(0, 3520, 'mono', [[ 0. , 0.707, 1. , 0.707, 0. , -0.707, -1. , -0.707]]) >>> """ def __init__( self, *signals: Basic | numbers.Real | str, layout: Layout | str | numbers.Integral = None, ): """Initialise and create the class. Parameters ---------- *signals : str or sympy.Basic Transmitted to the ``cutcutcodec.core.filter.audio.equation.FilterAudioEquation`` initialisator. But the only available vars is `t`. layout : cutcutcodec.core.classes.layout.Layout or str or int, optional Transmitted to the ``cutcutcodec.core.filter.audio.equation.FilterAudioEquation`` initialisator. """ FilterAudioEquation.__init__(self, [], *signals, layout=layout) ContainerInput.__init__(self, self.out_streams) if excess := set(map(str, self._free_symbs)) - {"t"}: raise ValueError(f"only t symbol is allowed, not {excess}")