Files
oak-editor/docs/zh/plans/completed/riir/M6-oakaudio.md
T
Mike-Solar 3cc6f75ccc docs: archive completed plans, add the external plugin system design
- docs/zh/plans: finished plans move to completed/ (the RIIR series, the
  event-bridge and dependency plans, the v04 manual test plan).
- New design docs: the external (functional) plugin system
  (process-isolated, JSON-RPC/shm) and its protocol.
- ai-agent-design refreshed; README pointers follow the moves.
2026-08-25 03:03:28 +08:00

66 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# M6 · oakaudio 拆分手册
> 内容:`engine/audio/`(AudioManager、AudioProcessor、输出设备
> 抽象、audiovisualwaveform)。
> 依赖:common 5、core 5、config 2、render 2、codec 1。拆分顺序第 6 位
> (小模块,穿插在 render 前做掉)。
## 1. 目标形态
```
oakaudio/
include/oakaudio/{manager.h, processor.h, types.h, export.h}
src/
tests/ # oakaudio_gtest
```
## 2. 冻结 C API
### 2.1 `oakaudio/processor.h`(实时重采样/格式转换,R6 已建过
`oakengine_audio_processor_*`,本表即其 oakaudio 版,语义不变)
```c
typedef struct OakAudioProcessor OakAudioProcessor;
OAKAU_API OakAudioProcessor *oakaudio_processor_init(void);
OAKAU_API void oakaudio_processor_free(OakAudioProcessor *p);
OAKAU_API int oakaudio_processor_open(OakAudioProcessor *p,
int in_rate, uint64_t in_layout, int in_format,
int out_rate, uint64_t out_layout, int out_format, double speed);
OAKAU_API void oakaudio_processor_close(OakAudioProcessor *p);
OAKAU_API int oakaudio_processor_convert(OakAudioProcessor *p,
float **data, int frame_count);
```
### 2.2 `oakaudio/manager.h`
```c
OAKAU_API int oakaudio_manager_init(int prefer_backend /* -1=auto */);
OAKAU_API void oakaudio_manager_shutdown(void);
OAKAU_API int oakaudio_manager_set_output_params(int rate,
uint64_t layout, int format);
OAKAU_API int oakaudio_manager_get_output_params(int *rate,
uint64_t *layout, int *format);
/* 推流:播放路径逐块喂 samples(float 交错) */
OAKAU_API int oakaudio_manager_push(const float *samples,
int frame_count, double speed);
OAKAU_API int oakaudio_manager_is_playing(void);
OAKAU_API void oakaudio_manager_stop(void);
/* 无事件接口(2026-08 修订,04 §3):输出参数的修改是调用方发的
* 命令(set_params),params_changed 通知由调用方所在层发出。 */
```
## 3. 切割点
| 现状 | 处理 |
|---|---|
| audio → render/ 2 | audiovisualwaveform 对 render 类型的引用:POD 化(波形 min/max 对数组),残留类型随 M3.5 下沉 |
| audio → codec/ 1 | 经 oakcodec C ABI(M5 已就位) |
## 4. 测试(映射 03 §2/§3)
- processor:open/convert/close 全链(44.1k stereo → 48k stereo,
帧数换算正确、无爆音断言用能量差阈值)、速度 1.5x。
- manager:无音频设备环境用 null backend 初始化(现有后端探测
模式),params set/get 往返(set 后 get 读数即生效——无事件)。
- `oakaudio_debug_alive_count()` 泄漏断言。