Skip to main content
Glama

🎵 Audio Sonic MCP

Tests License: MIT Python 3.10+ MCP

将任何歌曲转化为结构化的“声音签名”——提取节奏、音乐调性、512 维 CLAP 氛围嵌入、可读的氛围标签以及制作配置文件——仅需一次本地调用。

Audio Sonic MCP 完全在您的本地机器上运行(无需 API 密钥、外部服务器或云依赖),并为同一底层高保真音频分析引擎提供两个高级访问入口:

适用对象

核心接口与机制

🤖 MCP 服务器

LLM、AI 代理和 IDE(Claude、Cursor、Windsurf、Cline)

异步、即发即忘的 YouTube URL 分析。避免在繁重的音频处理过程中阻塞客户端 LLM。

🎚️ 本地 CLI

音乐人、声音制作人和音频工程师

面向本地文件的深度命令行工具,支持全曲多窗口分析和高保真输出。


🎹 快速体验:您将获得什么

1. 音乐人友好的 CLI 摘要(--summary 模式)

🎵 SONIC SIGNATURE — my_demo.mp3  (3:24)

  TEMPO    153.8 BPM  (steady)
  KEY      G Major  ·  shifts to G Phrygian @0:30   (confidence 74%)
  VIBE     aggressive · dark · driving · hip-hop · gritty

  PRODUCTION
     Vocals     forward
     Punch      0.62  (moderate)
     Stereo     wide
     Low end    ~55 Hz dominant

  Overall confidence: 88%   ·   analyzed in 0:28 (GPU-accelerated)

2. 综合 JSON(由 MCP 和 CLI 默认返回)

{
  "header": {
    "job_id": "sig_a3f9b2c1",
    "status": "success",
    "confidence_score": 0.88,
    "source_metadata": {
      "title": "Acoustic Vibe Demo",
      "duration_sec": 204,
      "source_type": "file"
    }
  },
  "sonic_signature": {
    "bpm": 153.8,
    "bpm_engine": "madmom",
    "bpm_variable": false,
    "key": "G Major",
    "key_variable": true,
    "key_map": [
      { "start_sec": 0.0,  "end_sec": 30.0, "key": "G Major" },
      { "start_sec": 30.0, "end_sec": 90.0, "key": "G Phrygian" }
    ],
    "mode_confidence": 0.74,
    "vibe_vector": [0.012, -0.034, "... 512 float dimensions ..."],
    "vibe_tags": ["aggressive", "dark", "driving", "hip-hop", "gritty"],
    "production_profile": {
      "vocal_presence": "forward",
      "transient_punch": 0.62,
      "stereo_width": "wide",
      "dominant_freq_peaks_hz": {
        "harmonic": [55.0, 110.2],
        "percussive": [125.0, 250.1]
      }
    }
  },
  "telemetry": {
    "inference_time_sec": 28.0
  }
}

Related MCP server: music-perception-mcp

⚡ 核心特性

  • 🥁 节奏与节拍跟踪 — 完整的 BPM 计算,包含变速漂移检测和瞬态窗口化。

  • 🎹 调性与和声映射 — 计算结构性的音乐调性和调式,生成详细的 key_map,跟踪逐段转调。

  • 🌈 氛围与风格嵌入 — 编译 512 维 CLAP 嵌入和人类可读的风格标签(涵盖能量、质感、情绪和流派),使用零样本音乐词汇分类。

  • 🎚️ 制作分析 — 测量人声空间存在感、瞬态冲击系数、立体声宽度和主频峰值。

  • 🤖 MCP 原生系统 — 完全暴露 4 个标准化的 Model Context Protocol 工具,便于即时集成到 AI 工具中。

  • 🪶 稳健的优雅降级 — 如果存在 CUDA GPU 则自动使用,否则回退到 CPU;如果省略重型深度学习包([clap]),则优雅降级到 HPSS 和标准 librosa 特征数组。

  • 🔒 100% 离线且私密 — 所有转换、分离和推理均在本地进行。


📦 安装与设置

系统先决条件

确保您的系统 PATH 中已安装并可用 Python 3.10+ 和 FFmpeg。

安装 FFmpeg:

  • macOS:brew install ffmpeg

  • Linux(Debian/Ubuntu):sudo apt update && sudo apt install -y ffmpeg

  • Windows:通过 PowerShell(管理员)运行 winget install Gyan.FFmpeg,或从 ffmpeg.org 手动下载并将 bin 目录添加到系统环境变量中。


