# {py:mod}`simvx.core.audio_synth` ```{py:module} simvx.core.audio_synth ``` ```{autodoc2-docstring} simvx.core.audio_synth :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`AudioSource ` - ```{autodoc2-docstring} simvx.core.audio_synth.AudioSource :summary: ``` * - {py:obj}`WhiteNoise ` - ```{autodoc2-docstring} simvx.core.audio_synth.WhiteNoise :summary: ``` * - {py:obj}`PinkNoise ` - ```{autodoc2-docstring} simvx.core.audio_synth.PinkNoise :summary: ``` * - {py:obj}`Oscillator ` - ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator :summary: ``` * - {py:obj}`Envelope ` - ```{autodoc2-docstring} simvx.core.audio_synth.Envelope :summary: ``` * - {py:obj}`ADSR ` - ```{autodoc2-docstring} simvx.core.audio_synth.ADSR :summary: ``` * - {py:obj}`Linear ` - ```{autodoc2-docstring} simvx.core.audio_synth.Linear :summary: ``` * - {py:obj}`Exponential ` - ```{autodoc2-docstring} simvx.core.audio_synth.Exponential :summary: ``` * - {py:obj}`Filter ` - ```{autodoc2-docstring} simvx.core.audio_synth.Filter :summary: ``` * - {py:obj}`LowPass ` - ```{autodoc2-docstring} simvx.core.audio_synth.LowPass :summary: ``` * - {py:obj}`HighPass ` - ```{autodoc2-docstring} simvx.core.audio_synth.HighPass :summary: ``` * - {py:obj}`AudioSynth ` - ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`log ` - ```{autodoc2-docstring} simvx.core.audio_synth.log :summary: ``` * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.audio_synth.__all__ :summary: ``` ```` ### API ````{py:data} log :canonical: simvx.core.audio_synth.log :value: > 'getLogger(...)' ```{autodoc2-docstring} simvx.core.audio_synth.log ``` ```` ````{py:data} __all__ :canonical: simvx.core.audio_synth.__all__ :value: > ['AudioSource', 'Envelope', 'Filter', 'LowPass', 'HighPass', 'Oscillator', 'WhiteNoise', 'PinkNoise'... ```{autodoc2-docstring} simvx.core.audio_synth.__all__ ``` ```` `````{py:class} AudioSource :canonical: simvx.core.audio_synth.AudioSource Bases: {py:obj}`abc.ABC` ```{autodoc2-docstring} simvx.core.audio_synth.AudioSource ``` ````{py:method} render(cursor_samples: int, n_samples: int, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.AudioSource.render :abstractmethod: ```{autodoc2-docstring} simvx.core.audio_synth.AudioSource.render ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.AudioSource.__slots__ :value: > () ```` ````` `````{py:class} WhiteNoise(seed: int | None = None) :canonical: simvx.core.audio_synth.WhiteNoise Bases: {py:obj}`simvx.core.audio_synth.AudioSource` ```{autodoc2-docstring} simvx.core.audio_synth.WhiteNoise ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.WhiteNoise.__init__ ``` ````{py:method} render(cursor_samples: int, n_samples: int, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.WhiteNoise.render ```{autodoc2-docstring} simvx.core.audio_synth.WhiteNoise.render ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.WhiteNoise.__slots__ :value: > () ```` ````` `````{py:class} PinkNoise(seed: int | None = None) :canonical: simvx.core.audio_synth.PinkNoise Bases: {py:obj}`simvx.core.audio_synth.AudioSource` ```{autodoc2-docstring} simvx.core.audio_synth.PinkNoise ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.PinkNoise.__init__ ``` ````{py:method} render(cursor_samples: int, n_samples: int, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.PinkNoise.render ```{autodoc2-docstring} simvx.core.audio_synth.PinkNoise.render ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.PinkNoise.__slots__ :value: > () ```` ````` `````{py:class} Oscillator :canonical: simvx.core.audio_synth.Oscillator ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator ``` ````{py:attribute} noise :canonical: simvx.core.audio_synth.Oscillator.noise :type: typing.ClassVar[simvx.core.audio_synth._NoiseFactory] :value: > '_NoiseFactory(...)' ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator.noise ``` ```` ````{py:method} sine(freq: float, *, phase: float = 0.0) -> simvx.core.audio_synth.AudioSource :canonical: simvx.core.audio_synth.Oscillator.sine :staticmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator.sine ``` ```` ````{py:method} square(freq: float, *, duty: float = 0.5) -> simvx.core.audio_synth.AudioSource :canonical: simvx.core.audio_synth.Oscillator.square :staticmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator.square ``` ```` ````{py:method} saw(freq: float) -> simvx.core.audio_synth.AudioSource :canonical: simvx.core.audio_synth.Oscillator.saw :staticmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator.saw ``` ```` ````{py:method} triangle(freq: float) -> simvx.core.audio_synth.AudioSource :canonical: simvx.core.audio_synth.Oscillator.triangle :staticmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Oscillator.triangle ``` ```` ````` `````{py:class} Envelope :canonical: simvx.core.audio_synth.Envelope Bases: {py:obj}`abc.ABC` ```{autodoc2-docstring} simvx.core.audio_synth.Envelope ``` ````{py:method} render_total(total_duration: float, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.Envelope.render_total :abstractmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Envelope.render_total ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.Envelope.__slots__ :value: > () ```` ````` `````{py:class} ADSR(*, attack: float = 0.01, decay: float = 0.05, sustain: float = 1.0, release: float = 0.05) :canonical: simvx.core.audio_synth.ADSR Bases: {py:obj}`simvx.core.audio_synth.Envelope` ```{autodoc2-docstring} simvx.core.audio_synth.ADSR ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.ADSR.__init__ ``` ````{py:method} render_total(total_duration: float, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.ADSR.render_total ```{autodoc2-docstring} simvx.core.audio_synth.ADSR.render_total ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.ADSR.__slots__ :value: > () ```` ````` `````{py:class} Linear(*, start: float = 1.0, end: float = 0.0) :canonical: simvx.core.audio_synth.Linear Bases: {py:obj}`simvx.core.audio_synth.Envelope` ```{autodoc2-docstring} simvx.core.audio_synth.Linear ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.Linear.__init__ ``` ````{py:method} render_total(total_duration: float, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.Linear.render_total ```{autodoc2-docstring} simvx.core.audio_synth.Linear.render_total ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.Linear.__slots__ :value: > () ```` ````` `````{py:class} Exponential(*, start: float = 1.0, end: float = 0.01, power: float = 1.0) :canonical: simvx.core.audio_synth.Exponential Bases: {py:obj}`simvx.core.audio_synth.Envelope` ```{autodoc2-docstring} simvx.core.audio_synth.Exponential ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.Exponential.__init__ ``` ````{py:method} render_total(total_duration: float, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.Exponential.render_total ```{autodoc2-docstring} simvx.core.audio_synth.Exponential.render_total ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.Exponential.__slots__ :value: > () ```` ````` `````{py:class} Filter :canonical: simvx.core.audio_synth.Filter Bases: {py:obj}`abc.ABC` ```{autodoc2-docstring} simvx.core.audio_synth.Filter ``` ````{py:method} apply(samples: numpy.ndarray, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.Filter.apply :abstractmethod: ```{autodoc2-docstring} simvx.core.audio_synth.Filter.apply ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.Filter.__slots__ :value: > () ```` ````` `````{py:class} LowPass(cutoff_hz: float) :canonical: simvx.core.audio_synth.LowPass Bases: {py:obj}`simvx.core.audio_synth.Filter` ```{autodoc2-docstring} simvx.core.audio_synth.LowPass ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.LowPass.__init__ ``` ````{py:method} apply(samples: numpy.ndarray, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.LowPass.apply ```{autodoc2-docstring} simvx.core.audio_synth.LowPass.apply ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.LowPass.__slots__ :value: > () ```` ````` `````{py:class} HighPass(cutoff_hz: float) :canonical: simvx.core.audio_synth.HighPass Bases: {py:obj}`simvx.core.audio_synth.Filter` ```{autodoc2-docstring} simvx.core.audio_synth.HighPass ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.HighPass.__init__ ``` ````{py:method} apply(samples: numpy.ndarray, sample_rate: int) -> numpy.ndarray :canonical: simvx.core.audio_synth.HighPass.apply ```{autodoc2-docstring} simvx.core.audio_synth.HighPass.apply ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_synth.HighPass.__slots__ :value: > () ```` ````` `````{py:class} AudioSynth() :canonical: simvx.core.audio_synth.AudioSynth ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.__init__ ``` ````{py:method} add(source: simvx.core.audio_synth.AudioSource, *, envelope: simvx.core.audio_synth.Envelope | None = None, filter: simvx.core.audio_synth.Filter | None = None, gain: float = 1.0, pan: float = 0.0) -> int :canonical: simvx.core.audio_synth.AudioSynth.add ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.add ``` ```` ````{py:property} voices :canonical: simvx.core.audio_synth.AudioSynth.voices :type: list[simvx.core.audio_synth._Voice] ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.voices ``` ```` ````{py:method} clear() -> None :canonical: simvx.core.audio_synth.AudioSynth.clear ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.clear ``` ```` ````{py:property} voice_count :canonical: simvx.core.audio_synth.AudioSynth.voice_count :type: int ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.voice_count ``` ```` ````{py:method} set_param(voice_id: int, name: str, value: object) -> None :canonical: simvx.core.audio_synth.AudioSynth.set_param ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.set_param ``` ```` ````{py:method} render_chunk(cursor_samples: int, n_samples: int, *, sample_rate: int = 48000, channels: int = 2, soft_clip: bool = True) -> numpy.ndarray :canonical: simvx.core.audio_synth.AudioSynth.render_chunk ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.render_chunk ``` ```` ````{py:method} attach_to(player, *, chunk_seconds: float = 0.1, sample_rate: int = 48000, channels: int = 2) :canonical: simvx.core.audio_synth.AudioSynth.attach_to ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.attach_to ``` ```` ````{py:method} bake(duration: float, *, sample_rate: int = 48000, channels: int = 2, soft_clip: bool = True) -> simvx.core.audio.AudioStream :canonical: simvx.core.audio_synth.AudioSynth.bake ```{autodoc2-docstring} simvx.core.audio_synth.AudioSynth.bake ``` ```` `````