プラグインインストール: セットアップまたはフレッシュネスコマンドを実行する前に、このスキルが HyperFrames プラグイン内にある場合は プラグイン実行ルール に従ってください。スタンドアロンインストールの場合は、以下のアップデート手順をそのまま使用します。
HyperFrames Audio
ミックスとは、プロセッサのスタックではなく、関係性のセットです。単独で正しく聞こえる2つのトラックが、一緒になると聴くに堪えないことがあり、その修正はほとんどの場合「片方を下げる」ことではありません。問題は、それらが何を奪い合っているかを見つけ出し、それを必要とする方に与えることです。ここにあるすべてのツールは、それらの関係性の1つを表現するために存在します。
エフェクトは要素上に data-fx-chain として存在し、プレビューとレンダリングは同じ Web Audio グラフを実行します。ライブコンテキストでのスタジオ、オフラインコンテキストでのエンジン、どちらもブラウザ内で動作します。各エフェクトの実装は1つだけなので、スクラブ中に聞こえるものがそのまま書き出されます。二度調整する必要はありません。
クリップタイミングは /hyperframes-core の担当です。オーディオ/ビデオのトリムとソース範囲は data-start、data-duration、data-media-start を使用し、クロスフェードは異なるトラック上のクリップを重ね合わせます。このスキルは、配置済みトラックのフェードイン/フェードアウト、クロスフェードエンベロープ、トラックゲイン/トラックボリューム、ボリュームおよびエフェクトオートメーション、ダッキング/ボイスオーバーカーブ、そしてエフェクトチェーンを担当します。/media-use はソーシング、生成、前処理を担当します。
定数 data-playback-rate (0.1..10) は、ピクチャーとピッチ保持サウンドの両方においてレンダリングセーフであり、オーディオ/ビデオ要素が同じタイミング、ソースオフセット、レートを使用する場合に機能します。スピードランプは data-automation 内の rate レーンです(docs/reference/speed-ramps 参照)。これは定数より優先され、プレビューとレンダリングの両方でピッチを保持します。HyperFrames は自動的な波形同期やドリフト補正を提供しません。コピー可能なカット/クロスフェード/リタイムのレシピについては、/hyperframes-core → references/creator-editing-recipes.md を使用してください。
3つの属性がすべてを保持します。これらはオーディオ/ビデオ要素自体に、または最初の2つについては <hf-audio-group> バスに(「複数トラックのための1つのバス」を参照)適用されます。
| 属性 | 保持する内容 |
|---|---|
data-fx-chain | エフェクト(シグナル順) |
data-automation | このトラックのボリュームまたはそのエフェクトパラメータに対するエンベロープ |
data-fx-carve | カーブ独自の設定(再導出可能にするため) |
出荷されているエフェクトファミリーは、ゲイン、EQ(ハイパス、ローパス、ピーキング、シェルフ)、コンプレッサー、リミッター、ゲート、サチュレート、ディレイ、リバーブ、コーラス、フェイザー、ビットクラッシュです。
各エフェクトの正確なJSONと、レーンが満たすべきルール: references/attributes.md
各エフェクトとそのパラメータ、範囲、単位: references/fx-registry.md
聞こえないファイルの問題を特定する方法: references/diagnosis.md
プリセット、名前付きジョブ、ワンノブプロファイル、および症状から修正へのテーブル: references/presets.md — チェーンを手動で構築する前にこれを読んでください。なぜなら、プリセットまたは名前付きジョブのいずれかが通常すでに問題を特定しているからです。
全体の仕組み
2つのオーサリングサーフェスがこれらの属性を書き込み、2つのランタイムが同じビルダーを通じてそれらを読み取ります。この共有された中間部分こそが、プレビューがレンダリングを予測できる理由です。
flowchart TB
voice["ボイストラック<br/>メディアファイル"]
bed["音楽ベッド<br/>メディアファイル"]
subgraph AUTHOR["オーサリング — 属性を書き込む唯一のもの"]
panel["スタジオ<br/>ボイスオーバーカーブコントロール"]
script["scripts/carve.mjs<br/>ペアを検出"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["ベッド要素に書き込まれる"]
carveAttr["data-fx-carve<br/>sources · strength"]
chainAttr["data-fx-chain<br/>peaking xN + gain, tagged fromCarve"]
autoAttr["data-automation<br/>カーブされたパラメータごとに1レーン"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph SHARED["1つの実装、両方で読み取られる"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> preview["プレビュー<br/>ライブ AudioContext<br/>attachElementFxChain"]
sched --> preview
build --> render["レンダリング<br/>ヘッドレスブラウザ内の OfflineAudioContext<br/>applyAudioFxChain"]
sched --> render
preview --> heard["スクラブ中に聞こえるもの"]
render --> wav["処理済み WAV<br/>+ chainTailSeconds によりミックスがテールを通過させる"]
wav --> mix["エンジン · audioMixer<br/>ボリュームレーンはここで PCM に焼き付けられ、グラフ上ではない"]
mix --> out["レンダリングされたミックス"]
edit["再生中の属性編集"] -.->|MutationObserver| preview
カーブ独自の設定は再生時に読み取られることはありません。再生されるのは、それが生成したチェーンとレーンです。data-fx-carve は、既存のカーブの強度を変更できるようにするために存在し、フィルターから逆算して推測する必要はありません。
カーブされたベッド内部では、シグナルは最初にディップを通過し、次にレベルマッチ、次にあなた自身が構築したものを通過します。これが、後から追加したリミッターが依然として最後の天井として機能する理由です。
flowchart LR
src["デコード済みベッド"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["gain<br/>level match"]
g --> hand["あなた自身のエフェクト<br/>例: limiter"]
hand --> dest["track gain, then out"]
l1["lane fx.n1.gain"] -.->|"その帯域における<br/>ボイスのレベル<br/>のエンベロープ"| p1
l4["lane fx.n4.gain"] -.->|"ベッドが全体的に<br/>どれだけダックするか"| g
まず、何が問題かを特定する
以下の表は「音がこもっている」から始まります。これは、誰かがすでに聴いてそう言ったことを前提としています。ファイルを受け取って「これを修正して」と言われた場合、あなたにはそのような文はなく、聴くこともできないため、測定する必要があります。すべてを支配するルールが1つあります。
単一の未知の音声の絶対スペクトルは診断できません。 フォルマントは±10 dB、基本周波数は85–255 Hz、文の終わりに向かって5–6 dB低下します。これらのすべては、単独では欠陥として読み取られ、それらのすべてが話者です。
したがって、比較してください。そして、同じファイル内の何かと比較してください。クリーンなオリジナルがあればそれ、なければポーズ部分です。ギャップで聞こえるものはすべて加算的であり、ギャップのスペクトルは音声ではなくチャンネルです。公開されている平均スペクトルや合成された制御音声と比較しても機能しません。2人の話者はほとんどの欠陥よりも大きく異なり、このガイダンスの背後にある評価では、両方の誤った回答がまさにその比較から生じました。
オリジナルも使用可能な無音もない場合、静的なトーン欠陥は真に未確定です。その旨を述べ、適合する測定値を提供し、1つを選んでチェーンを構築することは避けてください。
コマンド、トラップ、解決済みレシピ: references/diagnosis.md。誰も説明していないファイルを診断する前にこれを読んでください。
症状から始める
帯域と種類がわかったら、オーディオの問題に名前を付けます。ほとんどの悪いオーディオはこれらのうちの1つまたは2つであり、それぞれに出荷済みの回答があります。
| 聞こえ方 | 使用するもの |
|---|---|
| 低いハム音やゴツゴツした音 | rumble-cut、または80 Hzの highpass |
| こもっている、胸に響く | Tame Boominess ジョブ (200 Hz) |
| くぐもっている、段ボールの後ろから | Reduce Mud ジョブ (250 Hz) |
| 言葉が聞き取りにくい | Add Clarity ジョブ (3 kHz)、またはベッドをカーブ |
| 耳障りで疲れる | Soften Harshness ジョブ (3.2 kHz) |
| 単語によって音量が大きく異なる | コンプレッサーで Evenness、または Even Out Levels |
| 文の間の部屋のノイズ | room-gate |
| ボイスと音楽が競合している | Voiceover carve — どちらかにEQをかけるのではありません |
| 「どこにも録音されていない」ようなドライな音 | room-tight または room-natural |
| 単に「アマチュア」な音 | voice-clean(上記のうち4つを順に適用) |
完全なカタログ、各プリセットの内容、帯域の語彙、および意図的に対象外としているもの(デエッシング、ノイズ除去、トーンマッチ): references/presets.md。
追加する前に減算し、フィルター後にレベル調整し、レベル調整後に関係性を構築し関係性の後にキャラクターと天井を最後に設定します。各ステップは、次に来るものが聞くものを変更します。ハイパスの前に設定されたコンプレッサーは、その時間をランブルの追跡に費やします。
名前ではなく問題でエフェクトファミリーを選ぶ
フィルター(highpass、lowpass、peaking、lowshelf、highshelf)は、トラックが占有を許可される周波数を決定します。これは、2つのソースが衝突する場合の最初のツールです。衝突は帯域で発生するからです。ベッドとボイスの両方が1–3 kHzを望み、ベッドからそれを取り除くことは、ミックス全体を下げるよりもベッドへのコストがはるかに低くなります。ボイスへのハイパスはランブルの標準的な修正です。ローパスは意図的に暗くまたはくぐもった音にします。
ダイナミクス(gain、compressor、limiter、gate)は、トラックのレベルが時間とともにどのように振る舞うかを決定します。コンプレッションはラウドとクワイエットの間の距離を狭め、クワイエットな部分を引き上げられるようにします。リミッターは天井です。何かを整形するのではなく、何も通過させないことを保証します。ゲートはしきい値以下のものを削除します。これは、フレーズ間の部屋のノイズを消音する方法です。gain は単純なレベルステージであり、トラックが邪魔にならないように移動する必要がある場合に、オートメーションレーンが乗るものです。
非線形(saturate、bitcrush)は波形の形状を変更し、そこになかった高調波を追加します。補正ではなく、キャラクターやザラツキが必要な場合に使用します。そして、それは生成的であることを覚えておいてください。薄いソースをより密度の高いものにし、クリーンにはしません。
タイムベース(delay、reverb、chorus、phaser)はトラックを空間に配置するか、幅を与えます。これらはミックスを最も簡単に台無しにするものです。テールやデチューンされたコピーが、ボイスが必要とする同じ部屋を占有するからです。他の何かの背後に置かれるべきものに使用し、ウェット量を単独で正しく聞こえる量よりも低く保ちます。
チェーンはシリアルです。各エフェクトは、前のエフェクトが生成したものを処理します。したがって、補正フィルタリングは早い段階で、キャラクターは中間で、リミッターは実際に天井として機能できる最後に配置します。
Voiceover carve
解決する問題。 ボイスの下にある音楽ベッドは、ボイスを聞き取りにくくします。反射的にベッド全体をダックすることがありますが、これは機能し、ベッドの存在感すべてを犠牲にします。音楽はボイスオーバーの間中、力なく聞こえます。しかし、ボイスはスペクトル全体を必要としません。ボイスが実際に占有するいくつかの帯域だけが必要です。カーブはそれらの帯域だけを取り、ベッドは低域と高域を保持するため、ボイスが聞き取りやすい間も、音楽は音楽であり続けます。
それはエフェクトではなく関係性です。 設定はベッド(処理されるトラック)に存在し、サイドチェインコンプレッサーが行うのとまったく同じように、聞くべきボイスを指定します。つまり、小さくなるトラックを選択し、何がそれを小さくするかを選択します。決してボイストラックにカーブを配置しないでください。 それ自体に対してカーブされたボイスは、微妙なミックスの選択ではなく、バグです。
すべてのボイスに対して、1つだけではありません。 sources はリストです。なぜなら、ベッドは通常、一連のシーケンス(ナレーター、インタビューの回答、2人目のプレゼンター)の下で実行されるからです。それらは、何かが測定される前にベッド自身のクロックに合計されます(mixCarveSources)。したがって、1つの分析がそれらのすべてをカバーします。バンドはそこにあるすべてのスピーチから得られ、エンベロープはそのいずれかが発生している場所で上昇します。ベッドが再生されている間に決して再生されないボイスは除外されます。それらはベッドをマスクできません。
複数のクリップIDに対するカーブは間違っています。クリップをグループ化し、グループに対してカーブしてください。 これはヒントではなく、不変条件です。クリップを1つずつ指定することは、徹底的に正しくなければならず、次の編集までしか正しくありません。後で追加された4番目のナレーションクリップは、カーブの認識範囲外で再生され、ベッドは静かにその下でダックしなくなります。代わりにグループを指定すると、分析時にメンバーシップが解決されるため、後でグループに追加されたクリップは sources に触れることなくカバーされます。
<!-- ナレーションをグループ化し、グループに対してベッドをカーブ -->
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
<audio id="vo-outro" data-audio-group="voiceover" …></audio>
<audio id="music" data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.8}' …></audio>
グループの代わりに2つ以上のプレーンなクリップIDを指定する sources リストは、audio_carve_ungrouped_sources リントルールによってキャッチされます。それでも機能しますが、クリップが追加されたときに静かに壊れるバージョンです。
カーブグループはボイスグループにしておいてください。ベッド、SFX、音楽は含めないでください。 sources 内のグループIDは、すべての分析時に現在のメンバーに解決されます。したがって、指定したグループは、それが書かれたときに測定されたトラックではなく、後で取得するグループです。これが問題を引き起こす2つの方法です。
- 独自のソースグループ内のベッド。 ベッドはそれ自体にボイスとして渡され、それ自身のコンテンツに対してカーブされます。これは、再分析のたびに「トラックをそれ自体に対して決してカーブしない」ルールに違反します。
- ボイスグループ内のSFXまたは音楽クリップ。 次の分析でサイドチェインに入り、ベッドはウィッシュ音の下でダックし始めます。属性を書き込んだ実行ではそれを測定したことがないにもかかわらずです。
どちらもカーブが書かれた瞬間には見えません。分析は検出したボイスを合計し、グループ解決を経由してラウンドトリップすることはありません。したがって、最初のパスは真に正しく、次のパスだけが間違っています。したがって、各ロールに独自のグループ(ベッドには music、ナレーションには voiceover、ヒットには sfx)を与え、sources で指定されたグループにはボイスだけが含まれるようにしてください。
carve.mjs はいずれかのケースを見るとグループ形式の書き込みを拒否し、クリップIDを記録し、どのメンバーがブロックしたかをstderrに表示します。audio_carve_ungrouped_sources ルールは、配置されているものを指し示します。
…(以降の内容は翻訳対象外と判断されたため、ここでスキルマークダウンを終了します。)