MicYou Native 插件开发指南C ABI、实时安全声明与虚拟设备深度集成【免费下载链接】MicYouMicYou is a powerful tool that turns your Android device into a high-quality microphone for your PC.项目地址: https://gitcode.com/gh_mirrors/mi/MicYouMicYou 可以把你的安卓手机变成电脑的高质量麦克风而它的插件系统让开发者能深度扩展音频处理能力。本篇是面向新手的MicYou Native 插件开发指南带你从零理解 C ABI 接口、realtimeSafe实时安全声明以及如何把插件接进虚拟麦克风输出流。一、为什么选择 Native 插件运行时MicYou 插件系统提供双运行时Nativecdylib 动态库与WASM沙箱模块。两者统一使用plugin.json清单与消息协议区别在于加载方式和能力边界维度Native 插件WASM 插件载体.so/.dylib/.dll.wasm单文件性能最高可直连系统 API解释执行适合逻辑类系统能力全部ONNX 推理、音频设备等无内存沙箱 宿主授权实时安全由插件保证宿主信任realtimeSafe声明默认 best-effort禁止声明 realtimeSafe典型用途实时 DSP、虚拟设备深度集成逻辑扩展、UI 面板、自动化一句话选型要碰实时音频数据、要深度系统集成就选 Native写面板、自动化、跨平台通用逻辑就选 WASM。架构上插件由 PluginManager 加载后通过 PluginBus 总线发布订阅、与 DSP 处理链协同工作完整说明见 docs/plugins/overview.md。二、插件目录结构与 plugin.json 清单每个 Native 插件就是一个目录结构极简插件目录/ ├── plugin.json # 清单必需 ├── entry # 动态库产物与清单 entry 一致 └── assets/ # 可选私有资源插件目录放在宿主插件目录下Linux/macOS 为~/.config/micyou/plugins/Windows 为%APPDATA%\micyou\plugins\目录名建议与插件 id 一致。清单中最关键的几个字段id反向域名如dev.micyou.example.gain必须含点runtime: nativeentry入口产物名。跨平台分发时省略后缀与lib前缀如my_plugin宿主会按当前系统自动补全.dll/.so/.dylib一个 ZIP 包即可全平台通用apiVersionHost API 版本当前为 1不匹配会被拒绝加载capabilities只申请需要的能力如dsp.node、config.read、audio.play越权调用会收到MPL_ERR_PERMISSION错误kind: dspdsp.realtimeSafe: true声明为实时 DSP 节点archesNative 插件必须声明支持的 CPU 架构完整字段表和校验规则见 docs/plugins/development-guide.md。官方示例 plugins/examples/native-soundpad/plugin.json 是一个可直接对照的 Native 清单模板。三、C ABI 接口三个必需符号 宿主函数表Native 插件通过版本化 C ABI 与宿主交互ABI 头文件定义在 tauri-app/crates/micyou-plugin/include/micyou_plugin_abi.h当前MPL_ABI_VERSION 1。插件只需导出3 个必需符号// 插件身份abiVersion、apiVersion、id 必须与 plugin.json 一致 const mpl_plugin_info_t *micyou_plugin_info(void); // 初始化宿主把 host 回调表交给你注意要按值完整拷贝不能只存指针 mpl_result_t micyou_plugin_init(const mpl_host_api_t *host); // 库卸载前调用一次 void micyou_plugin_deinit(void);另有 3 个可选符号缺省视为旁路/无操作符号作用micyou_plugin_process实时 DSP 入口原地处理交错 f32 采样帧micyou_plugin_handle_event接收本地事件设备连接/断开等micyou_plugin_handle_message接收跨端消息手机插件发来的数据、UI 动作、快捷键触发宿主通过mpl_host_api_t函数表反向提供服务读写配置、发布事件、跨端发消息、查询音频状态与设备列表、播放音效、注册全局快捷键、读写插件目录内文件、HTTP 请求等。API v2 还追加了静音控制、耳返监听、DSP 参数读写等控制面接口新字段严格追加在ctx之后旧插件无需重新编译。完整能力清单与缓冲区契约见 docs/plugins/api-reference.md。写 Rust 插件时有两个硬性细节Rust 官方示例在 plugins/examples/native-soundpad/src/lib.rspanic 必须被catch_unwind捕获绝不跨 FFI 边界传播host 结构体在init中按值拷贝到全局状态因为宿主在init返回后可能释放原内存四、realtimeSafe实时安全声明不是装饰dsp.realtimeSafe: true是宿主信任依据——宿主会默认你的process函数是实时的不做额外保护。这意味着以下规则是硬性要求违反可能导致爆音或卡顿不分配堆内存process内禁止Vec、String、格式化等任何堆分配不调用阻塞 host APIget_config涉及锁与 I/O只能在init中使用process里调用任何 host API 都可能导致死锁单帧处理时间 1 ms48 kHz 下一帧为 480 样本约 10 ms预算必须远低于此状态预先分配滤波器系数、历史缓冲在初始化时建好出错返回错误码并保持输出可预测静音或旁路绝不 panic对比之下WASM 插件因解释执行无法保证实时性宿主强制按 best-effort 处理并禁止其声明realtimeSafe。官方降噪门示例native-noisegate展示了正确姿势全程无分配、无 host 调用配置经原子变量无锁读取。五、深度集成虚拟设备从 DSP 链到虚拟麦克风输出这是 Native 插件最深度的部分——插件直接参与虚拟麦克风的数据通路。1. 插入 DSP 处理链音频线程解码后依次经过处理链AEC 回声消除 → 降噪 → 去混响 → EQ → 放大 → AGC → VAD插件系统通过合成节点Plugins注入链中由 tauri-app/crates/micyou-plugin/src/dsp.rs 中的PluginDspRegistry管理节点顺序dsp.insertAfter指定插入位置如AEC之后或first: true排在最前节点顺序确定性强first优先再按插件 id 排序单节点失败只记日志并旁路不影响整条链2. 音效混入虚拟麦克风流调用 host 的play_sound需audio.play能力播放 WAV 文件声音会混入虚拟麦克风输出流——电话对方和你本人都能听到等同于真实麦克风输入。典型用法按钮面板ui.route: buttons渲染按钮网格点击 → 收到ui:play消息 →play_sound全局快捷键register_hotkey(ctrlshifts)按下 → 总线投递hotkey:id消息 → 播放指定音效官方示例 plugins/examples/native-soundpad/ 完整演示了这条链路init时自动生成三个正弦波 WAV注册快捷键点击按钮或按下 CtrlShiftS 即可从虚拟麦克风输出音效。3. 跨端消息手机传感器 → 电脑处理手机与电脑连接后两端插件通过 protobufPluginMessage总线通信发布订阅 RPC 请求响应可把手机传感器数据送进电脑侧 DSP 插件处理详见 docs/plugins/architecture-extensibility.md。六、快速开发流程micyou-cli 工具链micyou-cli plugin create dev.micyou.mynative --runtime native # 生成骨架 micyou-cli plugin dev ./myplugin # 监听变更保存即热重装 micyou-cli plugin validate ./myplugin # 校验清单与入口产物 micyou-cli plugin package ./myplugin -o myplugin.zip # 打包导入安装到宿主后在设置-插件页「刷新」→ 启用 → 查看日志即可验证加载失败时list_plugins会返回error字段说明原因。集成测试夹具可参考 tauri-app/crates/micyou-plugin/tests/native_loader.rs。七、版本兼容策略速览ABI 冻结破坏性变更才升级MPL_ABI_VERSION并拒绝旧插件Host 函数表追加式演进新字段只加在ctx之后旧插件按旧偏移读取无需重编译能力逐调用校验未声明的能力返回错误码 8未声明的未知能力在清单校验阶段即被拒绝参考文档开发指南docs/plugins/development-guide.mdAPI 与错误码docs/plugins/api-reference.md架构与扩展说明docs/plugins/architecture-extensibility.mdABI 头文件tauri-app/crates/micyou-plugin/include/micyou_plugin_abi.hNative 示例源码plugins/examples/native-soundpad/src/lib.rs【免费下载链接】MicYouMicYou is a powerful tool that turns your Android device into a high-quality microphone for your PC.项目地址: https://gitcode.com/gh_mirrors/mi/MicYou创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
