openal.py

OpenAL Audio Backend for LunaEngine - Cross-platform (Linux/Windows)
Supports device selection, stereo balance, and immediate property changes.
Now includes optional stereo→mono conversion for panning support.
EFX extension support for reverb and effects.
Extended to load audio from bytes (bundle support).

class OpenALError

Description

No documentation

Methods

No methods defined.

class OpenALDevice

Description

No documentation

Attributes
_instance: Any = None
Methods
def __new__(cls: Any, device_name: Optional[str] = None) -> Any
No documentation
def __init__(self: Any, device_name: Optional[str] = None) -> Any
No documentation
def _init(self: Any, device_name: Optional[str] = None) -> Any
No documentation
def list_devices() -> List[str]
No documentation
def close(self: Any) -> Any
No documentation
def is_initialized(self: Any) -> bool
No documentation

class OpenALBuffer

Description

No documentation

Attributes
_buffer_pool: Dict[str, 'OpenALBuffer'] = {}
Methods
def get_or_create(cls: Any, filepath: str, device: OpenALDevice, force_mono: bool = False, force_8bit: bool = False) -> Optional['OpenALBuffer']
Load a sound from a file path. Uses a cache.
def from_bytes(cls: Any, data: bytes, name: str, device: OpenALDevice, force_mono: bool = False, force_8bit: bool = False) -> Optional['OpenALBuffer']
Create a buffer from raw bytes (useful for bundle loading).
'name' is used for caching (e.g., the atlas name).
def __init__(self: Any, buffer_id: int) -> Any
No documentation
def _update_info(self: Any) -> Any
No documentation
def _load_audio_file(buffer_id: ALuint, filepath: str, force_mono: bool, force_8bit: bool) -> bool
No documentation
def _load_wav(buffer_id: ALuint, filepath: str, force_mono: bool, force_8bit: bool) -> bool
No documentation
def _load_audio_from_bytes(buffer_id: ALuint, data: bytes, force_mono: bool, force_8bit: bool) -> bool
Load audio from raw bytes. Attempts to detect format.
Currently supports WAV only (using wave.open on BytesIO).
def _load_with_pygame(buffer_id: ALuint, filepath: str, force_mono: bool, force_8bit: bool) -> bool
No documentation
def _convert_stereo_to_mono(data: bytes, sample_width: int) -> bytes
Convert 2-channel PCM to mono by averaging samples.
def _convert_16bit_to_8bit(data: bytes) -> bytes
Convert 16-bit PCM to 8-bit (linear).
def cleanup_unused(cls: Any, max_age: float = 300.0) -> Any
No documentation

class OpenALSource

Description

No documentation

Methods
def __init__(self: Any, source_id: int) -> Any
No documentation
def set_buffer(self: Any, buffer: OpenALBuffer) -> Any
No documentation
def set_volume_immediate(self: Any, volume: float) -> Any
No documentation
def set_balance_immediate(self: Any, balance: float) -> Any
No documentation
def set_pan_immediate(self: Any, pan: float) -> Any
No documentation
def set_pitch_immediate(self: Any, pitch: float) -> Any
No documentation
def set_effect(self: Any, effect_type: int, params: Optional[Dict[str, float]] = None) -> bool
Apply an EFX effect (reverb, echo, etc.) to this source.
Returns True if successful.
Requires EFX_AVAILABLE.
def remove_effect(self: Any) -> Any
Remove any attached effect.
def play(self: Any, loop: bool = False) -> Any
No documentation
def pause(self: Any) -> Any
No documentation
def resume(self: Any) -> Any
No documentation
def stop(self: Any) -> Any
No documentation
def rewind(self: Any) -> Any
No documentation
def is_playing(self: Any) -> bool
No documentation
def is_paused(self: Any) -> bool
No documentation
def get_position(self: Any) -> float
No documentation
def delete(self: Any) -> Any
No documentation

class OpenALBackend

Description

No documentation

Methods
def __init__(self: Any, max_sources: int = 32, device_name: Optional[str] = None) -> Any
No documentation
def get_free_source(self: Any) -> Optional[OpenALSource]
No documentation
def cleanup(self: Any) -> Any
No documentation
def is_initialized(self: Any) -> bool
No documentation
Back to Backend Module