Source code for quasimoto.sampler.parameters
"""
A module implementing a sampler-creation-parameter interface.
"""
# built-in
from typing import Any, NamedTuple, Optional
# internal
from quasimoto.enums.wave import WaveShape
from quasimoto.sampler.notes import DEFAULT_FREQUENCY, Note
DEFAULT_AMPLITUDE = 1.0
DEFAULT_SHAPE = WaveShape.SINE
[docs]
class SourceParameters(NamedTuple):
"""A container for parameters used to instantiate sources."""
stop_time: Optional[float] = None
duration: Optional[float] = None
frequency: float = DEFAULT_FREQUENCY
amplitude: float = DEFAULT_AMPLITUDE
shape: WaveShape = DEFAULT_SHAPE
enabled: bool = True
[docs]
@staticmethod
def from_dict(data: dict[str, Any]) -> "SourceParameters":
"""Get source parameters from dictionary data."""
return SourceParameters(
stop_time=data.get("stop_time"),
duration=data.get("duration"),
frequency=data.get("frequency", DEFAULT_FREQUENCY),
amplitude=data.get("amplitude", DEFAULT_AMPLITUDE),
shape=WaveShape.normalize(data.get("shape", DEFAULT_SHAPE)),
)
[docs]
@staticmethod
def from_note(
note: Note, octave_offset: int = 0, **kwargs
) -> "SourceParameters":
"""Create parameters from a given note."""
return SourceParameters.from_dict(
{
**kwargs,
"frequency": note.frequency(octave_offset=octave_offset),
}
)
[docs]
@staticmethod
def from_index(index: int, **kwargs) -> "SourceParameters":
"""Create source parameters from a note index."""
note, offset = Note.from_index(index)
return SourceParameters.from_note(note, octave_offset=offset, **kwargs)
DEFAULT = SourceParameters()