1仕組みと動作原理
機能はすべて3つの要素属性に集約されます:`data-fx-chain`(エフェクトチェーン)、`data-automation`(エンベロープ)、`data-fx-carve`(ボイスオーバーカーブ設定)——属性を記述すること自体がミキシングであり、プレビューとレンダリングは同一の Web Audio グラフ(Studio リアルタイムコンテキスト、engine オフラインコンテキスト)でこれらの属性を実行します。
Effects live on the element as `data-fx-chain`, and preview and render run the same Web Audio graph — the studio in a live context, the engine in an offline one inside the browser it already drives. There is one implementation of each effect, so what you hear while scrubbing is what gets written. You never tune twice.
エフェクトファミリーは全12種類:gain、EQ(highpass/lowpass/peaking/shelves)、compressor、limiter、gate、saturate、delay、reverb、chorus、phaser、bitcrush。シリアルチェーン規律(補正フィルターを先頭、キャラクター系を中段、リミッターを最後尾に配置)。詳細は references/{attributes,fx-registry,presets,diagnosis}.md を参照。
The shipped effect families are gain, EQ (highpass, lowpass, peaking, shelves), compressor, limiter, gate, saturate, delay, reverb, chorus, phaser, and bitcrush.
診断手法は「計測優先」:単一の未知のボーカルの絶対スペクトルは診断不能(フォルマント ±10dB や基本周波数 85〜255Hz も欠陥のように見えうる)であり、同一ファイル内の参照(生声や無音部のノイズ)と比較する必要があります。これは不可侵のルールとして定義されています。
> **The absolute spectrum of a single unknown voice cannot be diagnosed.** > Formants are ±10 dB, fundamentals run 85–255 Hz, and sentences decline 5–6 dB > as they end. Every one of those reads as a defect on its own, and every one of > them is the speaker.
ボイスオーバーカーブ(本スキルのコアコンセプト)は「エフェクトではなく関係性」:設定は処理対象の bed 要素に記述し、sources は voice グループを指します。単一の strength(0..1) ノブからすべて(カット深度、バンド数、帯域幅、レベルマッチング、リリース)を導出します。carve.mjs は Studio パネルと同じコア分析関数(classifyAudioName、analyseCarveBands など)を使用します。
The settings live on the _bed_ — the track that gets processed — and they name the voices to listen to, exactly as a sidechain compressor does: you select the track that gets quieter and pick what makes it quieter. **Never put a carve on a voice track.**
ヘッドレス実行エントリポイントが実在:`node <SKILL_DIR>/scripts/carve.mjs --comp index.html` で bed/voice を自動認識し、動的デフォルト強度 0.25 を適用して決定レポートを出力します。PATH 上の ffmpeg とプロジェクト内の @hyperframes/core が必要です(CLI インラインの core は利用不可)。
With no --bed/--voice it works out the tracks itself: the bed, and every voice playing over it. `--voice` may be repeated to name them instead.
レンダリングセマンティクスには明確な境界が存在:残響などのテール効果(reverb/delay)はレンダリングトラックをソースより長くします(mixer に余韻を通過させるよう chainTailSeconds が通知)。無効なチェーンの場合はドライ信号を出力するくらいならミックス全体を失敗させます。プレビュー時は逆に、解釈不能なチェーンはドライ音を出力してコンポジションの動作を維持します。
What enforces those is the render: a chain it cannot parse fails the whole mix rather than quietly writing the dry signal, because a mix that sounds plausible and is wrong is worse than a refusal. Preview is the opposite by design: an unreadable chain plays dry so the composition stays workable.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | ffmpeg(carve.mjs 解码分析;需在 PATH) |
| package | @hyperframes/core(音频分析函数 classifyAudioName/carveProfile/analyseCarve*;项目内 npm i -D) |
| network | (间接)npm install @hyperframes/core 首次拉包;渲染/预览在浏览器 Web Audio 执行(无外发) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node <SKILL_DIR>/scripts/carve.mjs --comp index.html(execFileSync でローカル ffmpeg を呼び出し)
- 本地工作目录: ファイルの読み書きと成果物の出力: carve.mjs が data-fx-carve、data-fx-chain、data-automation 属性をコンポジションへ書き戻し
5二重目の独立検証
- [ok] 『零网络』声称 — 对 skills/hyperframes-audio 全部 md/mjs 做 http(s) 扫描零命中;carve.mjs import 面仅 node:fs/path/child_process/url + 项目 @hyperframes/core,无 fetch/网络库。
- [ok] ffmpeg 依赖与解码率声明 — carve.mjs 头注释 'Needs `ffmpeg` on PATH (to decode the audio)' + SAMPLE_RATE 48000 常量与 Studio decode rate 一致性声明复核一致。
- [ok] fromCarve 重跑保留手工效果声称 — SKILL.md 原文 'a re-run replaces the previous carve and leaves every effect you built by hand — and every lane you drew by hand — exactly where it was' 复核一致(写链带 fromCarve tag 的机制描述)。
- [discrepancy] 能力实现位置是否在 skill 目录内 — 首轮易误读为 skill 自带 DSP 实现;复核确认 buildFxChain/scheduleChainAutomation/carveProfile 等实现在 @hyperframes/core 与 engine(audioFxGraph.ts/audioFxAutomation.ts/audioCarve.ts 由 SKILL.md 图引用),skill 目录只含 SKILL.md + 4 references + carve.mjs(6 文件)——实现在下游包,本技能是契约+CLI 壳,已如实表述。
- [ok] shell 注入面检查(ffmpeg 调用方式) — carve.mjs 使用 node:child_process execFileSync(argv 数组),未见 exec/shell 字符串拼接;ffmpeg 输入为本地文件路径。
6結論
cf9e74173b75410e…