分步安装

  1. 克隆仓库

    git clone https://github.com/ripunjay-kashyap/audio-sonic-mcp.git
    cd audio-sonic-mcp
  2. 初始化虚拟环境

    python -m venv .venv
    # Activate on macOS/Linux:
    source .venv/bin/activate
    # Activate on Windows (PowerShell):
    .venv\Scripts\activate
  3. 安装依赖 选择轻量级核心引擎或完整的高保真 ML 套件:

    • 选项 A:完整高保真 ML 套件(推荐) 包含分离音轨(Demucs)和零样本氛围向量(CLAP)。需要约 4 GB 磁盘空间。

      pip install -e ".[clap]"
    • 选项 B:核心轻量级流水线 使用标准数字信号处理(HPSS/librosa)。快速安装,占用空间极小。

      pip install -e .

[!NOTE] 可选的 [clap] 栈会安装 torch、torchaudio、transformers 和 demucs。如果没有这些,服务器会自动切换到轻量级回退方案(用 HPSS 代替 Demucs,用标准特征矩阵代替 CLAP 向量,并省略 vibe_tags)。


🤖 MCP 客户端配置指南

Audio Sonic MCP 注册为标准包脚本。这使您可以直接从虚拟环境的 bin 文件夹中使用全局可执行名称(audio-sonic-mcp)运行它,或手动运行脚本文件。

1. Claude Desktop 设置

打开您的 Claude 配置文件:

  • Windows:%APPDATA%\Claude\claude_desktop_config.json

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux:~/.config/Claude/claude_desktop_config.json

将服务器添加到您的 mcpServers 对象中:

{
  "mcpServers": {
    "audio-sonic-mcp": {
      "command": "C:\\path\\to\\audio-sonic-mcp\\.venv\\Scripts\\audio-sonic-mcp.exe",
      "args": [],
      "env": {
        "JOBS_ROOT": "C:\\path\\to\\audio-sonic-mcp\\jobs"
      }
    }
  }
}

[!IMPORTANT] Windows 用户:在 JSON 配置路径中始终使用双反斜杠(\\)。将可执行文件直接指向 .venv\Scripts\ 目录中的 .exe。


2. Cursor IDE 集成

要将 Audio Sonic MCP 集成到 Cursor 的 AI 面板中:

  1. 导航到 设置 ➔ 功能 ➔ MCP。

  2. 点击 + 添加新的 MCP 服务器。

  3. 填写参数:

    • 名称:audio-sonic-mcp

    • 类型:command

    • 命令:/path/to/audio-sonic-mcp/.venv/bin/audio-sonic-mcp(在 Windows 上使用 .exe 扩展名)


3. Windsurf 集成

打开您的 Windsurf MCP 配置文件(通常位于 ~/.codeium/windsurf/mcp_config.json)并追加配置:

{
  "mcpServers": {
    "audio-sonic-mcp": {
      "command": "/path/to/audio-sonic-mcp/.venv/bin/python",
      "args": ["/path/to/audio-sonic-mcp/server.py"],
      "env": {
        "JOBS_ROOT": "/path/to/audio-sonic-mcp/jobs"
      }
    }
  }
}

4. Cline(VS Code 扩展)设置

打开 Cline 的 MCP 设置文件(通常位于 %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json 或等效的平台存储位置)并添加:

{
  "mcpServers": {
    "audio-sonic-mcp": {
      "command": "/path/to/audio-sonic-mcp/.venv/bin/audio-sonic-mcp",
      "args": [],
      "env": {
        "JOBS_ROOT": "/path/to/audio-sonic-mcp/jobs"
      }
    }
  }
}

🤖 AI 代理和 LLM 的交互流程

LLM 通过读取暴露的工具定义自动学习如何使用此服务器。由于音频音轨分离和 CLAP 嵌入计算量较大,Audio Sonic MCP 使用异步即发即忘作业模式。

自动化 LLM 工作流

  [User Prompts LLM]
          │
          ▼
1. Submit URL ──────────────► [Tool: get_sonic_signature]
                                      │ (Returns Job ID instantly)
                                      ▼
2. Notify User ◄───────────── [LLM acknowledges job is queued]
          │
          ├───► 3. Wait 10-15s (Or proceed with other tasks)
          │
          ▼
4. Check Progress ──────────► [Tool: get_job_status]
                                      │ (Checks status: running/success/error)
                                      ▼
5. Present Signature ◄─────── [LLM formats rich output for user]

