# {py:mod}`simvx.core.audio_protocol` ```{py:module} simvx.core.audio_protocol ``` ```{autodoc2-docstring} simvx.core.audio_protocol :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`Capability ` - ```{autodoc2-docstring} simvx.core.audio_protocol.Capability :summary: ``` * - {py:obj}`AudioPlaybackBackend ` - ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend :summary: ``` * - {py:obj}`AudioStreamingBackend ` - ```{autodoc2-docstring} simvx.core.audio_protocol.AudioStreamingBackend :summary: ``` * - {py:obj}`AudioBusBackend ` - ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBusBackend :summary: ``` * - {py:obj}`AudioBackend ` - ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBackend :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.audio_protocol.__all__ :summary: ``` * - {py:obj}`CAPABILITIES_CORE ` - ```{autodoc2-docstring} simvx.core.audio_protocol.CAPABILITIES_CORE :summary: ``` * - {py:obj}`PlayMode ` - ```{autodoc2-docstring} simvx.core.audio_protocol.PlayMode :summary: ``` ```` ### API ````{py:data} __all__ :canonical: simvx.core.audio_protocol.__all__ :value: > ['AudioBackend', 'AudioBusBackend', 'AudioPlaybackBackend', 'AudioStreamingBackend', 'CAPABILITIES_C... ```{autodoc2-docstring} simvx.core.audio_protocol.__all__ ``` ```` `````{py:class} Capability() :canonical: simvx.core.audio_protocol.Capability Bases: {py:obj}`enum.StrEnum` ```{autodoc2-docstring} simvx.core.audio_protocol.Capability ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.__init__ ``` ````{py:attribute} PLAY_BASIC :canonical: simvx.core.audio_protocol.Capability.PLAY_BASIC :value: > 'play.basic' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.PLAY_BASIC ``` ```` ````{py:attribute} PLAY_2D :canonical: simvx.core.audio_protocol.Capability.PLAY_2D :value: > 'play.2d' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.PLAY_2D ``` ```` ````{py:attribute} PLAY_3D :canonical: simvx.core.audio_protocol.Capability.PLAY_3D :value: > 'play.3d' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.PLAY_3D ``` ```` ````{py:attribute} SPATIAL_HRTF :canonical: simvx.core.audio_protocol.Capability.SPATIAL_HRTF :value: > 'spatial.hrtf' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.SPATIAL_HRTF ``` ```` ````{py:attribute} SPATIAL_DOPPLER :canonical: simvx.core.audio_protocol.Capability.SPATIAL_DOPPLER :value: > 'spatial.doppler' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.SPATIAL_DOPPLER ``` ```` ````{py:attribute} STREAMING :canonical: simvx.core.audio_protocol.Capability.STREAMING :value: > 'streaming' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.STREAMING ``` ```` ````{py:attribute} STREAMING_WAV :canonical: simvx.core.audio_protocol.Capability.STREAMING_WAV :value: > 'streaming.wav' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.STREAMING_WAV ``` ```` ````{py:attribute} STREAMING_OGG :canonical: simvx.core.audio_protocol.Capability.STREAMING_OGG :value: > 'streaming.ogg' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.STREAMING_OGG ``` ```` ````{py:attribute} STREAMING_MP3 :canonical: simvx.core.audio_protocol.Capability.STREAMING_MP3 :value: > 'streaming.mp3' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.STREAMING_MP3 ``` ```` ````{py:attribute} STREAMING_FLAC :canonical: simvx.core.audio_protocol.Capability.STREAMING_FLAC :value: > 'streaming.flac' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.STREAMING_FLAC ``` ```` ````{py:attribute} EFFECT_GAIN :canonical: simvx.core.audio_protocol.Capability.EFFECT_GAIN :value: > 'effect.gain' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_GAIN ``` ```` ````{py:attribute} EFFECT_FILTER_BIQUAD :canonical: simvx.core.audio_protocol.Capability.EFFECT_FILTER_BIQUAD :value: > 'effect.filter_biquad' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_FILTER_BIQUAD ``` ```` ````{py:attribute} EFFECT_PARAMETRIC_EQ :canonical: simvx.core.audio_protocol.Capability.EFFECT_PARAMETRIC_EQ :value: > 'effect.parametric_eq' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_PARAMETRIC_EQ ``` ```` ````{py:attribute} EFFECT_DELAY :canonical: simvx.core.audio_protocol.Capability.EFFECT_DELAY :value: > 'effect.delay' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_DELAY ``` ```` ````{py:attribute} EFFECT_REVERB :canonical: simvx.core.audio_protocol.Capability.EFFECT_REVERB :value: > 'effect.reverb' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_REVERB ``` ```` ````{py:attribute} EFFECT_COMPRESSOR :canonical: simvx.core.audio_protocol.Capability.EFFECT_COMPRESSOR :value: > 'effect.compressor' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_COMPRESSOR ``` ```` ````{py:attribute} EFFECT_SOFTCLIP :canonical: simvx.core.audio_protocol.Capability.EFFECT_SOFTCLIP :value: > 'effect.softclip' ```{autodoc2-docstring} simvx.core.audio_protocol.Capability.EFFECT_SOFTCLIP ``` ```` ````{py:method} __new__(*values) :canonical: simvx.core.audio_protocol.Capability.__new__ ```` ````{py:method} __add__() :canonical: simvx.core.audio_protocol.Capability.__add__ ```` ````{py:method} __contains__() :canonical: simvx.core.audio_protocol.Capability.__contains__ ```` ````{py:method} __delattr__() :canonical: simvx.core.audio_protocol.Capability.__delattr__ ```` ````{py:method} __dir__() :canonical: simvx.core.audio_protocol.Capability.__dir__ ```` ````{py:method} __eq__() :canonical: simvx.core.audio_protocol.Capability.__eq__ ```` ````{py:method} __format__() :canonical: simvx.core.audio_protocol.Capability.__format__ ```` ````{py:method} __ge__() :canonical: simvx.core.audio_protocol.Capability.__ge__ ```` ````{py:method} __getattribute__() :canonical: simvx.core.audio_protocol.Capability.__getattribute__ ```` ````{py:method} __getitem__() :canonical: simvx.core.audio_protocol.Capability.__getitem__ ```` ````{py:method} __getnewargs__() :canonical: simvx.core.audio_protocol.Capability.__getnewargs__ ```` ````{py:method} __getstate__() :canonical: simvx.core.audio_protocol.Capability.__getstate__ ```` ````{py:method} __gt__() :canonical: simvx.core.audio_protocol.Capability.__gt__ ```` ````{py:method} __hash__() :canonical: simvx.core.audio_protocol.Capability.__hash__ ```` ````{py:method} __iter__() :canonical: simvx.core.audio_protocol.Capability.__iter__ ```` ````{py:method} __le__() :canonical: simvx.core.audio_protocol.Capability.__le__ ```` ````{py:method} __len__() :canonical: simvx.core.audio_protocol.Capability.__len__ ```` ````{py:method} __lt__() :canonical: simvx.core.audio_protocol.Capability.__lt__ ```` ````{py:method} __mod__() :canonical: simvx.core.audio_protocol.Capability.__mod__ ```` ````{py:method} __mul__() :canonical: simvx.core.audio_protocol.Capability.__mul__ ```` ````{py:method} __ne__() :canonical: simvx.core.audio_protocol.Capability.__ne__ ```` ````{py:method} __reduce__() :canonical: simvx.core.audio_protocol.Capability.__reduce__ ```` ````{py:method} __reduce_ex__() :canonical: simvx.core.audio_protocol.Capability.__reduce_ex__ ```` ````{py:method} __repr__() :canonical: simvx.core.audio_protocol.Capability.__repr__ ```` ````{py:method} __rmod__() :canonical: simvx.core.audio_protocol.Capability.__rmod__ ```` ````{py:method} __rmul__() :canonical: simvx.core.audio_protocol.Capability.__rmul__ ```` ````{py:method} __setattr__() :canonical: simvx.core.audio_protocol.Capability.__setattr__ ```` ````{py:method} __sizeof__() :canonical: simvx.core.audio_protocol.Capability.__sizeof__ ```` ````{py:method} __str__() :canonical: simvx.core.audio_protocol.Capability.__str__ ```` ````{py:method} __subclasshook__() :canonical: simvx.core.audio_protocol.Capability.__subclasshook__ ```` ````{py:method} capitalize() :canonical: simvx.core.audio_protocol.Capability.capitalize ```` ````{py:method} casefold() :canonical: simvx.core.audio_protocol.Capability.casefold ```` ````{py:method} center() :canonical: simvx.core.audio_protocol.Capability.center ```` ````{py:method} count() :canonical: simvx.core.audio_protocol.Capability.count ```` ````{py:method} encode() :canonical: simvx.core.audio_protocol.Capability.encode ```` ````{py:method} endswith() :canonical: simvx.core.audio_protocol.Capability.endswith ```` ````{py:method} expandtabs() :canonical: simvx.core.audio_protocol.Capability.expandtabs ```` ````{py:method} find() :canonical: simvx.core.audio_protocol.Capability.find ```` ````{py:method} format() :canonical: simvx.core.audio_protocol.Capability.format ```` ````{py:method} format_map() :canonical: simvx.core.audio_protocol.Capability.format_map ```` ````{py:method} index() :canonical: simvx.core.audio_protocol.Capability.index ```` ````{py:method} isalnum() :canonical: simvx.core.audio_protocol.Capability.isalnum ```` ````{py:method} isalpha() :canonical: simvx.core.audio_protocol.Capability.isalpha ```` ````{py:method} isascii() :canonical: simvx.core.audio_protocol.Capability.isascii ```` ````{py:method} isdecimal() :canonical: simvx.core.audio_protocol.Capability.isdecimal ```` ````{py:method} isdigit() :canonical: simvx.core.audio_protocol.Capability.isdigit ```` ````{py:method} isidentifier() :canonical: simvx.core.audio_protocol.Capability.isidentifier ```` ````{py:method} islower() :canonical: simvx.core.audio_protocol.Capability.islower ```` ````{py:method} isnumeric() :canonical: simvx.core.audio_protocol.Capability.isnumeric ```` ````{py:method} isprintable() :canonical: simvx.core.audio_protocol.Capability.isprintable ```` ````{py:method} isspace() :canonical: simvx.core.audio_protocol.Capability.isspace ```` ````{py:method} istitle() :canonical: simvx.core.audio_protocol.Capability.istitle ```` ````{py:method} isupper() :canonical: simvx.core.audio_protocol.Capability.isupper ```` ````{py:method} join() :canonical: simvx.core.audio_protocol.Capability.join ```` ````{py:method} ljust() :canonical: simvx.core.audio_protocol.Capability.ljust ```` ````{py:method} lower() :canonical: simvx.core.audio_protocol.Capability.lower ```` ````{py:method} lstrip() :canonical: simvx.core.audio_protocol.Capability.lstrip ```` ````{py:method} partition() :canonical: simvx.core.audio_protocol.Capability.partition ```` ````{py:method} removeprefix() :canonical: simvx.core.audio_protocol.Capability.removeprefix ```` ````{py:method} removesuffix() :canonical: simvx.core.audio_protocol.Capability.removesuffix ```` ````{py:method} replace() :canonical: simvx.core.audio_protocol.Capability.replace ```` ````{py:method} rfind() :canonical: simvx.core.audio_protocol.Capability.rfind ```` ````{py:method} rindex() :canonical: simvx.core.audio_protocol.Capability.rindex ```` ````{py:method} rjust() :canonical: simvx.core.audio_protocol.Capability.rjust ```` ````{py:method} rpartition() :canonical: simvx.core.audio_protocol.Capability.rpartition ```` ````{py:method} rsplit() :canonical: simvx.core.audio_protocol.Capability.rsplit ```` ````{py:method} rstrip() :canonical: simvx.core.audio_protocol.Capability.rstrip ```` ````{py:method} split() :canonical: simvx.core.audio_protocol.Capability.split ```` ````{py:method} splitlines() :canonical: simvx.core.audio_protocol.Capability.splitlines ```` ````{py:method} startswith() :canonical: simvx.core.audio_protocol.Capability.startswith ```` ````{py:method} strip() :canonical: simvx.core.audio_protocol.Capability.strip ```` ````{py:method} swapcase() :canonical: simvx.core.audio_protocol.Capability.swapcase ```` ````{py:method} title() :canonical: simvx.core.audio_protocol.Capability.title ```` ````{py:method} translate() :canonical: simvx.core.audio_protocol.Capability.translate ```` ````{py:method} upper() :canonical: simvx.core.audio_protocol.Capability.upper ```` ````{py:method} zfill() :canonical: simvx.core.audio_protocol.Capability.zfill ```` ````{py:method} __deepcopy__(memo) :canonical: simvx.core.audio_protocol.Capability.__deepcopy__ ```` ````{py:method} __copy__() :canonical: simvx.core.audio_protocol.Capability.__copy__ ```` ````{py:method} name() :canonical: simvx.core.audio_protocol.Capability.name ```` ````{py:method} value() :canonical: simvx.core.audio_protocol.Capability.value ```` ````` ````{py:data} CAPABILITIES_CORE :canonical: simvx.core.audio_protocol.CAPABILITIES_CORE :type: frozenset[simvx.core.audio_protocol.Capability] :value: > 'frozenset(...)' ```{autodoc2-docstring} simvx.core.audio_protocol.CAPABILITIES_CORE ``` ```` ````{py:data} PlayMode :canonical: simvx.core.audio_protocol.PlayMode :value: > None ```{autodoc2-docstring} simvx.core.audio_protocol.PlayMode ``` ```` `````{py:class} AudioPlaybackBackend :canonical: simvx.core.audio_protocol.AudioPlaybackBackend Bases: {py:obj}`typing.Protocol` ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend ``` ````{py:method} play_audio(stream: simvx.core.audio.AudioStream, *, mode: simvx.core.audio_protocol.PlayMode = 'non_positional', position: typing.Any = None, volume_db: float = 0.0, pitch: float = 1.0, loop: bool = False, bus: str = 'Master', max_distance: float = 100.0, from_position: float = 0.0, pan: float = 0.0, gain_db: float = 0.0) -> int | None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.play_audio ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.play_audio ``` ```` ````{py:method} stop_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.stop_audio ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.stop_audio ``` ```` ````{py:method} pause_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.pause_audio ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.pause_audio ``` ```` ````{py:method} resume_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.resume_audio ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.resume_audio ``` ```` ````{py:method} update_audio_2d(channel_id: int, volume_db: float, pan: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.update_audio_2d ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.update_audio_2d ``` ```` ````{py:method} update_audio_3d(channel_id: int, volume_db: float, pan: float, pitch: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.update_audio_3d ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.update_audio_3d ``` ```` ````{py:method} set_pitch(channel_id: int, pitch: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.set_pitch ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.set_pitch ``` ```` ````{py:method} set_listener_position(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_position ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_position ``` ```` ````{py:method} set_listener_velocity(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_velocity ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_velocity ``` ```` ````{py:method} set_listener_direction(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_direction ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_direction ``` ```` ````{py:method} set_listener_world_up(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_world_up ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.set_listener_world_up ``` ```` ````{py:method} get_playback_position(channel_id: int) -> float :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.get_playback_position ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.get_playback_position ``` ```` ````{py:method} is_channel_active(channel_id: int) -> bool :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.is_channel_active ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.is_channel_active ``` ```` ````{py:method} shutdown() -> None :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.shutdown ```{autodoc2-docstring} simvx.core.audio_protocol.AudioPlaybackBackend.shutdown ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.__slots__ :value: > () ```` ````{py:method} __init_subclass__(*args, **kwargs) :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.__init_subclass__ :classmethod: ```` ````{py:method} __class_getitem__(item) :canonical: simvx.core.audio_protocol.AudioPlaybackBackend.__class_getitem__ :classmethod: ```` ````` `````{py:class} AudioStreamingBackend :canonical: simvx.core.audio_protocol.AudioStreamingBackend Bases: {py:obj}`typing.Protocol` ```{autodoc2-docstring} simvx.core.audio_protocol.AudioStreamingBackend ``` ````{py:method} open_stream(*, volume_db: float = 0.0, bus: str = 'Master', buffer_seconds: float = 0.5, stream: simvx.core.audio.AudioStream | None = None) -> int :canonical: simvx.core.audio_protocol.AudioStreamingBackend.open_stream ```{autodoc2-docstring} simvx.core.audio_protocol.AudioStreamingBackend.open_stream ``` ```` ````{py:method} feed_audio_chunk(channel_id: int, chunk: bytes) -> None :canonical: simvx.core.audio_protocol.AudioStreamingBackend.feed_audio_chunk ```{autodoc2-docstring} simvx.core.audio_protocol.AudioStreamingBackend.feed_audio_chunk ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_protocol.AudioStreamingBackend.__slots__ :value: > () ```` ````{py:method} __init_subclass__(*args, **kwargs) :canonical: simvx.core.audio_protocol.AudioStreamingBackend.__init_subclass__ :classmethod: ```` ````{py:method} __class_getitem__(item) :canonical: simvx.core.audio_protocol.AudioStreamingBackend.__class_getitem__ :classmethod: ```` ````` `````{py:class} AudioBusBackend :canonical: simvx.core.audio_protocol.AudioBusBackend Bases: {py:obj}`typing.Protocol` ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBusBackend ``` ````{py:method} sync_bus_layout(layout: simvx.core.audio_bus.AudioBusLayout) -> None :canonical: simvx.core.audio_protocol.AudioBusBackend.sync_bus_layout ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBusBackend.sync_bus_layout ``` ```` ````{py:method} list_capabilities() -> frozenset[simvx.core.audio_protocol.Capability] :canonical: simvx.core.audio_protocol.AudioBusBackend.list_capabilities ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBusBackend.list_capabilities ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_protocol.AudioBusBackend.__slots__ :value: > () ```` ````{py:method} __init_subclass__(*args, **kwargs) :canonical: simvx.core.audio_protocol.AudioBusBackend.__init_subclass__ :classmethod: ```` ````{py:method} __class_getitem__(item) :canonical: simvx.core.audio_protocol.AudioBusBackend.__class_getitem__ :classmethod: ```` ````` `````{py:class} AudioBackend :canonical: simvx.core.audio_protocol.AudioBackend Bases: {py:obj}`simvx.core.audio_protocol.AudioPlaybackBackend`, {py:obj}`simvx.core.audio_protocol.AudioStreamingBackend`, {py:obj}`simvx.core.audio_protocol.AudioBusBackend`, {py:obj}`typing.Protocol` ```{autodoc2-docstring} simvx.core.audio_protocol.AudioBackend ``` ````{py:method} play_audio(stream: simvx.core.audio.AudioStream, *, mode: simvx.core.audio_protocol.PlayMode = 'non_positional', position: typing.Any = None, volume_db: float = 0.0, pitch: float = 1.0, loop: bool = False, bus: str = 'Master', max_distance: float = 100.0, from_position: float = 0.0, pan: float = 0.0, gain_db: float = 0.0) -> int | None :canonical: simvx.core.audio_protocol.AudioBackend.play_audio ```` ````{py:method} stop_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioBackend.stop_audio ```` ````{py:method} pause_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioBackend.pause_audio ```` ````{py:method} resume_audio(channel_id: int) -> None :canonical: simvx.core.audio_protocol.AudioBackend.resume_audio ```` ````{py:method} update_audio_2d(channel_id: int, volume_db: float, pan: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.update_audio_2d ```` ````{py:method} update_audio_3d(channel_id: int, volume_db: float, pan: float, pitch: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.update_audio_3d ```` ````{py:method} set_pitch(channel_id: int, pitch: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.set_pitch ```` ````{py:method} set_listener_position(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.set_listener_position ```` ````{py:method} set_listener_velocity(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.set_listener_velocity ```` ````{py:method} set_listener_direction(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.set_listener_direction ```` ````{py:method} set_listener_world_up(x: float, y: float, z: float) -> None :canonical: simvx.core.audio_protocol.AudioBackend.set_listener_world_up ```` ````{py:method} get_playback_position(channel_id: int) -> float :canonical: simvx.core.audio_protocol.AudioBackend.get_playback_position ```` ````{py:method} is_channel_active(channel_id: int) -> bool :canonical: simvx.core.audio_protocol.AudioBackend.is_channel_active ```` ````{py:method} shutdown() -> None :canonical: simvx.core.audio_protocol.AudioBackend.shutdown ```` ````{py:attribute} __slots__ :canonical: simvx.core.audio_protocol.AudioBackend.__slots__ :value: > () ```` ````{py:method} __init_subclass__(*args, **kwargs) :canonical: simvx.core.audio_protocol.AudioBackend.__init_subclass__ :classmethod: ```` ````{py:method} __class_getitem__(item) :canonical: simvx.core.audio_protocol.AudioBackend.__class_getitem__ :classmethod: ```` ````{py:method} open_stream(*, volume_db: float = 0.0, bus: str = 'Master', buffer_seconds: float = 0.5, stream: simvx.core.audio.AudioStream | None = None) -> int :canonical: simvx.core.audio_protocol.AudioBackend.open_stream ```` ````{py:method} feed_audio_chunk(channel_id: int, chunk: bytes) -> None :canonical: simvx.core.audio_protocol.AudioBackend.feed_audio_chunk ```` ````{py:method} sync_bus_layout(layout: simvx.core.audio_bus.AudioBusLayout) -> None :canonical: simvx.core.audio_protocol.AudioBackend.sync_bus_layout ```` ````{py:method} list_capabilities() -> frozenset[simvx.core.audio_protocol.Capability] :canonical: simvx.core.audio_protocol.AudioBackend.list_capabilities ```` `````