12 · 사운드 디자인 및 믹스
감독 지시 (1차): "모든 액션에 약간의 효과음을 넣어 주세요." 효과 디자인은 earshot의 문서화된 모션 디자인 관행(github.com/Leonxlnx/earshot, MIT; docs/motion-sfx-techniques.md, docs/SFX.md)을 따릅니다. recipe/tools/sound.py 코드는 자체 작성된 코드이며 샘플을 사용하지 않습니다.
레이어
| 레이어 | 레벨 | 참고 |
|---|---|---|
| 보이스 | −16 LUFS (음성 기준 ≈ −19 dBFS, 400 ms RMS) | 런타임의 93–98% 차지 |
| 배경 음악 | 보이스 아래 18 LU, 덕킹 없음 | C 장조 (C–Am–F–G, 100 BPM): 마림바, 플럭 베이스, 패드, 킥, 셰이커. 재도입부에서는 패드만 남김 (musicDrop: [start, end]) |
| 폴리 | 보이스 아래 약 15 dB (틱 약 21, 새 약 22) | 모든 보이는 액션에 사운드 |
| 액센트 | 보이스 아래 약 9 dB | 스토리 비트에만 사용, 분당 최대 약 20개, 가장 큰 타격 0.35초 전에 7 dB 음악 딥 (stop: true) |
| 마스터 | −14 LUFS 통합, 트루 피크 −1.5 dBTP | 2패스 선형 라우드니스 노멀라이제이션 |
효과 (24개, sound.py)
| 유형 | 계층 | 사용처 | 디자인 |
|---|---|---|---|
whoosh (long: true 큰 움직임에) | 폴리 | 새로운 장소 진입, 큰 카메라 움직임 | 속도를 따라 이동하는 세 개의 대역(1 : 1.6 : 2.5)을 통과하는 핑크 노이즈; 팬 스윕; 피크가 큐에 도달 |
swish | 폴리 | 팔, 책, 제스처, 던지기 | 얇고 밝은 짧은 사운드, 0.2초 |
pop | 폴리 | 타이틀 등장, 물체의 얼굴 교체, 작은 도착 | 키로 상승하는 톤 블립, 틱, 딸림 링 |
tick | 폴리 | 카운터의 모든 단계 | 작고 밝은 노크음에 다양한 핑(라운드 로빈) |
tap | 폴리 | 작은 물체 착지, 카운터 안정화 | 감쇠된 나무 블록 |
flip | 폴리 | 달력 페이지 | 종이 휙 소리와 안정화 |
slap | 폴리 | 공지나 종이 강타 | 광대역 찰싹 소리와 퍼덕임 |
creak (dur) | 폴리 | 문과 경첩 | 나무 공명을 통한 미끄럼-멈춤 펄스 |
click | 폴리 | 스위치, 표지판 켜짐 | 35ms 간격의 누름과 잠금 |
light | 폴리 | 표지판 조명 | 부드러운 허밍과 작은 짤랑 소리 (조성 내) |
chirp | 폴리 | 야외 생물 (드물게) | 두 개의 작은 새 휘파람 |
rattle | 폴리 | 나뭇잎, 떨림 | 떨림 속도로 걸러진 노이즈 버스트 |
slide | 폴리 | 밀기 또는 옆으로 미끄러짐 | 부드러운 삐걱임이 미끄러짐 |
stretch (dur) | 폴리 | 고무, 끈 조임, 표면 휨 | 상승하는 거친 삐걱임 |
whir (dur) | 폴리 | 테이프 끝남, 기계 회전 | 퍼덕임 위의 래칫 클릭 |
chalk (dur) | 폴리 | 칠판 쓰기, 지우기 | 긋기 동작에 의해 잘린 거친 대역 |
roll (dur) | 폴리 | 무언가 굴러감 | 굴림 속도의 낮은 웅웅거림과 표면 틱 |
thunk | 액센트 | 부드러운 물체 착지 (풀 위의 사과) | 둔탁한 낙하체와 저역 통과 과도음 |
thud | 액센트 | 무거운 물체 안정화 | 서브 90 → 42 Hz, 몸체와 과도음 |
slam | 액센트 | 문 닫힘 | 나무 몸체, 크랙, 걸쇠와 석조 아치형 공간 잔향 |
snip | 액센트 | 자르기 | 두 번의 칼날 클릭과 금속성 씽 |
boing | 액센트 | 스프링, 트램펄린 | 떨리는 하강음 |
twang | 액센트 | 팽팽한 줄 뜯기 | 피치 떨림이 있는 하모닉 부분음 |
ding | 액센트 | 숫자 착지, 보상 | 비조화 부분음을 가진 C6 종소리 |
효과를 추가하려면: 단위 피크의 모노 또는 스테레오 배열을 반환하는 fx_<이름>(rng, ...) 함수를 작성하고 (함께 피크를 이루는 레이어, 서로 충돌하지 않도록 대역 제한, 움직이는 물체에 이동 필터, C 장조의 음색 부분, 선행 무음 없음, 끝에 짧은 페이드 아웃), FX, REL 및 ACCENT 또는 폴리 세트에 추가하고, dur를 받으면 SUSTAINED에도 추가하세요.
큐 (film.mjs)
{ t: W(17) - LEAD, type: 'slam', gain: 1, stop: true } // 음악 딥이 있는 액센트
{ t: W(53) - 0.05, type: 'whir', gain: 0.8, dur: 1.4 } // 지속적인 폴리 사운드
...changes(a, b, value, 0.06).map(t => ({ t, type: 'tick', gain: 0.7 })) // 카운터 변경마다 틱
t는 사운드의 어택이 도달하는 시간 (whoosh: 피크가 도달하는 시간); 믹서가 10ms 앞서 리드하며, 화면보다 늦지 않습니다.gain은 해당 유형의 레벨 내에서 조정합니다 (0.5 ≈ −6 dB). 각 큐는 ±1.2 dB의 무작위 변동과 자체 노이즈 시드를 가지므로 반복해도 동일하게 들리지 않습니다.- 스토리보드의 사운드 컬럼에서 샷별로 큐를 작성합니다. 보이는 모든 액션에 하나씩, 모든 액센트는 스토리 비트 위에 배치합니다.
레벨은 측정되며, 추측하지 않습니다
sound.py는 보이스를 −16 LUFS로 레벨링하고, 음성 기준(말하는 동안의 중간 400ms RMS)을 측정하여 각 효과의 가장 큰 400ms가 REL[type] dB만큼 기준에서 떨어지도록 설정합니다. 1차 v3에서 액센트의 중간값은 −9 dB, 폴리는 −15 dB였습니다. 모든 믹스는 다음 명령으로 확인하세요:
python -I recipe/tools/sfx-levels.py <outDir> <outDir>/cue-sheet.txt
출력
stem-voice.wav, stem-music.wav, stem-sfx.wav, mix.wav (마스터링됨), cue-sheet.txt (배치된 모든 효과와 계층 및 레벨), 최종 MP4 (H.264는 무음 렌더에서 복사, AAC 192 kb/s).
라이선스
모든 것은 합성됩니다. 소유자가 음악 트랙을 제공하는 경우 라이선스를 보유해야 하며, 덕킹 없이 −34 LUFS로 배경 음악으로 설정하고 효과는 그대로 유지하세요.