可尝试的自然提示

  • “检查我的 audio-sonic-mcp 服务器的健康状况,确保所有 ML 组件都已就绪。”

  • “提交这个 YouTube 曲目进行声音分析:https://www.youtube.com/watch?v=XXXXXX。”

  • “检查我的声音签名作业 sig_a1b2c3d4 的进度,并在完成后总结 BPM、制作宽度和氛围。”


🎚️ CLI 用法(本地文件)

对于直接在终端工作的音乐人、工程师和制作人,您可以直接分析本地完整文件,无需运行任何后台服务器:

# Get a visual, musician-friendly sonic signature digest (recommended)
python analyze_file.py "my_demo.wav" --summary

# Print full raw JSON directly to the stdout stream
python analyze_file.py "my_demo.wav"

# Dump JSON payload to a file while keeping the stdout clean
python analyze_file.py "my_demo.wav" > signature.json

CLI 命令选项参考

选项

简写

描述

path

无

本地音频文件的绝对或相对路径(必需)。

--summary

-s

打印干净、格式化的终端摘要,而不是标准 JSON。

--no-vector

无

生成 JSON 签名,但省略沉重的 512 维氛围浮点数组。

--out FILE

-o

将最终 JSON 签名直接输出到指定文件。

--keep

-k

不删除 jobs/ 中的中间 WAV 文件或分离的音轨文件。

--job-id ID

-j

显式定义内部标识符(适用于批处理脚本)。

支持的文件格式:wav、mp3、flac、ogg、m4a、aac。


🔧 环境变量参考

通过在当前终端会话、容器环境或 MCP 配置文件的 env 块中声明这些变量来配置环境选项:

变量

默认值

描述 / 实际用途

JOBS_ROOT

./jobs

工作目录,用于处理音频文件、临时转换的 WAV 和音轨。

KEEP_JOB_FILES

未设置

设置为 1 或 true 以在磁盘上保留分离的音轨 WAV(每个作业增加约 75MB,便于故障排除)。

FILE_MAX_DURATION_SEC

600

本地文件处理时长的安全上限(YouTube 下载限制为 60 分钟)。

FFMPEG_BIN

未设置

如果 ffmpeg 二进制文件不在系统 PATH 中,则指向包含它的文件夹路径。

YTDLP_PROXY

未设置

直接传递给 yt-dlp 的 HTTP/SOCKS 代理字符串,用于绕过速率限制或网络封锁。

TRANSPORT_MODE

stdio

服务器监听的传输方式:stdio(默认,用于本地 MCP 客户端)、sse(通过 HTTP 的远程 MCP)或 hybrid(MCP SSE 和来自 app_cloud.py 的 REST API)。sse/hybrid 需要 pip install ".[cloud]"。

PORT

8000

当 TRANSPORT_MODE 为 sse 或 hybrid 时的监听端口。对于 stdio 忽略。


🐳 Docker / Podman 执行

如果您希望避免设置本地 Python 库,通过容器运行可以封装 FFmpeg、yt-dlp 和核心 Python 依赖(基于 CPU 的流水线):

# Build the container image
docker build -t audio-sonic-mcp .

# Run the MCP server over stdio, mounting local folders for job persistence
docker run -i --rm \
  -v "$(pwd)/jobs:/app/jobs" \
  -v "$(pwd)/models:/app/models" \
  audio-sonic-mcp

要将 Claude Desktop 连接到您的 Docker 容器,请配置 claude_desktop_config.json:

{
  "mcpServers": {
    "audio-sonic-mcp-docker": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/absolute/path/to/jobs:/app/jobs",
        "-v", "/absolute/path/to/models:/app/models",
        "audio-sonic-mcp"
      ]
    }
  }
}

⚙️ 底层工作原理

Audio Sonic MCP 的流水线是模块化构建的,使用事务性检查点确保可靠性。

  LLM Agent / Claude Desktop                 Musician (Terminal)
            │                                          │
            │  MCP (stdio JSON-RPC)                    │  analyze_file.py
            ▼                                          ▼
