fix: normalize ambience loudness for v0.2.5
This commit is contained in:
+41
-9
@@ -1,4 +1,4 @@
|
||||
# Find-Word v0.2.3 설계
|
||||
# Find-Word v0.2.5 설계
|
||||
|
||||
## 데이터와 출제
|
||||
|
||||
@@ -92,20 +92,52 @@ Promise를 무시한다. 질문과 보기는 재생 완료 후 DOM에 생성되
|
||||
50ms fade로 루프 접합 클릭을 줄인다. 절차적 잡음 합성 코드는 제거했다.
|
||||
|
||||
`src/audio/engine.ts`는 클릭 이벤트에서 AudioContext 생성·resume을 호출한 뒤
|
||||
같은 출처의 WAV를 로드한다. mono PCM을 decode하고 음성과 배경의 전체 버퍼
|
||||
RMS를 0.03으로 정규화한다. `gain = 10^(dB/20)`으로 목표/배경 비율을 지정한다. 정규화한 세 신호의 최대
|
||||
피크 합을 계산해 모든 경로를 공통 감쇠하므로 합계 peak ≤ 0.8이고 SNR이 유지된다.
|
||||
시간별·주파수별 청감이나 물리적 dB SPL을 보장하는 수치는 아니다.
|
||||
같은 출처의 WAV를 로드한다. `integrity.ts`가 JS 번들에 고정한 109개 URL·bytes·SHA-256과 응답을
|
||||
디코드 전에 대조한다. 런타임 manifest fetch나 외부 요청은 없다. mono·길이·유한 sample·non-silence와
|
||||
장치 rate로 리샘플한 PCM의 경로별 peak 상한도 확인한다. 변조/상한 초과는 재시도 가능한 오류이며
|
||||
파일별 자동 감쇠로 덮지 않는다.
|
||||
|
||||
배경은 새 FFmpeg ebur128 실측에서 구한 double precision 스칼라 volume으로 **−32.5 LUFS**에 맞춘 저장 PCM을 그대로 사용한다.
|
||||
최종 ebur128 목표 ±0.2 LU/spread ≤0.4 LU/true peak ≤−6 dBTP를 강제한다. 생성 내부 ceiling은 −6.2 dBTP다.
|
||||
독립 pyloudnorm 0.2.0도 통과했다. 새 market의 VAD ASR 실패는 불변 진단으로 남기고,
|
||||
릴리스 gate는 자동 empty-ASR OR [exact-byte Oz 청취 승인](../.agent/RELEASE-APPROVAL-v0.2.5.json)을 검사한다.
|
||||
현재는 후자만 통과한다. `scripts/release_approval.py`가 전달 ZIP·manifest·8 WAV·notice 바이트와
|
||||
문구/시각/범위를 검증하며 `legalPrivacyClearance=false`를 강제한다.
|
||||
voice와 intro만 기존 RMS **0.03** 정규화를 유지한다. `g(db)=10^(db/20)`은 목표 음성 상대 gain이며
|
||||
배경마다 RMS가 다르므로 표시 SNR은 기준 gain의 dB 변화다. 실제 파일 RMS 비율/순간 청감/dB SPL은 보장하지 않는다.
|
||||
|
||||
고정 상한 `B=0.55`, `V=0.25`, `I=0.20`, `SNR_MAX=12`, 안내 시작 배율 `A=1.8`, 합성 ceiling `C=0.8`을 사용한다.
|
||||
24kHz 실제 최대값은 배경 0.47195435, RMS 정규화 voice 101개 0.20529779, intro 0.14995423이다.
|
||||
새 자산의 실제 Chrome 24/44.1/48/96kHz 전수 디코드 최대값은 배경 0.48797759,
|
||||
voice 0.20585650, intro 0.14999594다.
|
||||
[review-fixes 브라우저 증거](../.agent/evidence-v0.2.5/review-fixes/browser-summary.json)에 전체 측정을 보존했다.
|
||||
여유를 둔 상한은 이 모든 값보다 크며 재생 때도 검사한다. 실제 GainNode의 Float32 plateau는
|
||||
0.4198884665966034로 환경/SNR에 걸쳐 동일하고 JS 예약값과의 차이는 Float32 반올림이다.
|
||||
|
||||
```text
|
||||
Q = B + V × 10^(12/20) + I × A = 1.905267926383743
|
||||
G = min(1, C/Q) = 0.4198884518664126
|
||||
backgroundGain = G
|
||||
voiceGain(db) = G × 10^(db/20)
|
||||
introGain = G × 1.8 (기존 ramp로 1/15까지 감소)
|
||||
|mix(t)| ≤ master × G × (B + V × 10^(db/20) + I × A) ≤ 0.8
|
||||
```
|
||||
|
||||
삼각부등식이 모든 위상·loop offset·세 경로가 동시에 겹치는 경우까지 덮는다. master 범위는 [0,1],
|
||||
배경 fade는 [0,G], intro ramp도 [0,G×1.8] 이내이므로 상한을 키우지 않는다. intro가 없어도 같은 G를 사용한다.
|
||||
환경·실제 sample peak·현재 SNR을 G 계산에 넣지 않는다. SNR은 voice만 바꾸고 master는 모든 경로를 함께 바꾼다.
|
||||
`mixing-loudness.test.ts`는 101×8×25=20,200개 조합에서 유한 gain·비율·peak 상계를 검사한다.
|
||||
이는 디지털 샘플 안전성이다. DAC의 재구성 필터·기기 음압·임상 청감의 보장은 아니다.
|
||||
|
||||
`src/audio/assets.ts`는 음성 자산 버전과 URL 생성을 한 곳에서 관리한다.
|
||||
intro·목표 100개·현장음 8개 모두 `?v=0.2.3`을 붙여 동일 파일명에 남은 이전 캐시를
|
||||
intro·목표 100개·현장음 8개 모두 `?v=0.2.5`을 붙여 동일 파일명에 남은 이전 캐시를
|
||||
피한다. 파일을 다시 생성하면 제품 버전 유지 여부와 관계없이 자산 버전을
|
||||
갱신한다. 버전 확인을 위한 외부 요청이나 런타임 manifest 요청은 없다.
|
||||
|
||||
```text
|
||||
배경 BufferSource → 배경 Gain (공통 감쇠, 시작/끝 fade) ─┐
|
||||
목표 BufferSource → 음성 Gain (공통 감쇠 × 10^(dB/20)) ─────┼→ master Gain → destination
|
||||
안내 BufferSource → 안내 Gain (공통 감쇠 × 1.8 → 0.12) ─────┘
|
||||
배경 BufferSource → 배경 Gain (고정 G, 시작/끝 fade) ─┐
|
||||
목표 BufferSource → 음성 Gain (고정 G × 10^(dB/20)) ─────┼→ master Gain → destination
|
||||
안내 BufferSource → 안내 Gain (고정 G × 1.8 → 0.12) ─────┘
|
||||
```
|
||||
|
||||
배경 소스는 `loop=true`이며 목표 ended에서 즉시 stop/disconnect한다.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Find-Word v0.2.3 오디오 출처와 재현
|
||||
# Find-Word v0.2.5 오디오 출처와 재현
|
||||
|
||||
## 포함 자산과 생성 설정
|
||||
|
||||
@@ -70,7 +70,8 @@ MP3를 24kHz mono signed 16-bit little-endian PCM으로 디코드한다. 파일
|
||||
생성기와 독립 자산 테스트는 101개 파일의 원문·집합·SHA-256·bytes·duration,
|
||||
24kHz mono PCM16, 1–20초 길이, RMS > 100/32768, full-scale 미도달,
|
||||
총 48MiB 미만을 검사한다. 기존 음성 단독 검사는 RMS 0.03과 +6dB에서 peak < 0.8을
|
||||
요구한다. 0.2.3의 사용자 최대 +12dB 혼합은 세 경로 공통 감쇠로 별도 검증한다. 앱은 Web Audio에서 배경·음성을 RMS 정규화한 뒤 상대 SNR을 적용한다.
|
||||
요구한다. v0.2.5 최대 +12dB 혼합은 [고정 headroom 수식](ARCHITECTURE.md#오디오)으로 별도 검증한다.
|
||||
앱은 voice/intro의 RMS 정규화를 유지하고 배경 loudness 정규화 PCM을 그대로 쓴다.
|
||||
물리적 음압이나 주파수별 청감을 보정한 값은 아니다.
|
||||
|
||||
## 도구 라이선스와 서비스 조건
|
||||
@@ -102,12 +103,99 @@ MP3를 24kHz mono signed 16-bit little-endian PCM으로 디코드한다. 파일
|
||||
대표 샘플과 게임 내 소음 혼합 상태를 직접 들어 인수 판단한다. 배경은 실제 현장 녹음의 짧은 구간이다. 이 게임의 수치는 임상 검증·치료·청력 판정용이 아니다.
|
||||
|
||||
|
||||
## v0.2.3 현장 녹음 파생본
|
||||
## v0.2.5 loudness 정규화
|
||||
|
||||
**exact 자산 소유자 승인:** loudness 수정은 두 계기를 통과했다. 새 market WAV의 동일 VAD ASR 조건은
|
||||
여전히 실패하며, 릴리스는 아래 Oz의 새 exact-byte 청취 승인 경로로만 수용한다. 법적/privacy clearance는 없다.
|
||||
기존 loudnorm input_i의 0.01 LU spread는 같은 파일의 전용 ebur128 **2.0 LU**, 독립 pyloudnorm 0.2.0
|
||||
**1.925 LU** 결과에 의해 거부되었다. loudnorm input_i를 수용 계기로 인정하지 않는다.
|
||||
[거부된 당시 RESULT](../.agent/evidence-v0.2.5/review-fixes/rejected-RESULT-v0.2.5.md),
|
||||
[기존 원문 측정](../.agent/evidence-v0.2.5/independent-loudness.json)과 기존 증거 전체는 불변 역사다.
|
||||
|
||||
원본 8개 SHA-256/bytes·creator·license·attribution·선택 구간을 모두 보존했다.
|
||||
[정규화 계획](../.agent/AMBIENCE-NORMALIZATION-v0.2.5.json)은 불변 source plan의 SHA-256을 포함한다.
|
||||
도구는 **ffmpeg version 6.1.1-3ubuntu5**이며 일반 회귀 검사는 Python 표준 라이브러리와 FFmpeg만 사용한다.
|
||||
|
||||
1. 원본 전체의 hash/bytes를 검증한 뒤 기존 seek/full decode sample trim으로 승인 구간을 추출한다.
|
||||
2. 24kHz mono float PCM 288,000 samples에 기존 양끝 50ms 선형 fade를 적용한다.
|
||||
3. 정확한 faded PCM을 새 `ebur128=peak=true` 프로세스로 측정하고 **gain_db=−32.5−measured_i**를 계산한다.
|
||||
4. **measured_true_peak+gain_db > −6.2 dBTP**면 변환 전에 실패한다. market의 파형을 보존할 수 있도록
|
||||
공통 목표를 −32.5 LUFS로 선택했다. −6.2 내부 ceiling은 최종 −6 dBTP 조건에 0.2 dB 여유를 둔다.
|
||||
5. 같은 PCM에 오직 `volume=<gain_db>dB:precision=double`을 적용하고 FFmpeg `pcm_s16le`로 인코딩한다.
|
||||
표준 `wave` writer는 44-byte WAV 헤더를 쓴다. compressor/limiter/loudnorm은 사용하지 않는다.
|
||||
6. staged WAV 전체를 새 ebur128 프로세스로 측정한다. 목표 오차가 ±0.2 LU 밖일 때만 원래 faded PCM에서
|
||||
스칼라를 보정한다. 최대 총 3회, 매 시도 peak 사전 검사를 수행하고 비수렴은 실패한다.
|
||||
7. 전체 staging의 형식/길이/fade/출처/notice/hash를 검증하고 ebur128을 다시 실행한다.
|
||||
**목표 ±0.2 LU, spread ≤0.4 LU, true peak ≤−6 dBTP**를 강제한다. 생성 중에는 −6.2도 강제한다.
|
||||
전부 통과한 8 WAV·manifest·고지를 단일 `renameat2(RENAME_EXCHANGE)`로 교환한다.
|
||||
source mismatch·NaN·측정/쓰기/교환 실패·목표/peak 위반은 이전 공개 디렉터리를 보존한다.
|
||||
|
||||
manifest `normalization`에는 목표/허용오차/spread/두 ceiling/계기/최대 반복 수가 있고,
|
||||
`toolVersions.ffmpeg`에는 실제 도구 버전이 있다. 각 `conversion.loudness`는 faded PCM hash,
|
||||
입력 ebur128 통계, 매 iteration의 정확한 gain/filter/예측 peak/출력 통계와 최종 통계를 보존한다.
|
||||
이번 8개는 모두 **첫 시도에 수렴**하여 보정 반복이 필요하지 않았다.
|
||||
|
||||
| 환경 | 원본 구간(초) | 입력 LUFS | gain dB | 최종 LUFS | true peak dBTP | sample peak |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| street | 35–47 | -35.7 | 3.2 | -32.5 | -10.2 | 0.31008911 |
|
||||
| mall | 36–48 | -22.1 | -10.4 | -32.5 | -12.2 | 0.23022461 |
|
||||
| theater | 45–57 | -25.7 | -6.8 | -32.5 | -16.1 | 0.15737915 |
|
||||
| department | 90–102 | -24.1 | -8.4 | -32.5 | -16.6 | 0.14721680 |
|
||||
| market | 24–36 | -26.4 | -6.1 | -32.5 | -6.2 | 0.47195435 |
|
||||
| subway | 65–77 | -16.5 | -16.0 | -32.5 | -16.2 | 0.15432739 |
|
||||
| cafe | 0–12 | -19.5 | -13.0 | -32.5 | -18.2 | 0.12213135 |
|
||||
| rain | 180–192 | -52.2 | 19.7 | -32.5 | -12.1 | 0.24734497 |
|
||||
|
||||
최종 전용 ebur128: **−32.5 LUFS 전수, spread 0.0 LU**, 최대 true peak **−6.2 dBTP**.
|
||||
생성기를 import하지 않는 [독립 회귀 테스트](../tests/python/test_loudness_audio.py)가 이 동등성을 강제한다.
|
||||
별도 disposable **pyloudnorm 0.2.0 / soundfile 0.13.1**의 exact-WAV 측정은
|
||||
**−32.6062~−32.5291 LUFS, spread 0.0772 LU**, 최대 목표 오차 **0.1063 LU 미만**으로 통과했다.
|
||||
[결과/스크립트/고정 의존성과 해시](../.agent/evidence-v0.2.5/review-fixes/README.md)를 별도로 보존한다.
|
||||
일반 npm test는 이 패키지 설치나 네트워크가 필요 없다. 같은 FFmpeg/입력/플랫폼에서 두 번 다시 생성한
|
||||
WAV/notice/측정 통계의 재현성도 검사했다. manifest의 생성 시각만 달라진다.
|
||||
|
||||
```bash
|
||||
python3 scripts/ambience_audio.py
|
||||
python3 -m unittest discover -s tests/python -v
|
||||
```
|
||||
|
||||
[새 exact-WAV ASR 결과](../.agent/evidence-v0.2.5/review-fixes/final-asr.json)는 동일한
|
||||
faster-whisper **1.2.1**, tiny revision `d90ca5fe260221311c53c58e660288d3deb8d356`, CPU int8,
|
||||
beam_size=5, best_of=5, 기본 Silero VAD, condition_on_previous_text=true를 사용했다.
|
||||
**market 1 segment, mall/cafe 0개, requiredEmptyPassed=false**다. market hash는
|
||||
`7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632`이다.
|
||||
반환 구간 10.45–12.45초와 텍스트 ` Let's go, let's go, let's go.`를 수정 없이 보존했다.
|
||||
텍스트는 검증된 전사가 아니며 환각일 수 있다. ASR 원문 SHA-256
|
||||
`98acdb16bc5dce57bb3609b705b63125e5511c2d5f7b26bdde54f4b7bd9a5e49`와 모든 설정/segment를 보존한다.
|
||||
ASR 보고서 자체의 **humanListeningAcceptance=false, legalPrivacyClearance=false**도 변경하지 않는다.
|
||||
|
||||
제품 소유자 Oz는 `/home/hermes/voice-memos/find-word-v0.2.5-normalized-ambience-review.zip`의
|
||||
현재 8 WAV·manifest·notice를 받은 뒤 **“승인합니다. 이대로 진행하세요”**라고
|
||||
**2026-10-14T11:29:51Z / 2026-10-14 20:29:51 KST**에 회신했다. 사용자가 전달한 이 새 회신은
|
||||
별도 [RELEASE-APPROVAL](../.agent/RELEASE-APPROVAL-v0.2.5.json)에 기록한다.
|
||||
ZIP SHA-256은 `bb2e974b652df43db4a1f2a59716836e2c521839c724b34d4b71c1b40c3322e5`,
|
||||
현재 manifest SHA-256은 `6433bf23af35f24031c6bbe784dd0abf9330f276da6b8705e47c7a1144a285b7`이며
|
||||
모든 WAV/notice 해시도 기록했다. 이 별도 인수 기록은 **productOwnerReleaseApproval=true,
|
||||
humanListeningAcceptance=true, legalPrivacyClearance=false**다. 법적/privacy clearance나 ASR의 PASS를 주장하지 않는다.
|
||||
|
||||
`python3 scripts/release_approval.py`는 동일 설정의 자동 empty-ASR 조건 **OR** 유효한 exact-byte 소유자
|
||||
청취 승인을 요구한다. 현재 통과 사유는 후자뿐이다. 승인 문구/범위/시각/소유자/flags와 고정 ZIP hash를
|
||||
검사하고 ZIP의 manifest·notice·8 WAV를 현재 파일과 바이트 단위로 비교한다. 다른 자산/manifest/ZIP,
|
||||
필수 정보 누락, 법적 clearance 과장은 거부한다. 원래 실패 테스트·실패 로그는
|
||||
[release-approval 증거](../.agent/evidence-v0.2.5/release-approval/README.md)에 보존하며
|
||||
현재 회귀 테스트는 원문 실패의 불변성과 별도 승인 계약을 각각 검사한다. 이전 v0.2.3 승인의 범위는 그대로다.
|
||||
|
||||
## v0.2.3 현장 녹음 파생본 — 역사 기록
|
||||
|
||||
아래 절의 “현재/최종”은 v0.2.3 당시 상태를 뜻한다. 당시 exact manifest/WAV는
|
||||
[v0.2.3 snapshot](../.agent/evidence-v0.2.5/baseline/ambience/)에 보존했고 원본 evidence는 수정하지 않았다.
|
||||
|
||||
|
||||
|
||||
원본 선정 계약은 [.agent/AMBIENCE-SOURCES-v0.2.3.json](../.agent/AMBIENCE-SOURCES-v0.2.3.json),
|
||||
배포 바이트의 출처·직접 URL·저작자·라이선스·변환·SHA-256·bytes·duration·RMS·peak는
|
||||
[manifest](../public/ambience/manifest.json), 정확한 attribution과 변경 고지는
|
||||
[AMBIENCE_NOTICES](../public/ambience/AMBIENCE_NOTICES.md)에 있다. 이 고지는 dist에도 포함되고 UI에서 링크한다.
|
||||
[manifest](../.agent/evidence-v0.2.5/baseline/ambience/manifest.json), 정확한 attribution과 변경 고지는
|
||||
[AMBIENCE_NOTICES](../.agent/evidence-v0.2.5/baseline/ambience/AMBIENCE_NOTICES.md)에 있다. 이 고지는 dist에도 포함되고 UI에서 링크한다.
|
||||
여덟 원본 모두 서로 다른 현장 녹음이며 NC/ND 자산을 사용하지 않는다. 원본은 저장소/빌드에 포함하지 않는다.
|
||||
|
||||
| 환경 | 저작자 | 라이선스 | 원본 구간(초) |
|
||||
|
||||
+29
-7
@@ -1,4 +1,4 @@
|
||||
# Find-Word v0.2.3 정적 배포 인계
|
||||
# Find-Word v0.2.5 정적 배포 인계
|
||||
|
||||
이 문서는 **Neo가 검토 후 수행할 절차**다. Codex는 서버, DNS, 인증정보에
|
||||
접근하지 않았고 배포·서비스 생성·Git commit/push도 하지 않았다.
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
Node.js 최소 **22.22.2** (`>=22.22.2`)의 지원 LTS 환경에서 `npm ci`, `npm run lint`, `npm test`,
|
||||
`npm run build`를 실행한다. `dist/` 전체를 하나의 릴리스로 전달한다.
|
||||
`dist/audio/`의 24kHz neural WAV 101개와 version 0.2.3 manifest가 반드시 포함되어야 한다.
|
||||
`dist/audio/`의 24kHz neural WAV 101개와 version 0.2.5 manifest가 반드시 포함되어야 한다.
|
||||
`dist/ambience/`의 고유 현장 WAV 8개·manifest와 `dist/ambience/AMBIENCE_NOTICES.md`도 필수다.
|
||||
런타임은 Nginx 정적 파일만 필요하며 Node 서버·TTS 엔진·DB·환경변수·API 키는 필요 없다.
|
||||
잠긴 jsdom 계열 의존성 때문에 24.x는 24.15.0 이상, 26.x는 26.0.0 이상이어야 한다.
|
||||
@@ -74,7 +74,7 @@ server {
|
||||
|
||||
1. 서버에 적용하기 전 `nginx -t`, 기존 서비스 충돌, 파일 읽기 권한을 확인한다.
|
||||
2. TLS/HTTPS와 DNS를 운영자가 확인한다. 실제 도메인에서 시작 후 음성이 들리는지 확인한다.
|
||||
3. `audio/intro.wav?v=0.2.3`와 목표 WAV의 같은 버전 query가 정상 응답하고
|
||||
3. `audio/intro.wav?v=0.2.5`와 목표 WAV의 같은 버전 query가 정상 응답하고
|
||||
존재하지 않는 오디오는 query가 있어도 404인지 확인한다.
|
||||
4. 모바일 Safari/Chrome, 데스크톱에서 음량·중단·다시 듣기·3문항 완주·다음 난이도·시작 단계·SNR 변경·중도 종료를 직접 확인한다.
|
||||
5. 원자적으로 릴리스 디렉터리를 전환하고 이전 디렉터리를 보관해 되돌릴 수 있게 한다.
|
||||
@@ -86,15 +86,15 @@ server {
|
||||
이 query는 로컬 정적 파일 요청에만 사용하며 런타임 외부 요청을 추가하지 않는다.
|
||||
|
||||
|
||||
## 0.2.3 독립 인수와 릴리스 (Neo 수행, 이 작업에서는 미실행)
|
||||
## 0.2.5 독립 인수와 릴리스 (Neo 수행, 이 작업에서는 미실행)
|
||||
|
||||
1. `.agent/RESULT-v0.2.3.md`와 RED/GREEN 원문, 원본/배포 해시, 라이선스 고지를 검토한다.
|
||||
1. `.agent/RESULT-v0.2.5.md`와 RED/GREEN 원문, 원본/배포 해시, 라이선스 고지를 검토한다.
|
||||
2. sandboxed system Chrome desktop/mobile suite와 `npm audit`를 다시 실행한다.
|
||||
3. 검토 완료 후 feature branch push, main fast-forward, annotated `v0.2.3` tag,
|
||||
3. 검토 완료 후 feature branch push, main fast-forward, annotated `v0.2.5` tag,
|
||||
fresh-clone readback으로 commit과 자산 해시를 확인한다.
|
||||
4. commit-addressed release 디렉터리로 dist를 복사하고 current 심볼릭 링크를 원자 전환한다.
|
||||
이전 release는 rollback 대상으로 보존한다.
|
||||
5. 공개 HTTPS에서 title/UI 0.2.3, WAV MIME·SHA-256·cache-busting query, 누락 자산 404,
|
||||
5. 공개 HTTPS에서 title/UI 0.2.5, WAV MIME·SHA-256·cache-busting query, 누락 자산 404,
|
||||
시작 단계·3문항 완료→다음 단계·SNR·중도 종료를 실제 Chrome으로 재검증한다.
|
||||
|
||||
이 문서의 Nginx 설정은 인계 예시이며 실행 증거가 아니다. 이번 작업은 localhost의
|
||||
@@ -107,3 +107,25 @@ manifest와 디렉터리를 함께 축약하거나 추가 WAV를 넣어도 실
|
||||
각 notice 항목의 저작자·primary URL·direct URL·라이선스 링크·outputLicense·변경 고지까지 검사한다.
|
||||
현장음 notice의 배포 URL은 `/ambience/AMBIENCE_NOTICES.md`다. 고지는 음원/manifest와 함께
|
||||
원자 교체하는 같은 디렉터리 안에 있으며, 기존 루트의 notice 사본은 제거했다.
|
||||
|
||||
|
||||
## v0.2.5 음원 인수 추가 항목
|
||||
|
||||
**현재 exact 자산은 Oz의 새 소유자 청취 승인으로 릴리스 gate를 통과한다.** 새 market WAV의 동일
|
||||
faster-whisper/VAD 검사는 1개 segment, `requiredEmptyPassed=false`인 상태 그대로다.
|
||||
`python3 scripts/release_approval.py`는 자동 empty-ASR OR 유효한 exact-byte 소유자 승인을 검사하며,
|
||||
현재 통과 경로는 [승인 기록](../.agent/RELEASE-APPROVAL-v0.2.5.json)뿐이다. manifest/WAV/notice 또는
|
||||
검수 ZIP 바이트가 달라지면 이 승인은 유효하지 않다. 법적/privacy clearance는 false다.
|
||||
[RESULT](../.agent/RESULT-v0.2.5.md)와 [실패 원문](../.agent/evidence-v0.2.5/review-fixes/final-asr.json)을 확인한다.
|
||||
|
||||
- 수용 계기는 전용 `ebur128=peak=true`이며 loudnorm input_i의 이전 0.01 LU 주장은 거부한 역사 기록이다.
|
||||
- 원본/구간/라이선스와 101 voice bytes는 불변이다. 새 8 WAV의 목표는 **−32.5 LUFS ±0.2**, spread≤0.4 LU,
|
||||
true peak≤−6 dBTP다. 12초/24kHz/mono/PCM16/50ms fade를 유지한다. 생성기 내부 ceiling은 −6.2 dBTP다.
|
||||
- loudness 수치는 ebur128 0.0 LU spread, 독립 pyloudnorm 0.2.0 0.0772 LU spread로 통과했다.
|
||||
버전·입력 통계·정확한 gain/filter·iterations·최종 ebur128 통계와 독립 측정 hash를 보존한다.
|
||||
- 향후 별도로 배포할 때 공개 HTTPS의 109 WAV hash/bytes/MIME와 `?v=0.2.5`를 검사하고,
|
||||
다운로드한 최종 WAV를 새 ebur128 프로세스로 재측정해야 한다.
|
||||
- 실제 Chrome의 master=1, SNR −12/0/+12, 8환경 배경 GainNode는 고정 0.41988845여야 한다.
|
||||
voice만 SNR에 반응하며 3문항·다음 단계·재청취·중도 종료를 유지한다.
|
||||
- 새 WAV의 Oz 청취 인수 시각은 2026-10-14T11:29:51Z다. 이 인수는 법적/privacy clearance를 제공하지 않는다.
|
||||
- 이번 작업에서 commit/push/merge/tag/deploy는 실행하지 않았다. production 검증도 미실행이다.
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
# Find-Word v0.2.3 단어와 오답 변형
|
||||
# Find-Word v0.2.5 단어와 오답 변형
|
||||
|
||||
임의의 한글 조합을 자동 생성하지 않고 사전에 있는 표제어만 고른다. 다음의
|
||||
짧은 의미 구분은 앱 작성자가 작성한 설명이며 사전의 정의·예문·음성을
|
||||
@@ -39,4 +39,4 @@
|
||||
출제 메타데이터이며 청감·발음·청력에 대한 실측 난이도나 임상 척도가 아니다.
|
||||
새 단어를 넣을 때는 표제어·의미·변형 규칙을 검토하고 이 목록을 갱신한다.
|
||||
|
||||
0.2.3은 기존 10가지 mechanic·100문장을 보존하며 한 라운드에서 서로 다른 세 문항을 고른다.
|
||||
0.2.5는 기존 10가지 mechanic·100문장을 보존하며 한 라운드에서 서로 다른 세 문항을 고른다.
|
||||
|
||||
Reference in New Issue
Block a user