# __init__.py - Package entry point import os import sys import warnings try: from ._version import __version__ except ImportError: try: from _version import __version__ except ImportError: __version__ = "unknown" # ============================================================ # Export top-level functions from audio_parser # ============================================================ try: from .audio_parser import ( batch_get_metadata, batch_get_duration, batch_get_metadata_by_type, get_audio_duration, get_audio_metadata, ) except ImportError: try: from audio_parser import ( batch_get_metadata, batch_get_duration, batch_get_metadata_by_type, get_audio_duration, get_audio_metadata, ) except ImportError: # Define as None if audio_parser not available batch_get_metadata = None batch_get_duration = None batch_get_metadata_by_type = None get_audio_duration = None get_audio_metadata = None def is_full_performance() -> bool: """Check if running in full performance mode.""" info = _auto_check_runtime() return info.get('is_full_performance', False) if info else False def get_runtime_info() -> dict: """Get runtime information dictionary.""" info = _auto_check_runtime() return info.copy() if info else {} # ============================================================ # Banner # ============================================================ if os.environ.get('AP_DS_HIDE_SUPPORT_PROMPT') != '1': print(f"AP_DS © - Audio Library By DVS v{__version__} | https://apds.top") # ============================================================ # Runtime Environment Detection # ============================================================ SUPPRESS_WARNINGS = os.environ.get('AP_DS_SUPPRESS_WARNINGS', '').lower() in ('1', 'true', 'yes', 'on') SHOW_CONGRATS = os.environ.get('AP_DS_SHOW_CONGRATS', '').lower() not in ('0', 'false', 'no', 'off') _AUTO_CHECK_SKIP = os.environ.get('AP_DS_SKIP_AUTO_CHECK', '1').lower() in ('1', 'true', 'yes', 'on') # ============================================================ # Show Technical Manual (User-Initiated) # ============================================================ def show_tech_manual() -> None: """ Display the complete AP_DS 0.0.1a3 Technical Manual. This function prints a comprehensive technical reference including: - Library architecture - Supported audio formats - Core components description - API reference - Performance tuning - Environment variables - Cross-platform notes - Troubleshooting guide User must call this function explicitly. It will NOT be called automatically. Examples: >>> from ap_ds import show_tech_manual >>> show_tech_manual() """ manual = r""" ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ AP_DS 0.0.1a3 TECHNICAL MANUAL ║ ║ Audio Library By DVS - https://apds.top ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ ┌───────────────────────────────────────────────────────────────────────────────┐ │ 1. OVERVIEW │ └───────────────────────────────────────────────────────────────────────────────┘ AP_DS (Audio Playback & Data Service) is a cross-platform, high-performance audio library for Python applications. Built on SDL2 and SDL2_mixer, it provides: • Low-latency audio playback • Accurate metadata parsing (pure Python, no external dependencies) • Smart WAV handling with automatic mode switching • DAP (Dvs Audio Playlist) recording with O(1) deduplication • Batch metadata extraction with multi-core parallelism • Fade in/out controls with position seeking • Memory-efficient caching with automatic cleanup ┌───────────────────────────────────────────────────────────────────────────────┐ │ 2. SUPPORTED AUDIO FORMATS │ └───────────────────────────────────────────────────────────────────────────────┘ ┌──────────────┬─────────────┬─────────────────────────────────────────┐ │ Format │ Extension │ Notes │ ├──────────────┼─────────────┼─────────────────────────────────────────┤ │ MP3 │ .mp3 │ Frame-by-frame scanning, >98% accuracy │ │ WAV │ .wav │ RIFF chunk parsing, 100% accuracy │ │ FLAC │ .flac │ STREAMINFO block, 100% accuracy │ │ OGG Vorbis │ .ogg │ Granule position, 99.99% accuracy │ │ AAC (ADTS) │ .aac │ ADTS frame parsing, >99% accuracy │ │ OPUS │ .opus │ libopusfile decode, waveOut playback │ └──────────────┴─────────────┴─────────────────────────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────┐ │ 2.1 OPUS SUPPORT (NEW in 0.0.1a3) │ └───────────────────────────────────────────────────────────────────────────────┘ AP_DS 0.0.1a3 adds native Opus playback support via libopusfile + winmm waveOut. This is a separate playback path from SDL2, automatically selected when the audio file is an Opus (.opus) file. Key Features: • Automatic detection: Opus files are routed to OpusAudio sub-player • AID mapping: Main library AID <-> Opus sub-library AID (1:1) • Auto-download: Opus DLLs downloaded from https://dvsyun.top • Hash verification: SHA256 verified after download • Full control: play / pause / resume / stop / seek / volume / fade Modules: • opusplayer.py - OpusAudio class (Opus playback engine) • _opusdll.py - DLL loader + auto-download + hash verification OpusAudio class: class OpusAudio(frequency=48000, channels=2, volume_pct=80) Same API as AudioLibrary for Opus files: play_from_file / new_aid / play_from_memory pause_audio / play_audio / stop_audio / seek_audio set_volume / get_volume fadein_music / fadein_music_pos / fadeout_music get_audio_metadata / get_audio_duration / batch_* Usage (automatic routing through AudioLibrary): from ap_ds import AudioLibrary lib = AudioLibrary() aid = lib.play_from_file("song.opus") # auto-routed to OpusAudio Direct usage: from ap_ds import OpusAudio opus = OpusAudio() aid = opus.play_from_file("song.opus") Opus DLLs (auto-downloaded from https://dvsyun.top/ap_ds/download/): • libopusfile-0.dll (Opus file decoding) • libopus-0.dll (Opus codec core) • libogg-0.dll (Ogg container) • libopusurl-0.dll (Opus URL streaming) ┌───────────────────────────────────────────────────────────────────────────────┐ │ 3. CORE COMPONENTS │ └───────────────────────────────────────────────────────────────────────────────┘ 3.1 AudioLibrary (player.py) ──────────────────────────── Main class providing all audio playback and management functionality. Methods: • play_from_file(file_path, loops=0, start_pos=0.0) -> int Play audio directly from file, returns AID • play_from_memory(file_path, loops=0, start_pos=0.0) -> int Play audio from memory cache, returns AID • new_aid(file_path) -> int Generate AID without playing (preloads to cache) • pause_audio(aid) -> None Pause audio playback • stop_audio(aid) -> float Stop playback and return played duration • seek_audio(aid, position) -> None Seek to specified position in seconds • set_volume(aid, volume) -> bool Set volume (0-128) • get_volume(aid) -> int Get current volume • fadein_music(aid, loops=-1, ms=0) -> bool Fade in music • fadein_music_pos(aid, loops=-1, ms=0, position=0.0) -> bool Fade in music from position • fadeout_music(ms=0) -> bool Fade out music • clear_memory_cache() -> None Clear all cached audio data • save_dap_to_json(save_path) -> bool Save DAP recordings to .ap-ds-dap file • get_dap_recordings() -> List[Dict] Get current DAP recordings • clear_dap_recordings() -> None Clear all DAP recordings 3.2 Metadata Parsers (audio_parser.py) ────────────────────────────────────── Pure-Python parsers for audio metadata extraction. Functions: • get_audio_duration(file_path) -> int Get duration in seconds • get_audio_metadata(file_path) -> Dict Get complete metadata (duration, sample_rate, channels, bitrate) • batch_get_metadata(file_paths, max_workers=None, show_progress=False) -> List[Dict] Parse multiple files in parallel • batch_get_duration(file_paths, max_workers=None) -> Dict[str, int] Get durations for multiple files • batch_get_metadata_by_type(file_paths, file_type, max_workers=None) -> List[Dict] Filter results by format 3.3 SDL2 Loader (_sdl2.py) ────────────────────────── Cross-platform SDL2 library loader with automatic fallback. Loading order (Linux): 1. Package directory 2. User config (~/.config/ap_ds/sdl_paths.conf) 3. System libraries 4. Auto-install via package manager 5. Interactive setup Loading order (Windows/macOS): 1. Package directory 2. System path 3. Automatic download from CDN ┌───────────────────────────────────────────────────────────────────────────────┐ │ 4. DAP (Dvs Audio Playlist) SYSTEM │ └───────────────────────────────────────────────────────────────────────────────┘ The DAP system automatically records every audio file that is played or loaded through the AudioLibrary. Features: • O(1) Deduplication: Uses Python set for fast duplicate checking • Fallback O(n): Linear scan if set deduplication fails • Persistent Storage: Save to .ap-ds-dap JSON files • Memory Efficient: Stores only metadata, not audio data Record Structure: { "path": "/path/to/audio.mp3", "duration": 240, "bitrate": 320000, "channels": 2 } ┌───────────────────────────────────────────────────────────────────────────────┐ │ 5. WAV SMART MODE │ └───────────────────────────────────────────────────────────────────────────────┘ WAV files are automatically handled differently based on duration: ┌────────────────────┬─────────────────┬────────────────────────────────┐ │ Duration │ Mode │ SDL2 API Used │ ├────────────────────┼─────────────────┼────────────────────────────────┤ │ < WAV_THRESHOLD │ Sound Effect │ Mix_PlayChannel (memory) │ │ >= WAV_THRESHOLD │ Music │ Mix_PlayMusic (streaming) │ └────────────────────┴─────────────────┴────────────────────────────────┘ Default threshold: 6 seconds Configure via: AP_DS_WAV_THRESHOLD environment variable ┌───────────────────────────────────────────────────────────────────────────────┐ │ 6. ENVIRONMENT VARIABLES │ └───────────────────────────────────────────────────────────────────────────────┘ AP_DS_WAV_THRESHOLD ───────────────── WAV mode switching threshold in seconds. Default: 6 Range: 0-29 (values >=30 reset to 6) Example: AP_DS_WAV_THRESHOLD=10 AP_DS_SUPPRESS_WARNINGS ───────────────────── Suppress GIL warning messages. Default: 0 (warnings enabled) Values: 1, true, yes, on Example: AP_DS_SUPPRESS_WARNINGS=1 AP_DS_SHOW_CONGRATS ───────────────── Show congratulations message when GIL is disabled. Default: 1 (show) Values: 0, false, no, off (to hide) Example: AP_DS_SHOW_CONGRATS=0 AP_DS_SKIP_AUTO_CHECK ─────────────────── Skip runtime self-check on import. Default: 1 (skip) Values: 1, true, yes, on (to skip) Example: AP_DS_SKIP_AUTO_CHECK=0 # Show self-check AP_DS_HIDE_SUPPORT_PROMPT ────────────────────── Hide the support prompt banner. Default: 0 (show banner) Values: 1 Example: AP_DS_HIDE_SUPPORT_PROMPT=1 ┌───────────────────────────────────────────────────────────────────────────────┐ │ 7. PERFORMANCE OPTIMIZATION │ └───────────────────────────────────────────────────────────────────────────────┘ 7.1 Free-Threading Support ────────────────────────── AP_DS 0.0.1a3 is optimized for Python 3.15t (free-threading mode). When running with GIL disabled, performance improves significantly: • Batch metadata parsing uses ProcessPoolExecutor • Multiple audio operations can run in parallel • Lower latency for concurrent playback To enable free-threading: Download Python 3.15t from: https://mirrors.huaweicloud.com/python/3.15.0/python-3.15.0b4t-amd64.zip 7.2 Batch Processing ──────────────────── Use batch APIs for processing multiple files: metadata = batch_get_metadata(directory, max_workers=4, show_progress=True) Workers default to CPU count. Adjust based on: • I/O bound: Use more workers (CPU count * 2) • CPU bound: Use CPU count (or CPU count - 1 on 4+ cores) 7.3 Memory Management ───────────────────── Audio data is cached in memory. To manage memory: • Use new_aid() to preload without playing • Call clear_memory_cache() periodically for long-running apps • WAV files under 6 seconds are cached as Mix_Chunk in memory • WAV files over 6 seconds stream via Mix_Music ┌───────────────────────────────────────────────────────────────────────────────┐ │ 8. CROSS-PLATFORM NOTES │ └───────────────────────────────────────────────────────────────────────────────┘ 8.1 Windows ─────────── • DLLs automatically downloaded from CDN • SDL2.dll and SDL2_mixer.dll placed in package directory • os.add_dll_directory() used for modern Windows • PATH environment variable updated automatically 8.2 macOS ───────── • Frameworks downloaded as DMG and auto-extracted • SDL2.framework and SDL2_mixer.framework • DYLD_FRAMEWORK_PATH updated automatically • Supports both Intel (x64) and Apple Silicon (ARM) 8.3 Linux ───────── • No automatic download (distribution compatibility) • Uses system package manager when possible • Manual installation instructions provided • Supports: Ubuntu/Debian (apt), Fedora (dnf), Arch (pacman) • LD_LIBRARY_PATH updated when loading from package ┌───────────────────────────────────────────────────────────────────────────────┐ │ 9. TROUBLESHOOTING │ └───────────────────────────────────────────────────────────────────────────────┘ 9.1 "Failed to load music file" ────────────────────────────── • Verify file exists and is readable • Check if SDL2_mixer supports the format • For WAV files > 6s, ensure file is valid PCM 9.2 "SDL initialization failed" ──────────────────────────────── • SDL2 library not loaded properly • On Windows, check antivirus isn't blocking DLLs • On Linux, install SDL2 development packages 9.3 "audio_parser not available" ────────────────────────────────── • audio_parser.py missing from package • Reinstall ap_ds: pip install --upgrade ap_ds 9.4 "GIL is enabled" warning ────────────────────────────── • Running on standard Python (non-free-threading) • Upgrade to Python 3.15t for full performance • Or suppress with AP_DS_SUPPRESS_WARNINGS=1 9.5 DAP recordings not saving ────────────────────────────── • Check file extension: must be .ap-ds-dap • Verify write permissions on save location • Ensure at least one file was played/loaded ┌───────────────────────────────────────────────────────────────────────────────┐ │ 10. API REFERENCE │ └───────────────────────────────────────────────────────────────────────────────┘ 10.1 AudioLibrary Class ─────────────────────── class AudioLibrary(frequency=44100, format=MIX_DEFAULT_FORMAT, channels=2, chunksize=2048) 参数: frequency: Audio sample rate (Hz) format: Audio format (MIX_DEFAULT_FORMAT) channels: Number of channels (1=mono, 2=stereo) chunksize: Audio buffer size 10.2 AID (Audio ID) System ────────────────────────── Every audio playback/load returns a unique AID. Use AID to control playback: aid = lib.play_from_file("song.mp3") lib.pause_audio(aid) lib.seek_audio(aid, 30.0) lib.stop_audio(aid) 10.3 Channel vs Music ───────────────────── Sound Effect Mode (Mix_PlayChannel): • Up to 8 simultaneous sounds • Loaded into memory (Mix_Chunk) • Low latency • Best for short sounds (<6s) Music Mode (Mix_PlayMusic): • One at a time • Streamed from disk (Mix_Music) • Supports seeking and fading • Best for long tracks (>=6s) ┌───────────────────────────────────────────────────────────────────────────────┐ │ 10.4 Opus Error Codes (NEW in 0.0.1a3) │ └───────────────────────────────────────────────────────────────────────────────┘ Opus-specific error codes (2000+): ┌──────────┬────────────────────────────────────────────┬──────────────────────────────────┐ │ Code │ Name │ Description │ ├──────────┼────────────────────────────────────────────┼──────────────────────────────────┤ │ 2001 │ AP_DS_ERR_OPUS_LIB_LOAD_FAILED │ libopusfile-0.dll load failed │ │ 2002 │ AP_DS_ERR_OPUS_DLL_DEPENDENCY │ DLL dependency missing │ │ 2003 │ AP_DS_ERR_OPUS_OPEN_FAILED │ Opus file open failed │ │ 2004 │ AP_DS_ERR_OPUS_HEADER_CORRUPT │ OpusHead header corrupt │ │ 2005 │ AP_DS_ERR_OPUS_TAGS_PARSE_FAILED │ OpusTags tag parse failed │ │ 2006 │ AP_DS_ERR_OPUS_DECODE_FAILED │ Opus decode failed │ │ 2007 │ AP_DS_ERR_OPUS_SEEK_FAILED │ Opus seek failed │ │ 2008 │ AP_DS_ERR_OPUS_BITRATE_UNAVAILABLE │ Bitrate unavailable │ │ 2009 │ AP_DS_ERR_OPUS_NOT_SEEKABLE │ Stream not seekable │ │ 2010 │ AP_DS_ERR_OPUS_CHANNEL_INVALID │ Invalid channel count │ └──────────┴────────────────────────────────────────────┴──────────────────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────┐ │ 11. VERSION HISTORY │ └───────────────────────────────────────────────────────────────────────────────┘ Version 0.0.1a3 (Current) ──────────────────────── • Opus playback support (libopusfile + waveOut) • OpusAudio class with automatic routing • Opus DLL auto-download + SHA256 verification • Opus-specific error codes (2001-2010) • Opus batch parsing • Opus vs original format distinction Version 0.0.1a1 ───────────── • Python 3.15t free-threading support • Lazy imports for Python 3.15+ • DAP O(1) deduplication • Batch metadata extraction • Smart WAV mode switching • Audio metadata parsers (pure Python) • Cross-platform SDL2 loader Version 3.x ─────────── • Initial SDL2 bindings • Audio playback and control • Volume control • Basic metadata support ┌───────────────────────────────────────────────────────────────────────────────┐ │ 12. CONTRIBUTING & SUPPORT │ └───────────────────────────────────────────────────────────────────────────────┘ Website: https://apds.top Source Code: https://gitcode.com/dvsxt/ap_ds Documentation: https://apds.top/docs Issues: https://gitcode.com/dvsxt/ap_ds/issues License: MIT Author: DVS Email: support@apds.top ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ END OF MANUAL ║ ║ AP_DS 0.0.1a3 - August 2026 ║ ║ ║ ║ 📖 For detailed Markdown documentation, visit: ║ ║ https://apds.top ║ ║ https://gitcode.com/dvsxt/ap_ds ║ ║ ║ ║ 📝 View source code: ║ ║ https://gitcode.com/dvsxt/ap_ds ║ ║ ║ ║ 💬 Report issues: ║ ║ https://gitcode.com/dvsxt/ap_ds/issues ║ ║ ║ ║ 💡 Quick start: ║ ║ from ap_ds import AudioLibrary ║ ║ lib = AudioLibrary() ║ ║ aid = lib.play_from_file("music.mp3") ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ """ print(manual) def _check_runtime_mode(): """ Check GIL status and notify the user accordingly. Returns: bool: True if GIL is enabled, False if disabled (free-threading) """ try: gil_enabled = sys._is_gil_enabled() except AttributeError: gil_enabled = True if not gil_enabled: if SHOW_CONGRATS: print("🎉 ap_ds: GIL disabled (free-threading mode)") else: if not SUPPRESS_WARNINGS: warnings.warn( "⚠️ ap_ds: GIL is enabled (multi-core parallelism limited).\n" " For full performance, upgrade to Python 3.15t:\n" " https://mirrors.huaweicloud.com/python/3.15.0/python-3.15.0b4t-amd64.zip\n" " To suppress this warning, set AP_DS_SUPPRESS_WARNINGS=1", RuntimeWarning, stacklevel=2 ) return gil_enabled def _auto_check_runtime(): """ Automatic runtime self-check on library import. Prints diagnostic information including: - Python version - GIL status - Profiling availability - Performance mode - CPU cores - Platform - Library info (name, version, install path, website, author) Can be disabled by setting environment variable: AP_DS_SKIP_AUTO_CHECK=1 Returns: dict: Runtime information dictionary """ if _AUTO_CHECK_SKIP: return None print("\n" + "=" * 60) print("🔍 ap_ds Runtime Self-Check") print("=" * 60) # Library Info print(f"📚 Library: AP_DS (Audio Library By DVS)") print(f"📌 Version: {__version__}") print(f"📂 Install Path: {os.path.dirname(os.path.abspath(__file__))}") print(f"🌐 Website: https://apds.top") print(f"📦 PyPI: https://pypi.org/project/ap-ds/") print(f"📦 Mirror: https://pypi.tuna.tsinghua.edu.cn/simple/ap-ds/") print() print("📥 Installation:") print(" pip install ap-ds==0.0.1a3") print(" pip install ap-ds==0.0.1a3 -i https://pypi.tuna.tsinghua.edu.cn/simple") print(" pip install /path/to/ap-ds-0.0.1a3-py3-none-any.whl") print(f"👤 Author: DVS") print() print("📖 Description:") print(" AP_DS (Audio Playback & Data Service) is a cross-platform audio") print(" library built on SDL2 and SDL2_mixer, designed for Python applications") print(" requiring high-performance audio playback and metadata management.") print() print(" Core Features:") print(" • Audio Playback: MP3, WAV, FLAC, OGG, AAC, and more") print(" • Smart WAV Handling: Auto-switch between music/sound effect mode") print(" • Metadata Parsing: Duration, sample rate, channels, bitrate") print(" • DAP Recording: O(1) deduplication playlist generation") print(" • Batch Processing: Multi-core parallel metadata extraction") print(" • Fade Control: Fade in/out with position seeking support") print(" • Memory Management: Efficient caching with automatic cleanup") print() print(" Performance:") print(" • Native SDL2 bindings with zero-copy audio processing") print(" • Free-threading support (Python 3.15t) for maximum parallelism") print(" • ProcessPoolExecutor for CPU-bound batch operations") print() print(" Platform Support:") print(" • Windows (x64) • macOS (x64/ARM) • Linux (x64/ARM)") print() print(" Documentation: https://apds.top/docs") print(" Source Code: https://gitcode.com/dvsxt/ap_ds") print(" License: DVS Audio Library (ap_ds) Open Source License Version 2.0") print() print(f"🐍 Python: {sys.version.split()[0]} ({sys.implementation.name})") try: gil_enabled = sys._is_gil_enabled() print(f"🔒 GIL: {'Enabled' if gil_enabled else 'Disabled (Free-Threading)! 🎉'}") except AttributeError: gil_enabled = True print(f"🔒 GIL: Unknown (pre-3.14, assumed Enabled)") try: import profiling has_profiling = True print(f"📊 Profiling: Available (Python 3.15+)") except ImportError: has_profiling = False print(f"📊 Profiling: Not available (requires Python 3.15+)") is_full = has_profiling and not gil_enabled print(f"🚀 Full Performance Mode: {'✅ YES! (3.15t)' if is_full else '❌ No (degraded mode)'}") print(f"💻 CPU Cores: {os.cpu_count() or 0}") print(f"🖥️ Platform: {sys.platform}") print("=" * 60) if not is_full: print("💡 Tip: Upgrade to Python 3.15t for full performance:") print(" https://mirrors.huaweicloud.com/python/3.15.0/python-3.15.0b4t-amd64.zip") print(" To suppress this auto-check, set AP_DS_SKIP_AUTO_CHECK=1") else: print("🎉 You're running in full performance mode! Enjoy!") print("=" * 60 + "\n") return { "library_name": "AP_DS", "library_version": __version__, "library_install_path": os.path.dirname(os.path.abspath(__file__)), "library_website": "https://apds.top", "library_author": "DVS", "python_version": sys.version.split()[0], "gil_enabled": gil_enabled, "has_profiling": has_profiling, "is_full_performance": is_full, "cpu_count": os.cpu_count() or 0, "platform": sys.platform, } # ============================================================ # Runtime Self-Check on Import # ============================================================ _RUNTIME_CHECKED = False def ensure_runtime_checked(): """Ensure runtime check is performed only once.""" global _RUNTIME_CHECKED if not _RUNTIME_CHECKED: _check_runtime_mode() _RUNTIME_CHECKED = True ensure_runtime_checked() # Execute auto self-check on import (user can call again later) _auto_check_runtime() # ============================================================ # Import Player Module (AudioLibrary and all core functions) # ============================================================ try: from .player import * except ImportError: from player import * # ============================================================ # Opus Support (opusplayer.py) # ============================================================ try: from .opusplayer import OpusAudio except ImportError: try: from opusplayer import OpusAudio except ImportError: OpusAudio = None # ============================================================ # Export Self-Check Functions (users can call manually) # ============================================================ try: # Try direct assignment first (functions already defined in this module) auto_check_runtime = _auto_check_runtime check_runtime_mode = _check_runtime_mode except Exception: # Fallback: import from current package try: from . import _auto_check_runtime as auto_check_runtime from . import _check_runtime_mode as check_runtime_mode except Exception: # Final fallback: define as None auto_check_runtime = None check_runtime_mode = None # ============================================================ # Public API # ============================================================ # __init__.py __all__ = [ "__version__", "AudioLibrary", "OpusAudio", "get_audio_duration", "get_audio_metadata", "batch_get_metadata", "batch_get_duration", "batch_get_metadata_by_type", "auto_check_runtime", "check_runtime_mode", "show_tech_manual", ]