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 分