플러그인 설치: 설정 또는 신선도 명령 전에, 이 스킬이 HyperFrames 플러그인 내부에 있을 때 플러그인 실행 규칙을 따르십시오. 독립 실행형 설치는 아래 업데이트 지침을 유지합니다.
HyperFrames Audio
믹스는 프로세서의 스택이 아니라 관계의 집합입니다. 각각 혼자서는 완벽하게 들리는 두 트랙이 함께 있을 때는 듣기 어려울 수 있으며, 해결책은 거의 '하나를 낮추는 것'이 아닙니다. 그것이 무엇을 위해 싸우고 있는지 찾아서 필요한 쪽에 주는 것입니다. 여기의 모든 도구는 그러한 관계 중 하나를 표현하기 위해 존재합니다.
이펙트는 요소의 data-fx-chain에 있으며, 미리보기와 렌더링은 동일한 Web Audio 그래프를 실행합니다. 라이브 컨텍스트의 스튜디오와 브라우저가 이미 구동하는 오프라인 컨텍스트의 엔진입니다. 각 이펙트의 구현은 하나이므로, 스크러빙 중에 듣는 소리가 기록되는 소리입니다. 두 번 조정할 필요가 없습니다.
클립 타이밍은 /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를 사용하십시오.
세 가지 속성이 오디오/비디오 요소 자체에 모든 것을 전달합니다. 처음 두 개는 <hf-audio-group> 버스에 전달될 수도 있습니다("여러 트랙을 위한 하나의 버스" 참조).
| 속성 | 보유 내용 |
|---|---|
data-fx-chain | 신호 순서대로 이펙트 |
data-automation | 이 트랙의 볼륨 또는 이펙트 파라미터에 대한 엔벨로프 |
data-fx-carve | 캐브 자체의 설정. 재파생 가능 |
제공되는 이펙트 패밀리는 게인, EQ(하이패스, 로우패스, 피킹, 쉘프), 컴프레서, 리미터, 게이트, 새추레이트, 딜레이, 리버브, 코러스, 페이저, 비트크러시입니다.
각각의 정확한 JSON과 레인이 충족해야 하는 규칙: references/attributes.md.
파라미터, 범위 및 단위가 포함된 모든 이펙트: references/fx-registry.md.
들을 수 없는 파일의 문제를 해결하는 방법: references/diagnosis.md.
사전 설정, 명명된 작업 및 원노브 프로필, 증상-수정 표: references/presets.md — 체인을 수동으로 구축하기 전에 읽어보십시오. 일반적으로 사전 설정 또는 명명된 작업 중 하나가 이미 문제를 지목합니다.
어떻게 함께 작동하는지
두 개의 저작 표면이 이러한 속성을 쓰고, 두 개의 런타임이 동일한 빌더를 통해 읽습니다. 미리보기가 렌더링을 예측하는 이유는 이 공유된 중간 때문입니다.
flowchart TB
음성["음성 트랙<br/>미디어 파일"]
배경["배경 음악 트랙<br/>미디어 파일"]
subgraph 저작["저작 — 속성을 쓰는 유일한 것"]
패널["스튜디오<br/>보이스오버 캐브 컨트롤"]
스크립트["scripts/carve.mjs<br/>쌍을 감지, 기본적으로 동적"]
분석["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
패널 --> 분석
스크립트 --> 분석
end
음성 --> 분석
배경 --> 분석
subgraph 속성["배경 요소에 기록됨"]
캐브속성["data-fx-carve<br/>source · strength · dynamic"]
체인속성["data-fx-chain<br/>피킹 xN + 게인, fromCarve 태그"]
자동속성["data-automation<br/>캐브된 파라미터당 레인"]
end
분석 --> 캐브속성
분석 --> 체인속성
분석 --> 자동속성
subgraph 공유["하나의 구현, 둘 다 읽음"]
빌드["audioFxGraph.ts · buildFxChain"]
스케줄["audioFxAutomation.ts · scheduleChainAutomation"]
end
체인속성 --> 빌드
자동속성 --> 스케줄
빌드 --> 미리보기["미리보기<br/>라이브 AudioContext<br/>attachElementFxChain"]
스케줄 --> 미리보기
빌드 --> 렌더링["렌더링<br/>헤드리스 브라우저의 OfflineAudioContext<br/>applyAudioFxChain"]
스케줄 --> 렌더링
미리보기 --> 청취["스크러빙 중 듣는 소리"]
렌더링 --> 웨이브["처리된 WAV<br/>+ chainTailSeconds로 믹스가 테일을 통과시킴"]
웨이브 --> 믹스["엔진 · audioMixer<br/>여기서 PCM에 볼륨 레인을 구워 넣음. 그래프가 아님"]
믹스 --> 출력["렌더링된 믹스"]
편집["재생 중 속성 편집"] -.->|MutationObserver| 미리보기
캐브 자체의 설정은 재생 중에 절대 읽히지 않습니다. 그것이 생성한 체인과 레인이 재생됩니다. data-fx-carve는 강도를 추측하여 필터에서 다시 빼는 대신 기존 캐브에서 변경할 수 있도록 존재합니다.
캐브된 배경 내부에서 신호는 먼저 딥을 통과한 다음 레벨 매치, 그 다음 직접 구축한 모든 것을 통과합니다. 이것이 추가한 리미터가 여전히 마지막 천장 역할을 하는 이유입니다:
flowchart LR
소스["디코딩된 배경"] --> p1["피킹<br/>400 Hz"]
p1 --> p2["피킹<br/>1 kHz"]
p2 --> p3["피킹<br/>1.6 kHz"]
p3 --> g["게인<br/>레벨 매치"]
g --> 수동["자체 이펙트<br/>예: 리미터"]
수동 --> 목적지["트랙 게인, 그 다음 출력"]
l1["레인 fx.n1.gain"] -.->|"해당 대역에서<br/>음성 레벨의 엔벨로프"| p1
l4["레인 fx.n4.gain"] -.->|"배경이 전체적으로<br/>더킹되는 정도"| g
정적 캐브는 고정 값과 레인이 전혀 없는 동일한 그래프입니다.
먼저, 무엇이 잘못되었는지 파악하십시오
아래 표는 '웅웅거린다'에서 시작합니다. 이는 이미 누군가가 듣고 말했다고 가정합니다. 파일을 받고 '이걸 고쳐'라는 지시를 받았지만 그러한 문장이 없고 들을 수 없다면 측정해야 합니다. 하나의 규칙이 모든 것을 지배합니다:
알려지지 않은 단일 음성의 절대 스펙트럼은 진단할 수 없습니다. 포먼트는 ±10 dB, 기본 주파수는 85–255 Hz이며, 문장은 끝날수록 5–6 dB 감소합니다. 이 모든 것은 그 자체로 결함으로 읽히며, 모두 화자의 것입니다.
따라서 비교하고, 동일한 파일 내부의 무언가와 비교하십시오: 깨끗한 원본이 존재한다면 그것, 그렇지 않으면 일시 정지 — 간격에서 들리는 것은 무엇이든 추가적이며, 간격의 스펙트럼은 음성이 아닌 채널입니다. 발표된 평균 스펙트럼이나 합성된 제어 음성과 비교하는 것은 작동하지 않습니다: 두 화자는 대부분의 결함보다 더 많이 다르며, 이 지침 뒤의 평가에서 두 가지 잘못된 답변 모두 정확히 그것에서 비롯되었습니다.
원본도 사용 가능한 침묵도 없을 때, 정적인 음색 결함은 진정으로 과소 결정됩니다. 그렇게 말하고 맞는 판독값을 제공하십시오. 하나를 선택하고 그 위에 체인을 구축하는 대신.
명령, 함정 및 작업 레시피: references/diagnosis.md. 아무도 설명하지 않은 파일을 진단하기 전에 읽으십시오.
증상에서 시작하십시오
일단 대역과 종류를 알았으면, 오디오의 문제가 무엇인지 이름을 지정하십시오. 대부분의 나쁜 오디오는 이 중 하나 또는 두 가지이며, 각각에 대해 제공된 답변이 있습니다:
| 다음과 같이 들림 | 다음을 사용 |
|---|---|
| 아래에서 웅웅거리거나 쿵쿵거림 | 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 (위의 네 가지를 순서대로) |
전체 카탈로그, 각 사전 설정의 내용, 대역 어휘, 의도적으로 포함되지 않은 것(디에싱, 노이즈 제거, 톤 매치): references/presets.md.
추가하기 전에 빼고, 필터 후 레벨을 조정하고, 레벨 후 관계를 조정하고, 캐릭터와 천장을 마지막에 조정하십시오. 각 단계는 다음 단계가 듣는 것을 변경합니다. 하이패스 전에 설정된 컴프레서는 럼블을 쫓는 데 시간을 보냅니다.
문제로 패밀리를 찾고 이름으로 찾지 마십시오
필터 (highpass, lowpass, peaking, lowshelf, highshelf)는 트랙이 점유할 수 있는 주파수를 결정합니다. 이것은 두 소스가 충돌할 때 첫 번째 도구입니다. 충돌은 대역에서 발생하기 때문입니다: 배경과 음성 모두 1–3 kHz를 원하며, 배경에서 그것을 제거하는 것은 전체를 낮추는 것보다 믹스에 훨씬 덜 손해를 줍니다. 음성에 하이패스는 럼블에 대한 표준 수정입니다. 로우패스는 의도적으로 어둡게 하거나 먹먹하게 만듭니다.
다이내믹스 (gain, compressor, limiter, gate)는 트랙의 레벨이 시간에 따라 어떻게 행동하는지 결정합니다. 컴프레션은 크고 조용함 사이의 거리를 좁혀 조용한 부분이 올라올 수 있도록 합니다. 리미터는 천장입니다. 아무것도 형태를 만들지 않으며 아무것도 통과하지 못하게 보장합니다. 게이트는 임계값 아래의 것을 제거하며, 이것이 구절 사이의 방음을 무음화하는 방법입니다. gain은 평범한 레벨 단계이며, 트랙이 비켜서야 할 때 자동화 레인이 타는 것입니다.
비선형 (saturate, bitcrush)는 파형의 모양을 변경하여 원래 없었던 고조파를 추가합니다. 트랙이 수정보다는 캐릭터나 거칠기가 필요할 때 사용하십시오. 생성적이라는 것을 기억하십시오: 얇은 소스를 더 조밀하게 만들고 더 깨끗하게 만들지 않습니다.
시간 기반 (delay, reverb, chorus, phaser)는 트랙을 공간에 배치하거나 너비를 제공합니다. 이것들이 믹스를 가장 쉽게 망칠 수 있습니다. 테일 또는 디튠된 복사본이 음성이 필요한 동일한 공간을 차지하기 때문입니다. 다른 것 뒤에 앉아야 하는 것에 사용하고, 고립된 상태에서 옳게 들리는 것보다 습기 양을 낮게 유지하십시오.
체인은 직렬입니다: 각 이펙트는 그 앞의 것이 생성한 것을 처리합니다. 따라서 수정 필터는 일찍, 캐릭터는 중간에, 리미터는 마지막에 배치하여 실제로 천장 역할을 할 수 있도록 하십시오.
보이스오버 캐브
해결하는 문제. 음성 아래의 배경 음악은 음성을 따라가기 어렵게 만듭니다. 반사는 전체 배경을 더킹하는 것입니다. 작동하고 배경의 모든 존재감을 잃게 만듭니다. 음악은 전체 보이스오버 동안 축 늘어집니다. 그러나 음성은 전체 스펙트럼이 필요하지 않습니다. 실제로 점유하는 몇 개의 대역만 필요합니다. 캐브는 그것들만 가져가고 배경은 저역과 고역을 유지하므로 음성이 여전히 명료한 동안 음악은 여전히 음악입니다.
이펙트가 아니라 관계입니다. 설정은 처리되는 트랙인 _배경_에 있으며, 사이드체인 컴프레서가 정확히 하는 것처럼 들을 음성의 이름을 지정합니다: 더 조용해지는 트랙을 선택하고 더 조용하게 만드는 것을 선택합니다. 절대로 음성 트랙에 캐브를 두지 마십시오. 자신에 대해 캐브된 음성은 미묘한 믹스 선택이 아니라 버그입니다.
하나가 아니라 모든 음성. sources는 목록입니다. 배경은 일반적으로 전체 시퀀스(내레이터, 인터뷰 답변, 두 번째 발표자) 아래에서 실행되기 때문입니다. 측정되기 전에 배경 자체의 클록에 합산됩니다(mixCarveSources). 따라서 하나의 분석이 모두를 다룹니다: 대역은 거기에 있는 모든 음성에서 나오며, 엔벨로프는 그 중 어떤 것이든 일어나는 곳에서 상승합니다. 배경이 재생되는 동안 절대 재생되지 않는 음성은 제외됩니다. 배경을 마스킹할 수 없습니다.
둘 이상의 클립 ID에 대한 캐브는 잘못되었습니다. 클립을 그룹화하고 그룹에 대해 캐브하십시오. 이것은 팁이 아니라 불변 속성입니다. 클립을 하나씩 명명하는 것은 철저히 정확해야 하며 다음 편집까지만 정확합니다. 나중에 추가된 네 번째 내레이션 클립은 캐브의 인식 범위 밖에서 재생되며 배경은 조용히 더킹에 실패합니다. 대신 그룹을 명명하면 분석 시점에 멤버십이 해결되므로 나중에 그룹에 추가된 클립은 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>
두 개 이상의 일반 클립 ID 대신 그룹을 명명하는 sources 목록은 audio_carve_ungrouped_sources 린트 규칙에 의해 포착됩니다. 여전히 작동하지만 클립이 추가될 때 조용히 썩는 버전입니다.
캐브 그룹을 음성 그룹으로 유지하십시오: 배경 없음, SFX 없음, 음악 없음. sources의 그룹 ID는 매 분석에서 모든 현재 멤버로 해결됩니다. 따라서 명명한 그룹은 작성되었을 때 측정된 트랙이 아니라 나중에 얻는 그룹입니다. 물리는 두 가지 방법이 있습니다:
- 자체 소스 그룹의 배경. 음성으로 자신에게 전달되어 자체 콘텐츠에 대해 캐브됩니다. "트랙을 자신에 대해 캐브하지 마십시오" 규칙이 재분석 한 번 후에 도착합니다.
- 음성 그룹의 SFX 또는 음악 클립. 다음 분석에서 사이드체인에 들어가고 배경은 후유우 아래에서 더킹되기 시작합니다. 속성을 쓴 실행이 측정한 적이 없음에도 불구하고.
둘 다 캐브가 작성되는 순간에는 보이지 않습니다: 분석은 감지된 음성을 합산하고 그룹 해석을 통해 왕복하지 않으므로 첫 번째 패스는 진정으로 정확하고 다음 패스만 잘못됩니다. 따라서 각 역할에 자체 그룹을 제공하십시오. 배경에는 music, 내레이션에는 voiceover, 히트에는 sfx — 그리고 sources에 명명된 그룹이 음성 외에는 아무것도 보유하지 않도록 유지하십시오.
carve.mjs는 두 경우를 모두 볼 때 그룹 형식을 쓰기를 거부하고 클립 ID를 기록하며 말합니다:
…
[번역을 위해 잘림]