@ihabdevteam/core 0.124.0 → 0.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,57 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.126.0
11
+
12
+ ### 고침 — 볼륨을 GainNode 로 건다: iOS 실기기에서 전체 소리·소음 비율이 안 먹었다 (`audioMeter` · 훈련 플레이어 · 소음)
13
+
14
+ Apple 문서상 실제 iPhone·iPad 에서는 `HTMLMediaElement.volume` 을 스크립트로 바꿔도 소리에 안 먹는다(늘 1).
15
+ 코어는 문제 소리 램프·소음 페이드를 모두 요소 volume 으로 조절했으므로 iOS 에서는 전체 소리·소음 비율이
16
+ 둘 다 안 먹고, 2배 소음 파일(`noiseFileGain: 2`)이면 소음이 늘 2배로 들릴 수 있었다(말귀 사용자 결정).
17
+
18
+ - 미터가 이미 태우던 그래프에 GainNode 를 끼웠다: `source → gain → (analyser, destination)`. 태운 요소는
19
+ volume 을 1 로 두고 **gain** 으로 크기를 건다(문제 소리 = `effectiveSpeechVolume`, 소음 = `noiseElementVolume`).
20
+ 미터는 gain 뒤라 들리는 크기를 읽는다.
21
+ - **새 내보내기**(`@ihabdevteam/core/utils`): `setElementVolume(el, v)` — 태운 요소면 gain(`setTargetAtTime`,
22
+ 시정수 10ms)에, 아니면 요소 volume 에 걸고 `'gain' | 'element'` 를 준다. `getElementVolume(el)` — 건 값.
23
+ `routeElementAudio(el)` — 태우고 analyser 를 주는 Promise.
24
+ - 램프는 전과 같은 150ms(문장)·250ms(소음 페이드) RAF 램프가 매 프레임 `setElementVolume` 을 부르고,
25
+ 문장은 200ms 끝값 타이머도 그대로다.
26
+ - **순서**: 달리는(running) 컨텍스트에만 태운다. suspended 면 resume 을 기다린 뒤 태우고, 그 전에는 요소가
27
+ 제 볼륨으로 직접 운다 — 태운 순간부터 요소 소리는 destination 으로만 나가므로 suspended 에 태우면 무음이다.
28
+ resume 이 안 되면(제스처 없음) 태우지 않는다. 컨텍스트를 만들 때 `pointerdown`·`touchend`·`keydown`
29
+ (capture·passive)에 멈춘 컨텍스트를 깨우는 듣개를 한 번 단다.
30
+ - **폴백**: AudioContext 없음·`createMediaElementSource` 실패는 요소 volume 에 건다(전과 같다).
31
+ - **CORS**: 문장 `<audio>`·소음 요소는 둘 다 이미 `crossOrigin="anonymous"` 다(그래프 출력이 무음이 되지 않게).
32
+ - **바뀐 동작** `getElementAnalyser(el)`: 컨텍스트가 suspended 면 이제 **바로 태우지 않고 null** 을 주며
33
+ resume 뒤 태우기를 걸어 둔다. `AudioMeter` 는 그 경우 `routeElementAudio` 를 기다려 다시 돈다.
34
+
35
+ ## 0.125.0
36
+
37
+ ### 고침 — 소음 비율 1~2배를 올려도 소음이 커지지 않았다: 키운 소음 파일로 푼다 (`NoisePlayerContext` · `configureStorage`)
38
+
39
+ 0.123.0 셈(문제 소리 = M×min(1,1/R), 소음 = M×min(1,R))은 비율을 1 넘게 올리면 소음은 1 에 머물고
40
+ 문제 소리만 줄었다(말귀 사용자 "소음 크기가 커지지 않는다"). `<audio>` 볼륨은 1 을 넘을 수 없으므로
41
+ **원본보다 큰 소음 파일**을 쓰고, 파일이 몇 배 큰지를 코어에 알린다.
42
+
43
+ ```
44
+ 문제 소리 = M (비율과 상관없이 줄이지 않는다)
45
+ 소음 들리는 크기 = M × R (0~2) 원본 소음 파일 기준
46
+ 소음 <audio> 볼륨 = min(1, M × R ÷ gain) gain = noiseFileGain
47
+ ```
48
+
49
+ - **새 설정** `configureStorage({ noiseFileGain })`(`CoreScope` 의 `storage.noiseFileGain` 도) — `noiseBaseUrl`
50
+ 의 파일이 원본보다 몇 배 큰지(진폭), 기본 1. 없거나 0·음수·NaN 이면 1. `getNoiseFileGain()` 내보냄.
51
+ 말귀는 2배로 키운 파일 경로와 `noiseFileGain: 2` 를 함께 준다. 기본 1 인 앱은 1배 넘는 소음만 1 에서
52
+ 멈춘다.
53
+ - `effectiveSpeechVolume(settings)` = mainVolume. `effectiveNoiseVolume(settings)` = mainVolume × R —
54
+ **들리는 크기, 0~2**(1 을 넘을 수 있다 — 결과 기록·파형용). **새로** `noiseElementVolume(settings, gain?)` =
55
+ min(1, effectiveNoiseVolume ÷ gain) — 소음 페이드·TTS 동기 재생이 이것을 `<audio>` 에 건다.
56
+ - `mergeNoiseSettings` 옛 값 옮김은 R = (level/9)÷mainVolume 만 — 0.123.0 의 "R>1 이면 mainVolume =
57
+ level/9" 를 걷었다(옛 뜻도 문제 소리 = mainVolume 이라 옛 소리 그대로다).
58
+ - 소음을 끈 판에서 문제 소리를 양보하지 않던 0.123.0 규칙은 문제 소리가 늘 M 이라 필요 없어 걷었다.
59
+ - 파형(0.124.0 구간별 눈금)·설정 창은 그대로.
60
+
10
61
  ## 0.124.0
11
62
 
12
63
  ### 바뀜 — 파형 세로 눈금: 소음 비율이 1 을 넘으면 칸을 넓혀 2배까지 보인다 (`TrainingStepAudioPlayer` 파형)