Live Audio Intelligence

io.github.ykshah1309由 GitHub 账号 ykshah1309 发布v0.1.3更新于 Oct 24, 2026

Live webcast transcription + vocal stress analysis (F0 jitter, hesitation) for earnings calls.

概览

AI 生成的概览

实时转写财经直播音频,并给出说话人语音压力的启发式评分。

可以做什么
解析直播网址,用 ffmpeg 抓取音频,并通过 faster-whisper 在 CPU 上分块滚动转写。提供四个工具:monitor_live_stream 启动监听并返回 stream_id,get_rolling_transcript 获取最近若干分钟的转写文本,analyze_speaker_stress 返回 0-100 的压力评分以及音高抖动、犹豫比例和停顿统计,stop_monitor 结束监听并清理。压力评分是若干韵律特征的手工加权组合,文档明确说明其为启发式,未经过市场结果验证。
适用场景
适合需要实时转写财报电话会、投资者日或财经新闻直播,并粗略判断说话人紧张程度的场景。分析师可以在同一对话中既询问刚说了什么,也询问说话时的语气状态。
运行要求
以 stdio 方式在本地运行;需要 Python 3.10 或更高版本,可从 PyPI 安装或用 uvx 运行。FFmpeg 必须作为系统二进制单独安装并加入 PATH。首次运行会从 Hugging Face 下载 faster-whisper base.en 模型(约 140 MB),需要网络访问。可选环境变量 LAI_MAX_CONCURRENT_STREAMS 可提高默认 4 路并发上限。
安装前请注意
服务器会抓取并处理第三方直播音频,直播网址及其内容会经过本地处理流程。它会启动 ffmpeg 和 yt-dlp 子进程并写入临时文件。压力评分采用手工设定的权重和饱和点,属于启发式指标,未针对市场结果做实证验证,不应作为交易信号。未声明任何凭据。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Live Audio Intelligence,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

live-audio-intelligence-mcp

MCP server for live financial webcast transcription and heuristic vocal stress analysis.

Turns any live webcast URL (earnings calls, CNBC, investor days) into a real-time pipeline that feeds an LLM two things simultaneously:

  1. A rolling transcript via faster-whisper (CPU, int8).
  2. A heuristic vocal stress score (0–100) derived from F0 pitch jitter, hesitation ratio, and voiced-frame fraction. These prosodic features are well-established correlates of speaker arousal in the vocal-analysis literature; their composition into the score below is heuristic and has not been empirically validated against market outcomes. Treat it as a coarse signal, not an oracle.

Built on the Model Context Protocol. Exposes 4 tools over stdio; drop it into Claude Desktop, Claude Code, or any MCP client.


Why this exists

Sell-side analysts and hedge-fund PMs don't just want to read the earnings transcript after the fact — they want a real-time signal about how confident the CFO sounds when asked about Q4 guidance. This server wires a Whisper pipeline and a pYIN-based prosody analyzer directly into an LLM's tool loop, so the model can ask "what did the CEO just say about China?" and "how stressed did they sound saying it?" in the same conversation.


Install

1. System prerequisite — FFmpeg

FFmpeg is a system binary, not a Python package. The ffmpeg-python wrapper is not a dependency here — we drive the binary directly via subprocess. You must install it yourself.

macOS (Homebrew):

bash
brew install ffmpeg

Linux (Debian / Ubuntu):

bash
sudo apt-get update && sudo apt-get install -y ffmpeg

Linux (Fedora / RHEL):

bash
sudo dnf install -y ffmpeg

Windows — choose one:

powershell
# Option A — winget (Windows 10/11)winget install --id=Gyan.FFmpeg -e
# Option B — Chocolateychoco install ffmpeg
# Option C — Scoopscoop install ffmpeg

Confirm it's on your PATH:

bash
ffmpeg -version