┌──────────────────────────────────────────────────────────────────────────┐
│  Modular 6-Stage Analysis Pipeline                                       │
│                                                                          │
│  Stage 1: Ingestion   │ Pre-checks format, scans duration metadata       │
│  Stage 2: Download    │ Fetches audio tracks via yt-dlp (URLs only)      │
│  Stage 3: Conversion  │ normalizes sample formats to 44.1kHz WAV (FFmpeg)│
│  Stage 4: Separation  │ Splits stems: Vocals, Drums, Bass, Other (Demucs)│
│  Stage 5: Analysis    │ Computes BPM, modulations, key, punch (librosa)  │
│  Stage 6: Embeddings  │ Generates 512-dim zero-shot music vibe tags (CLAP)│
└─────────────────────────────────────┬────────────────────────────────────┘
                                      ▼
             Result Payload: (header · sonic_signature · telemetry)
  1. 音轨分离:Meta AI 的 Demucs(mdx_extra) 将曲目分离为隔离音轨(vocals、drums、bass、other)。如果缺失,则优雅地回退到谐波-打击乐源分离(HPSS)。

  2. 分析引擎:librosa 提取节奏和音调结构,将和弦模式和次低音运动与 Krumhansl-Schmuckler 和 Phrygian 模板引擎进行匹配。

  3. 语义氛围标签:LAION CLAP(laion/larger_clap_music_and_speech)对高覆盖美学描述符(情绪、质感、流派)进行零样本推理,在风格两极之间选择最佳候选。


🩺 韧性与故障排除

1. 一次性设置下载延迟

在首次分析作业使用完整 ML 流水线时,demucs 和 transformers 将下载其预训练模型权重(Demucs 约 400 MB,CLAP 约 200 MB)。

  • 服务器将下载进度指示器重定向到 stderr,因此它们不会破坏 JSON-RPC 标准流。

  • 在此下载期间,get_job_status 将保持 running 状态。根据您的网络速度,允许 1–3 分钟。后续启动时间不到 10 秒。

2. FastMCP 并发控制

多阶段架构上的模型推理对 CPU/VRAM 消耗极高。为了保护消费级硬件和虚拟环境免于崩溃(OutOfMemory 异常),Audio Sonic MCP 强制执行严格的全局序列化锁(CONCURRENCY_LOCK)。

  • 如果您同时提交多个 URL,它们将被顺序处理。

  • 轮询后续作业的 get_job_status 将在它们等待流水线队列时报告 queued 或 running。

3. Windows Librosa 死锁修复

Windows 下的 FastMCP 线程调度可能导致后台工作线程内的 Numba 编译死锁。为防止这种情况,Audio Sonic MCP 在启动时加入了预热例程(_prewarm_librosa() 和 _prewarm_demucs())。它在启动 RPC 监听器之前,强制在主线程中对重采样、HPSS 和单声道混音函数进行 JIT 编译。

4. BPM 精度与 bpm_engine 字段

节奏由 madmom 的 RNN 节拍追踪器估算。madmom 是一个可选依赖:它已不再维护(最新版本 0.16.1,分类器止步于 Python 3.7),并且需要 Cython 构建,因此无法在所有环境中可靠安装,也不是默认安装的一部分。

当 madmom 不可用时,流水线回退到 librosa。该回退在稳定的四踩底鼓素材上表现良好,但可能锁定到真实节奏的2:3 或八度倍数——在我们的一个回归测试样本中,它对 148 的真实值报告了 99.4 BPM。

因此,节奏永远不会无凭据地报告。每个负载都携带一个 bpm_engine 字段,指明实际产生该数值的引擎:

bpm_engine

含义

madmom

RNN 节拍追踪器——完全精度。

librosa-fallback

madmom 不可用;将 BPM 视为近似值,并预期偶尔出现八度/三连音误差。

check_health 明确报告 madmom 的状态。要启用精确路径:

pip install ".[beats]"

如果在较新的 Python 上构建失败,请为分析环境使用 3.10——madmom 没有针对更新解释器的 wheel 包。

5. 使用 check_health 进行诊断

如果服务器报告为 degraded 或工具缺失,请调用 check_health 工具或检查 CLI 警告。它会查询:

  • 执行路径上 ffmpeg 的可用性。

  • Python 包(librosa、soundfile、mcp 等)的安装状态。

  • 可选 madmom 节拍追踪器的存在情况,以及由此将使用哪个 bpm_engine。

  • 对 JOBS_ROOT 目录的访问权限。


🛠️ 开发与测试

在虚拟环境中运行单元测试,使用合成的音频波形验证数学流水线:

# Install development test framework
pip install -e ".[dev]"

# Execute full suite (requires no network or model downloads)
pytest

# Test specifically CLI execution code paths
pytest tests/test_cli.py

📄 许可证

根据 MIT 许可证分发。详见 LICENSE。

© 2026 Ripunjay Kashyap。保留所有权利。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to analyze audio files, extracting tempo, key, beat drops, volume surges, high tones, loudness, brightness, and structure, and returning structured JSON and visualizations.
    2
    MIT