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

"""Dedicated to tests, it is an empty audio stream containing no samples."""

import typing
from fractions import Fraction

from cutcutcodec.core.classes.container import ContainerInput
from cutcutcodec.core.classes.frame_audio import FrameAudio
from cutcutcodec.core.classes.layout import Layout
from cutcutcodec.core.classes.stream import Stream
from cutcutcodec.core.classes.stream_audio import StreamAudio
from cutcutcodec.core.exceptions import OutOfTimeRange


[docs] class GeneratorAudioEmpty(ContainerInput): """Contains an empty audio stream. Examples -------- >>> from cutcutcodec.core.exceptions import OutOfTimeRange >>> from cutcutcodec.core.generation.audio.empty import GeneratorAudioEmpty >>> (stream,) = GeneratorAudioEmpty().out_streams >>> try: ... stream.snapshot(0) ... except OutOfTimeRange as err: ... print(err) ... this stream does not contain any samples >>> """ def __init__(self): out_streams = [_StreamAudioEmpty(self)] super().__init__(out_streams) def _getstate(self) -> dict: return {} def _setstate(self, in_streams: typing.Iterable[Stream], state: dict) -> None: assert state == {}, state GeneratorAudioEmpty.__init__(self)
class _StreamAudioEmpty(StreamAudio): """An audio stream containing no sample.""" def __init__(self, node: GeneratorAudioEmpty): assert isinstance(node, GeneratorAudioEmpty), node.__class__.__name__ super().__init__(node) def _snapshot(self, timestamp: Fraction, rate: int, samples: int) -> FrameAudio: raise OutOfTimeRange("this stream does not contain any samples") @property def beginning(self) -> Fraction: return Fraction(0) @property def duration(self) -> Fraction | float: return Fraction(0) @property def layout(self) -> Layout: """Return the signification of each channels.""" raise KeyError("it makes no sense to give an audio layout to an absence of sample")