🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

音频工坊 cloudoyx/any-audio

DeepSeek Harness
cloudoyx6 天前有提交已提供中文文档扫描:含敏感能力

让 Agent 编曲配音混音并合成完整音频作品

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add cloudoyx/any-audio
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 69 处,展示前 68 条)
  • 读取本地文件
    src/index.js:43
    const content = await readFile(new URL('./skills/anyaudio-scoring.md', import.meta.url), 'utf8')
  • 发起网络请求
    lib/client.js:229
    const response = await fetch(`${API}${path}`, {
  • 写入剪贴板
    lib/client.js:723
    h(Btn, { onClick: async () => { try { await navigator.clipboard.writeText(state.configPath); notify(t('路径已复制')) } catch { notify(t('复制失败,请手动选择'), 'err
  • 读取本地文件
    src/host/routes.js:33
    return JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version
  • 读取密钥环境变量
    src/host/routes.js:202
    if (!mimoConfigured && process.env.MIMO_API_KEY) mimoConfigured = true
  • 读取本地文件
    src/host/routes.js:273
    if (!existsSync(path)) throw new Error(`font not found: ${path}`)
  • 读取本地文件
    src/host/routes.js:294
    const doomed = await realpath(resolve(path)).catch(() => null)
  • 读取本地文件
    src/host/routes.js:295
    const target = resolved && !resolved.stale ? await realpath(resolved.path).catch(() => null) : null
  • 读取本地文件
    src/host/routes.js:326
    if (!target || !existsSync(target)) throw new Error(`font not found: ${target || '(empty path)'}`)
  • 读取本地文件
    src/host/routes.js:349
    if (!existsSync(path)) throw new Error(`font not found: ${path}`)
  • 读取密钥环境变量
    src/host/routes.js:392
    apiKey = process.env.MIMO_API_KEY ?? null
  • 读取密钥环境变量
    src/host/routes.js:431
    const result = { ok: true, service: Boolean(credentials), ref: 'MIMO_API_KEY', configured: Boolean(process.env.MIMO_API_KEY) }
  • 读取密钥环境变量
    src/host/routes.js:475
    MIMO_API_KEY: process.env.MIMO_API_KEY ? '(set)' : null,
  • 读取密钥环境变量
    src/tools/tts.js:16
    const env = process.env.MIMO_API_KEY
  • 写入本地文件
    src/tools/tts.js:128
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    src/tools/shared.js:89
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/tools/shared.js:91
    await writeFile(path, buffer)
  • 读取本地文件
    src/tools/shared.js:92
    const info = await stat(path)
  • 读取本地文件
    src/tools/shared.js:110
    text = await readFile(file, 'utf8')
  • 执行外部命令来自配置/变量
    src/tools/shared.js:139
    const result = spawnSync(command, ['-hide_banner', '-version'], { encoding: 'utf8', timeout: 15000, windowsHide: true })
  • 执行外部命令来自配置/变量
    src/tools/shared.js:154
    const result = spawnSync(python, ['-c', 'import imageio_ffmpeg;print(imageio_ffmpeg.get_ffmpeg_exe())'], { encoding: 'utf8', timeout: 15000, windowsHi
  • 读取本地文件
    src/tools/shared.js:157
    if (candidate && existsSync(candidate)) {
  • 执行外部命令来自配置/变量
    src/tools/shared.js:184
    const child = spawn(command, args, { windowsHide: true })
  • 读取本地文件
    src/audio/fonts.js:103
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/audio/fonts.js:111
    const info = await stat(path)
  • 读取本地文件
    src/audio/fonts.js:132
    const info = await stat(explicit)
  • 读取本地文件
    src/audio/fonts.js:159
    const info = await stat(candidate).catch(() => null)
  • 读取本地文件
    src/audio/fonts.js:165
    const info = await stat(candidate).catch(() => null)
  • 发起网络请求
    src/audio/fonts.js:187
    response = await fetch(url, { redirect: 'follow', signal: signal ?? AbortSignal.timeout(180000) })
  • 删除本地文件
    src/audio/fonts.js:210
    await unlink(temporary).catch(() => {})
  • 写入本地文件
    src/audio/fonts.js:213
    await writeFile(temporary, Buffer.concat(chunks))
  • 写入本地文件
    src/audio/fonts.js:214
    await rename(temporary, target).catch(async (error) => {
  • 删除本地文件
    src/audio/fonts.js:215
    await unlink(temporary).catch(() => {})
  • 写入本地文件
    src/audio/fonts.js:233
    await mkdir(directory, { recursive: true })
  • 写入本地文件
    src/audio/fonts.js:236
    const bytes = fromPath ? (await copyFile(resolve(workspaceRoot ?? process.cwd(), fromPath), path), (await stat(path)).size) : await download(targetUrl
  • 读取本地文件
    src/audio/fonts.js:236
    const bytes = fromPath ? (await copyFile(resolve(workspaceRoot ?? process.cwd(), fromPath), path), (await stat(path)).size) : await download(targetUrl
  • 写入本地文件
    src/audio/fonts.js:241
    await mkdir(directory, { recursive: true })
  • 删除本地文件
    src/audio/fonts.js:260
    await unlink(path).catch(() => {})
  • 读取本地文件
    src/audio/font-state.js:33
    const parsed = JSON.parse(await readFile(statePath(), 'utf8'))
  • 写入本地文件
    src/audio/font-state.js:43
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/audio/font-state.js:45
    await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    src/audio/font-state.js:46
    await rename(temporary, path)
  • 读取本地文件
    src/audio/font-state.js:113
    const resolvedTarget = await realpath(declared).catch(() => null)
  • 读取本地文件
    src/audio/font-state.js:118
    const parent = await realpath(dirname(declared)).catch(() => dirname(declared))
  • 读取本地文件
    src/audio/font-state.js:123
    roots.push(await realpath(dir).catch(() => resolve(dir)))
  • 读取本地文件
    src/audio/font-state.js:131
    const info = await stat(resolvedTarget)
  • 删除本地文件
    src/audio/font-state.js:133
    await unlink(declared)
  • 读取本地文件
    src/audio/synth.js:10
    const info = await stat(path)
  • 读取本地文件
    src/audio/synth.js:14
    const raw = await readFile(path)
  • 执行外部命令来自配置/变量
    src/audio/tts-providers.js:88
    const result = spawnSync(command, ['-e', 'process.stdout.write(process.version)'], {
  • 执行外部命令来自配置/变量
    src/audio/tts-providers.js:122
    const child = spawn(runtime, [EDGE_WORKER], { stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true })
  • 写入本地文件
    src/audio/tts-providers.js:203
    await mkdir(temporaryDir, { recursive: true })
  • 读取本地文件
    src/audio/tts-providers.js:240
    const parsed = parseWav(await readFile(wav))
  • 删除本地文件
    src/audio/tts-providers.js:248
    await unlink(mp3).catch(() => {})
  • 删除本地文件
    src/audio/tts-providers.js:249
    await unlink(wav).catch(() => {})
  • 发起网络请求
    src/audio/tts-providers.js:279
    const request = transport.request(
  • 读取本地文件
    src/config.js:241
    info = await stat(path)
  • 读取本地文件
    src/config.js:252
    parsed = JSON.parse(await readFile(path, 'utf8'))
  • 写入本地文件
    src/config.js:264
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/config.js:266
    await writeFile(temporary, `${JSON.stringify(config, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    src/config.js:267
    await rename(temporary, path)
  • 读取本地文件
    src/tools/mix.js:35
    const buffer = await readFile(path)
  • 写入本地文件
    src/tools/mix.js:66
    await mkdir(dirname(target), { recursive: true })
  • 执行外部命令来自配置/变量
    src/tools/mix.js:76
    child = spawn(command, ['-hide_banner', '-i', file], { windowsHide: true, stdio: ['ignore', 'ignore', 'pipe'], signal: AbortSignal.timeout(15000) })
  • 写入本地文件
    src/tools/mix.js:98
    await mkdir(dirname(outputPath), { recursive: true })
  • 读取本地文件
    src/tools/sfx.js:55
    const info = await stat(fontPath)
  • 读取本地文件
    src/tools/sources.js:37
    const names = await readdir(dir).catch(() => [])
  • 读取本地文件
    src/tools/sources.js:41
    const info = await stat(join(dir, name)).catch(() => null)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

智能体主导的音频制作工具包:采样乐器、基于时间线的编曲、音效、TTS、多轨混音和视频封装。

README

由 DeepSeek 最新模型翻译生成
AnyAudio 让 Agent 做出真正的声音。 An agent-driven audio production toolkit for music, sound effects, narration, and mixing. 一套由 Agent 驱动的音频制作工具,涵盖音乐、音效、配音与混音,让 Agent 具备音频制作能力。 先听为快 · 安装 · 音源 · 语音-tts · English AnyAudio 是面向 AI Agent 的音频制作工具。它把"声音创意"翻译成可执行的音频工程:写音符并渲染真实乐器、写台词并生成高质量语音、注入音效并编排结构、完成多轨混音。视频配乐、场景音效、独立音乐、有声书、播客、游戏音效,全部都可以用它做出来。 Agent 负责创意与编排,AnyAudio 提供将声音创意转化为实际音频作品所需的工具与执行能力。 它解决什么问题 模型已经能写代码合成声音,但很难让它听起来像乐器、像录音、像成品。AnyAudio 补的是这一段: - 真实乐器音色:用本地音源采样渲染,而不是手写振荡器。 - 音符直接落在时间轴上:精确到毫秒,音乐、旁白、音效共用同一个时钟。 - 混音自动平衡:按顺序放置多轨,支持每轨增益、声像与淡入淡出;把某轨标为 narration 时,插件会在人声出现时自动下压其它总线;母带做峰值归一,整体不会削波。
展开完整文档(README 剩余 1 节)
AnyAudio

让 Agent 做出真正的声音。

An agent-driven audio production toolkit for music, sound effects, narration, and mixing.

一套由 Agent 驱动的音频制作工具,涵盖音乐、音效、配音与混音,让 Agent 具备音频制作能力。

先听为快 · 安装 · 音源 · 语音-tts · English

AnyAudio 是面向 AI Agent 的音频制作工具。它把"声音创意"翻译成可执行的音频工程:写音符并渲染真实乐器、写台词并生成高质量语音、注入音效并编排结构、完成多轨混音。视频配乐、场景音效、独立音乐、有声书、播客、游戏音效,全部都可以用它做出来。

Agent 负责创意与编排,AnyAudio 提供将声音创意转化为实际音频作品所需的工具与执行能力。

它解决什么问题

模型已经能写代码合成声音,但很难让它听起来像乐器、像录音、像成品。AnyAudio 补的是这一段:

- 真实乐器音色:用本地音源采样渲染,而不是手写振荡器。
- 音符直接落在时间轴上:精确到毫秒,音乐、旁白、音效共用同一个时钟。
- 混音自动平衡:按顺序放置多轨,支持每轨增益、声像与淡入淡出;把某轨标为 narration 时,插件会在人声出现时自动下压其它总线;母带做峰值归一,整体不会削波。
- 音效与配音:音效既可取自已安装音源的采样,也可程序化合成;语音支持 Edge TTS 与 MiMo-V2.5-TTS(官方免费中)。

先听为快

两组素材内容完全相同,一组不用插件、一组用插件。建议先听,再看数字。

GitHub 默认静音播放内嵌视频,请点一下播放器右下角的喇叭图标开启声音。

《Fly Me to the Moon》bossa nova 版:Agent 自行编曲改编

同一段 57 秒的 bossa nova。A 版不使用 AnyAudio,由模型直接写 NumPy 合成;B 版由 AnyAudio 用本地音源渲染。编曲相同,只换声音来源。

| | A 版 — 不用 AnyAudio | B 版 — 用 AnyAudio |
| 峰值 / 平均电平 | -1.5 dBFS / -19.9 dB | -1.5 dBFS / -20.8 dB |
| 波峰因数 | 18.4 dB | 19.3 dB |
| 频谱质心 | 1,356 Hz | 1,890 Hz |
| 4 kHz 以上能量 | 6.8% | 11.6% |

音乐 A 版 — 波形与频谱图音乐 B 版 — 波形与频谱图https://github.com/user-attachments/assets/9f496f67-0bd7-496e-96d9-4c2ccb4a28ebhttps://github.com/user-attachments/assets/86ac18e0-f530-452b-9711-7f7471855b80

B 版使用音源素材,声音更真实,高频细节更多、动态余量更大。

五句对白的雨夜场景:语音与音效

同一个 24 秒场景,五句对白,加上雨声、脚步声、开门声,做两遍。台词和时间完全一样。

| | A 版 — 不用 AnyAudio | B 版 — 用 AnyAudio |
| 峰值 / 平均电平 | -1.5 dBFS / -27.5 dB | -1.5 dBFS / -26.1 dB |
| 波峰因数 | 26.0 dB | 24.6 dB |
| 频谱质心 | 5,629 Hz | 4,401 Hz |
| 4 kHz 以上能量 | 55.3% | 44.0% |

语音与音效 A 版 — 波形与频谱图语音与音效 B 版 — 波形与频谱图https://github.com/user-attachments/assets/c4ae1a17-d7bc-4db1-b96a-be244fd75358https://github.com/user-attachments/assets/4fca1c9e-b373-4ab7-b18b-afe3e81ad102

B 版人声情绪和节奏更贴合场景,音效更真实,细节更多。

安装

需要 Node.js 22.19+(22.x)或 24+(DSH 运行时自带);ffmpeg 只在生成语音和封装视频时需要。

dsh plugin --profile desktop add dsh-any-audio

如果 DSH 启动的不是 desktop profile,把 desktop 换成实际使用的 profile 名。装完重启一次 DSH,它才会加载这个插件。

之后在 DSH 设置里打开 AnyAudio 页面,安装音源(默认推荐 GeneralUser GS)、切换语音引擎、调整混音默认值。安装包本身不带任何 SoundFont。

从源码安装

本地开发时用克隆仓库的方式,而不是从 npm 安装:

git clone https://github.com/cloudoyx/any-audio.git
cd any-audio
npm install && npm run font
dsh plugin --profile desktop add "<克隆目录的绝对路径>"

路径要写绝对路径(Windows 上形如 D:/any-audio),添加后同样要重启一次 DSH。npm run font 会把两套建议音源(约 72 MB)下载进共享音源库,适合想在打开设置页之前就把音源准备好的情况。

克隆下来的仓库还带一个免 DSH 的离线渲染器,适合先单独把谱子调好:

node scripts/anyaudio-cli.mjs render score.json out.wav

快速开始

生成视频时像平时一样提需求,Agent 会自己调用插件进行音频渲染:

做一个 30 秒的水墨动画:石缝里的一粒种子长成树苗。配一点中国风音乐和风声,不要旁白。

可以随着调整音乐细节和混音逻辑:

古筝主旋律,弦乐铺底,大提琴走低音;人声出现时把音乐压下去。

想写歌时说清楚需求,直接调用:

帮我写一首日式 RPG 的战斗曲目,可无限循环,30 秒到 60 秒。乐器用鼓组 + 电吉他 + 弦乐。

你甚至可以从零开始制作有声小说:

帮我把《三国演义》第一章做成有声小说,旁白低沉浑厚,角色音色要有所区分,配一些简单的配乐和音效即可。

音源

仓库不打包 SoundFont。插件提供两套建议安装的音源——GeneralUser GS 作为默认基础音源,MuseScore General 作为额外的通用管弦乐音源——也支持加载放入 ~/.dsh/anyaudio/fonts 的兼容 SoundFont 音源(.sf2、.sf3、.dls)。该目录是整台机器共用的音源库,所有项目与 Agent 会话共用同一份,装过一次即可处处可用。

| 音源 | 体积 | 许可证 | 获取方式 | 说明 |
| GeneralUser GS | 32 MB | GeneralUser GS License v2.0 | 一键 | 建议安装 — 默认基础音源与兜底;唯一保证带鼓组的音源 |
| MuseScore General | 40 MB | MIT | 一键 | 建议安装 — 额外的通用管弦乐音源;309 个预设,弦乐与合奏更完整 |
| Upright Piano KW | 27 MB(7z) | CC0 1.0 | 手动 | 单乐器钢琴库,只用于钢琴轨 |
| Electric Guitar Clean | 446 MB(解压后) | CC0 1.0 | 手动 | 单乐器电吉他库 |

两套都装覆盖最广:GeneralUser GS 仍是默认音源,MuseScore General 参与管弦乐族的自动选择。后两套的下载地址与解压说明在设置页和 THIRD_PARTY_NOTICES.md;解压后保持文件名不变,插件才能识别。

语音 TTS

两个引擎,一个接口:

| 引擎 | Key | 说明 |
| Edge TTS(默认) | 不需要 | 免费,走 Microsoft 公共接口;需要 ffmpeg 把 MP3 转成 WAV;可能被限流,插件会重试并给出明确错误。 |
| MiMo-V2.5-TTS(可选) | 普通 Open Platform API Key | 音色与风格更多;Key 存在 DSH 凭据里,只在宿主侧读取。官方免费中,可自行注册 API Key。 |

MiMo 是手动选项:保存 Key 不会自动切换默认引擎,要显式选择。默认音色 mimo_default 由服务端集群决定,不同区域可能不同。本版本只支持普通 Open Platform Key。

已知限制

- 只支持 SoundFont:不支持 SFZ、Kontakt、VST;转换其它音源格式不在本版范围。
- 没有逐音符包络控制:发音与释放由预设决定;断奏用短音符加缝隙,强弱用力度与表情控制。
- 中国乐器是 GM 近似:guzheng 映射 Koto、dizi 映射 Flute、erhu 映射 Fiddle;专用音源会更好。

支持项目

AnyAudio 是一个独立开源项目。如果它对你的工作或创作有所帮助,欢迎请我喝杯咖啡,支持后续开发。

无论金额多少,都感谢你的支持。

微信支付

许可证

代码采用 MIT,见 LICENSE。

SoundFont 与第三方组件沿用各自许可证,见 THIRD_PARTY_NOTICES.md。本仓库不分发任何音源库。
预览分享卡片长什么样 ↓cloudoyx/any-audio
分享 · DeepSeek Harness Hub
cloudoyx/any-audio

让 Agent 编曲配音混音并合成完整音频作品

这是你的仓库?认领条目

回到顶部