If the command errors with "not found", reopen the terminal (PATH changes don't propagate to already-open shells) or add the ffmpeg bin/ directory to your PATH manually.

2. Python package

Requires Python ≥ 3.10.

bash
pip install live-audio-intelligence-mcp

Or run directly without installing with uv:

bash
uvx live-audio-intelligence-mcp

The first run will download the faster-whisper base.en model (~140 MB) from Hugging Face and cache it under ~/.cache/huggingface/.


Run it

Stdio MCP server:

bash
live-audio-intelligence-mcp

Or equivalently:

bash
python -m live_audio_intelligence_mcp

Claude Desktop

Add to claude_desktop_config.json:

json
{  "mcpServers": {    "live-audio-intelligence": {      "command": "live-audio-intelligence-mcp"    }  }}

Claude Code

bash
claude mcp add live-audio-intelligence -- live-audio-intelligence-mcp

Tools

ToolPurpose
monitor_live_stream(url, disable_vad=False)Resolve the audio URL, spawn ffmpeg, start chunking + transcription. Returns a stream_id.
get_rolling_transcript(stream_id, minutes_back=10)Get the last N minutes of concatenated transcript text.
analyze_speaker_stress(stream_id, time_window_seconds=60)Run prosody analysis over the last N seconds of audio. Returns stress score, pitch jitter, hesitation ratio, pause stats, and a human-readable interpretation.
stop_monitor(stream_id)Kill ffmpeg, clean up temp files, drop the transcript buffer.

The stress score

ScoreInterpretation
0–20Confident, fluent delivery
20–45Normal variation
45–75Elevated stress — worth monitoring
75–100High stress — potential market-moving signal

Composite of:

  • Pitch jitter (coefficient of variation of F0) — 50% weight, saturating at jitter = 0.12
  • Hesitation ratio (fraction of audio in pauses > 400 ms) — 35% weight, saturating at 0.30
  • Unvoiced fraction (speaker trailing off) — 15% weight

The three features are literature-backed correlates of speaker arousal (see pYIN for F0 tracking, and the broad "disfluency is a correlate of cognitive load" line of work). The weights and saturation points are hand-picked defaults, chosen so that a calm speaker scores in the 0–20 band on clean studio audio and visibly stressed speech scores ≥ 45 — they are not fit to any labeled dataset. Consumers who care about absolute numbers should recalibrate thresholds against their own recordings.

A synthetic-audio calibration harness lives at scripts/validate_stress_score.py. It generates controlled audio (smooth sine, jittered pitch, silence-padded speech) and asserts that the score responds in the expected direction. This is calibration evidence, not market-outcome validation.

Low-SNR mode

For speakerphone audio (most earnings Q&A), pass disable_vad=true to monitor_live_stream. Silero VAD tends to aggressively classify muddy conference-call speech as silence; disabling it preserves more of the speech at the cost of transcribing a bit more ambient noise.

Concurrency limits

By default the server caps concurrent streams at 4 (each stream holds an ffmpeg subprocess, a yt-dlp subprocess, a thread, and a temp directory). Override via env var for high-throughput deployments:

bash
LAI_MAX_CONCURRENT_STREAMS=16 live-audio-intelligence-mcp

Exceeding the cap raises StreamLimitExceededError rather than silently queuing.


Architecture

                 ┌──────────────────┐    URL  ─────▶  │  yt-dlp resolve  │                 └────────┬─────────┘                          │ audio URL                          ▼                 ┌──────────────────┐      ┌────────────────┐                 │  ffmpeg (bg)     │ ───▶ │  15s WAV chunk │                 │  16kHz mono PCM  │      │  queue         │                 └──────────────────┘      └───────┬────────┘                                                   │                                ┌──────────────────┴────────────────┐                                ▼                                   ▼                       ┌──────────────────┐              ┌──────────────────┐                       │ faster-whisper   │              │  librosa.pyin    │                       │ (int8 / CPU)     │              │  + pause detect  │                       └────────┬─────────┘              └────────┬─────────┘                                │ rolling transcript              │ stress score                                ▼                                 ▼                            ┌────────────── MCP stdio ───────────────┐                            │    LLM (Claude) — calls tools freely   │                            └────────────────────────────────────────┘

All blocking work (Whisper inference, ffmpeg I/O, librosa DSP) is dispatched to threads via asyncio.to_thread so the MCP event loop stays responsive.


Development

bash
git clone https://github.com/ykshah1309/live-audio-intelligence-mcpcd live-audio-intelligence-mcppython -m venv .venvsource .venv/bin/activate  # Windows: .venv\Scripts\activatepip install -e ".[dev]"pytestlive-audio-intelligence-mcp

Running the tests

The pytest suite in tests/ covers the pure-Python logic that doesn't require network or ffmpeg:

  • URL syntactic validation (scheme allow-list, host presence)
  • Concurrency-cap enforcement in StreamManager
  • Custom exception hierarchy (backward-compat with ValueError / RuntimeError)
  • Prosody analyzer on synthetic audio (sine tone, silence, jittered pitch)
bash
pytest -q

Calibration benchmark

bash
python scripts/validate_stress_score.py

This generates synthetic audio with known acoustic properties and verifies the stress score responds in the expected direction. It's a sanity check for the weighting heuristics — not a replacement for empirical validation against real earnings-call outcomes.


Troubleshooting

ffmpeg: command not found — ffmpeg isn't on PATH. See the install section above. On Windows, reopen your terminal after installing.

yt-dlp could not resolve URL — The site isn't supported by yt-dlp or the URL is malformed. Test with yt-dlp -F <url> from the command line; if that fails, the server will too.

Whisper downloads hang on first run — The ~140 MB model download goes to ~/.cache/huggingface/. Check your network and Hugging Face access.

"Insufficient voiced frames" in stress output — The audio window is mostly silence or noise. Usually means the stream is still buffering; wait 30s and retry. For speakerphone Q&A, start the monitor with disable_vad=true.


Contributing

See CONTRIBUTING.md.

Changelog

See CHANGELOG.md.

License

MIT — see LICENSE.

来源:README.md,提交 71f03a3

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.3最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分