Source code for simvx.editor.panels.inspector_sections._audio_section

"""AudioStreamSection -- audio file picker.

Registered with the section registry via @register_inspector_section at
import time.
"""

from simvx.core import (
    AudioStream,
    AudioStreamPlayer,
    AudioStreamPlayer2D,
    AudioStreamPlayer3D,
    Control,
)

from ._base import (
    InspectorSection,
    _make_property_row,
    _make_resource_picker,
    register_inspector_section,
)


[docs] @register_inspector_section class AudioStreamSection(InspectorSection): section_title = "Audio" priority = 20
[docs] def can_handle(self, node): return isinstance(node, AudioStreamPlayer | AudioStreamPlayer2D | AudioStreamPlayer3D)
[docs] def build_rows(self, node, ctx): rows: list[Control] = [] current_path = node.stream.path if node.stream else None picker = _make_resource_picker(current_path=current_path, file_filter="*.ogg;*.wav;*.mp3;*.flac") picker.file_selected.connect(lambda path, c=ctx, n=node: _set_audio_stream(n, path, c)) picker.cleared.connect(lambda c=ctx, n=node: _set_audio_stream(n, None, c)) rows.append(_make_property_row("Stream", picker)) ctx.register_widget("audio_stream", picker) return rows
def _set_audio_stream(node, path, ctx): old_stream = node.stream new_stream = AudioStream(path) if path else None def do_fn(): node.stream = new_stream def undo_fn(): node.stream = old_stream ctx.on_callable_command(do_fn, undo_fn, description=f"Set {node.name} audio stream") ctx.property_changed_signal.emit(node, "stream", old_stream, new_stream)