--- name: audio_engine kind: function lang: cpp domain: gamedev version: "0.1.0" purity: impure signature: "engine_init() -> Engine; engine_shutdown(Engine&); engine_set_volume(Engine&, float)" description: "Lifecycle del engine de audio basado en miniaudio (single-header, public domain). Inicializa device default, expone master volume, y libera recursos. Cross-platform: Windows/Linux/macOS via WASAPI/ALSA/CoreAudio y WebAudio bajo emscripten. Issue 0072b — runtime gamedev nucleo. Esta TU es la unica del proyecto que define MINIAUDIO_IMPLEMENTATION." tags: [gamedev, audio, miniaudio] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] example: | fn::audio::Engine eng = fn::audio::engine_init(); if (!eng.ok) { /* fallback silencioso */ } fn::audio::engine_set_volume(eng, 0.8f); // ... loop principal ... fn::audio::engine_shutdown(eng); tested: false tests: [] test_file_path: "" file_path: "cpp/functions/gamedev/audio_engine.cpp" params: - name: e desc: "Engine handle. ok=true tras engine_init exitoso. Estructura opaca: impl apunta a ma_engine internamente." - name: v desc: "Volumen master 0..1 (lineal). Valores >1 amplifican (riesgo de clipping)." output: "Engine con impl=ma_engine* y ok=true si MA_SUCCESS, ok=false en cualquier fallo (malloc o init de miniaudio). engine_shutdown deja ok=false e impl=nullptr — llamadas posteriores son no-op seguros." --- # audio_engine Wrapper minimo del engine de [miniaudio](https://miniaud.io/) (v0.11.25, single-header, public domain / MIT-0). Vendored en `cpp/vendor/miniaudio/`. ## Por que Audio cross-platform sin depender de SDL_mixer / OpenAL / FMOD. Compila en Windows/Linux/macOS y WASM (emscripten) desde el mismo source. Sin excepciones, sin RTTI, sin std::string. ## Notas - Estado de fallo se reporta via `Engine.ok=false`. No hay `error_type` porque no devolvemos `error_go_core`-style; el consumidor revisa `ok` antes de operar. - `MINIAUDIO_IMPLEMENTATION` se define UNICAMENTE en `audio_engine.cpp`. Otras TU que usen miniaudio deben hacer solo `#include "miniaudio.h"`. - Memoria via `malloc`/`free` (no `new`) para mantener compat con `-fno-exceptions`.