@ihabdevteam/core 0.281.0 → 0.284.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 +125 -0
- package/dist/components.cjs.js +171 -171
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +176 -176
- package/dist/ihabdevteam-core.d.ts +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +69 -47
- package/dist/packages/core/src/components/Training/usePlaybackSequencer.d.ts +73 -0
- package/dist/packages/core/src/components/Training/usePlaybackSequencer.js +60 -0
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,131 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.284.0
|
|
11
|
+
|
|
12
|
+
### 남이 스피커를 가져가도 **뜸은 제 것인 줄 알고 소리를 냈다** — 여섯 번째 같은 꼴 ((85) 2b)
|
|
13
|
+
|
|
14
|
+
스피커는 하나라, 다른 소리가 울리면 자물쇠(`currentSound`)가 이 재생기를 멈춘다. 그 멈춤이
|
|
15
|
+
`!a.paused` 만 봤다 — **뜸 중에는 요소가 멈춰 있으니 그 문을 안 지난다.** 그래서 남이 소리를
|
|
16
|
+
가져가도 **뜸은 그대로 돌아 뜸이 끝나면 소리를 냈다.** 화면에 재생기가 둘인 자리(문장 듣기 +
|
|
17
|
+
문제 듣기)와 낱말 카드가 그 길이다 — 치료사가 08-26 에 *"1번·2번이 함께 울린다"* 고 보고한
|
|
18
|
+
그 자리의 **뜸 판**이다.
|
|
19
|
+
|
|
20
|
+
**게다가 앞뜸 동안에는 아예 주인이 없었다.** 스피커를 `await a.play()` 바로 앞에서 잡았는데,
|
|
21
|
+
그 자리는 **앞뜸을 다 기다린 뒤**다. 뜸이 시작될 때 잡도록 옮겼다 — 소음이 이미 뜸부터
|
|
22
|
+
깔리니(0.268.0) **소리를 내고 있는 것이 맞다.**
|
|
23
|
+
|
|
24
|
+
> 오늘 같은 꼴을 **여섯 번** 만났다: 소음 감시(0.268.0) · 재생판(0.278.0) · 토글(0.278.0) ·
|
|
25
|
+
> 그 토글의 두 번째 벌(0.281.0) · 번호 단추(0.282.0) · 여기. 전부 **"지금 도는가" 를 메인
|
|
26
|
+
> 요소에게 물어서** 틀렸다. 이제 `isRunning()` 하나로 묻는다.
|
|
27
|
+
|
|
28
|
+
### 그만두는 뜻이 **두 벌**이었다 — 하나로 ((85) 2b)
|
|
29
|
+
|
|
30
|
+
`재생의도Ref`(`play()` 를 기다리는 사이의 멈춤을 가린다)와 진행기의 **세대**(뜸을 기다리는
|
|
31
|
+
사이의 멈춤을 가린다)가 같은 일을 두 벌로 했다. 올리는 자리가 넷인데 **그중 둘만** 세대를
|
|
32
|
+
올렸다 — 소리 자물쇠와 완료 쪽이 안 올리는 쪽이라, 위 결함이 바로 거기서 났다.
|
|
33
|
+
|
|
34
|
+
세대 하나로 모았다. `재생의도Ref` 는 사라졌고, 둘째 벌이 다시 생기면 못이 운다.
|
|
35
|
+
|
|
36
|
+
### 글자를 짚는 시험 셋을 **돌려 보는 쪽**으로
|
|
37
|
+
|
|
38
|
+
2b 로 이름이 바뀌자 뜻이 그대로인데 빨개진 시험이 둘 나왔다. 하나는 차례만 묻도록 고치고,
|
|
39
|
+
하나(`멈추면 뜸도 끊는다`)는 `usePlaybackSequencer` 시험으로 옮겼다.
|
|
40
|
+
|
|
41
|
+
> **그 시험을 고치다 자가 또 틀렸다**(여섯 번째). `tryPlayWithRetry` 부터 `await a.play()`
|
|
42
|
+
> 까지를 잘라 보는데, **내가 주석에 적은 `await a.play()`** 를 코드로 읽고 거기서 끊어
|
|
43
|
+
> 355자짜리 엉뚱한 조각을 보며 "앞 뜸이 없다" 고 울었다. 주석을 먼저 걷고 센다.
|
|
44
|
+
|
|
45
|
+
못은 **80가지**(두 길 × 40).
|
|
46
|
+
|
|
47
|
+
## 0.283.0
|
|
48
|
+
|
|
49
|
+
### 시간표의 자리를 쥐는 **한 곳** — `usePlaybackSequencer` (말귀 요청 (85) 2a, **동작 불변**)
|
|
50
|
+
|
|
51
|
+
이 주인이 없어서 하루에 **다섯 번** 틀렸다 — 0.268.0 소음 감시 · 0.278.0 재생판 · 0.278.0
|
|
52
|
+
토글 · 0.281.0 그 토글의 **두 번째 벌** · 0.282.0 번호 단추. 다섯이 다 같은 물음이었다:
|
|
53
|
+
**"지금 시간표가 도는가, 돈다면 어디인가."**
|
|
54
|
+
|
|
55
|
+
2a 는 **자리와 타이머만** 옮긴다. 진행기가 쥐는 것은 셋이다 — 자리(`positionRef`) · 세대 ·
|
|
56
|
+
뜸 기다림. 엮는 일(`onEnded` · 토글 · 번호 단추)은 아직 재생기가 제 손으로 하고,
|
|
57
|
+
`뜸Ref` · `뜸취소` · `뜸기다리기` 는 진행기를 가리키는 **얇은 껍데기**로 남는다(2d 에서 걷는다).
|
|
58
|
+
|
|
59
|
+
`isRunning()` 하나가 그 다섯이 제각기 짐작하던 물음의 **한 가지 답**이 된다.
|
|
60
|
+
|
|
61
|
+
### **그만둘 때 타이머를 걷지 않는다 — 세대로 가린다**
|
|
62
|
+
|
|
63
|
+
2a 를 쓰며 설계가 갈리는 자리를 하나 만났고, **처음에 틀린 쪽을 골랐다.**
|
|
64
|
+
|
|
65
|
+
걷으면 그 약속은 **영영 안 풀린다.** 그러면 `waitPad(...).then(...)` 에 걸어 둔 뒷정리가
|
|
66
|
+
통째로 안 돈다 — 뒤뜸이 그렇다: `.then` 에서 `leave()` 로 자리를 비우는데 그것이 안 돌면
|
|
67
|
+
자리가 `tail` 에 **영영 남아** `isRunning()` 이 참으로 굳는다(소음 감시가 속는다).
|
|
68
|
+
|
|
69
|
+
그래서 타이머는 두고 **세대만 올린다.** 늦게 깨어나도 세대가 달라 거짓을 주니 부르는 쪽은
|
|
70
|
+
조용히 물러나고, 뒷정리는 제대로 돈다.
|
|
71
|
+
|
|
72
|
+
> **이 자리를 네 번 못 잡았다.** 세대 비교를 지워도 아무 시험이 안 울렸다. 찍어 보고 알았다 —
|
|
73
|
+
> `abort()` 도, 내가 `waitPad` 에 넣은 걷기도 **앞 타이머를 걷어서** 앞 약속이 영영 안
|
|
74
|
+
> 깨어났고, 세대에 **닿는 길이 없었다.** 내 시험들은 세대가 아니라 **걷기**를 재고 있었다.
|
|
75
|
+
> 걷기를 걷어내자 네 규칙이 다 울었다(세대 · 떠남 · `abort` 의 세대 올림 · `isRunning`).
|
|
76
|
+
>
|
|
77
|
+
> **죽은 코드를 지키는 시험은 통과한다.** 그래서 안 울리는 것이 "안전하다" 가 아니다 —
|
|
78
|
+
> 그 길이 **닿는 길인지**부터 봐야 한다.
|
|
79
|
+
|
|
80
|
+
### 자가 또 거짓말했다 — 다섯 번째
|
|
81
|
+
|
|
82
|
+
시험 도우미가 세대를 올리려고 `abort()` 를 불렀는데, **그것이 타이머까지 걷어** 열려던 길이
|
|
83
|
+
안 열렸다. 도우미가 재려는 것을 제 손으로 없앴다. 오늘만 자를 다섯 번 고쳤다(훑개의 화살표 ·
|
|
84
|
+
`\w` 와 한글 · 걸어 둔 소비자 · 가짜 소리 요소 · 이 도우미).
|
|
85
|
+
|
|
86
|
+
> 소스 글자를 짚던 시험 셋(`audioPlayerPadWiring` 의 "멈추면 뜸도 끊는다")은 **돌려 보는
|
|
87
|
+
> 쪽**으로 옮겼다 — 그 일이 진행기로 가면서 글자가 달라졌고, 글자를 짚는 시험은 **뜻이
|
|
88
|
+
> 그대로인데 빨개진다.**
|
|
89
|
+
|
|
90
|
+
## 0.282.0
|
|
91
|
+
|
|
92
|
+
(85) 2단계가 건드릴 자리(번호 단추 · 다시듣기 · 정지)를 **박으러 갔다가 결함 둘을 찾았다.**
|
|
93
|
+
0단계에서 "뜸 중 ⏸" 을 박다 결함이 나온 것과 같다 — **못을 쓰려면 먼저 그 자리를 봐야 하고,
|
|
94
|
+
보면 나온다.**
|
|
95
|
+
|
|
96
|
+
### 뜸 중에 번호 단추를 누르면 **다른 번호가, 두 번** 났다
|
|
97
|
+
|
|
98
|
+
`goToTrack` 은 `jumpTokenRef` 로 **트랙 이동끼리만** 가렸고 **돌고 있는 뜸 사슬은 그대로
|
|
99
|
+
살아 있었다.** 가짜 시계 실측(소리 둘 · 뜸 1000 · 사이 뜸 2100ms 에 **[소스 1]** 누름):
|
|
100
|
+
|
|
101
|
+
3100ms play b.mp3 ← 누른 것은 1번인데 2번이 났다
|
|
102
|
+
3600ms play b.mp3 ← 그것도 두 번
|
|
103
|
+
|
|
104
|
+
누른 쪽이 앞뜸을 기다리는 동안, 살아 있던 사슬이 `a.src` 를 다음 소리로 바꿔 놓았다. 그래서
|
|
105
|
+
뜸이 끝났을 때 실려 있던 것은 **다른 소리**였다. 번호 단추가 제 번호를 안 틀면 견주는 훈련이
|
|
106
|
+
통째로 어긋난다.
|
|
107
|
+
|
|
108
|
+
`goToTrack` 이 **먼저 돌던 시간표를 걷는다**(`멈춤의도()` — 토큰을 집기 **전에** 부른다.
|
|
109
|
+
그 안에서 `jumpTokenRef` 도 올리므로 뒤에 부르면 제 토큰이 바로 낡는다).
|
|
110
|
+
|
|
111
|
+
### 합성 단어에서 [정지]가 **소리를 안 멈췄다**
|
|
112
|
+
|
|
113
|
+
`handleStop` 이 `ttsMode` 면 `stopTTS()` 만 하고 **일찍 돌아갔다.** 그런데 TTS 에는 길이
|
|
114
|
+
둘이다 — 리졸버가 있으면 **주소를 받아 `<audio>` 로 튼다**(뜸 · 파형 · 번호 단추가 다 그
|
|
115
|
+
길에 달려 있다). 기기 목소리로 말할 때만 `<audio>` 가 비어 있다.
|
|
116
|
+
|
|
117
|
+
그래서 합성 단어에서 정지를 눌러도 소리가 계속 돌았다 — 정지 1200ms 인데 1600ms 에 `ended`,
|
|
118
|
+
다시 들으면 **1번이 두 번 나고 2번은 안 났다.** 이제 길과 상관없이 둘 다 멈춘다.
|
|
119
|
+
|
|
120
|
+
> 0.281.0 의 "판단이 두 벌" 과 **같은 뿌리의 셋째**다. `ttsMode` 가 "기기 목소리" 를 뜻하는
|
|
121
|
+
> 자리와 "글에서 온 소리" 를 뜻하는 자리가 섞여 있다.
|
|
122
|
+
|
|
123
|
+
### 자가 두 번 거짓말하고 있었다 — 없는 결함을 박을 뻔했다
|
|
124
|
+
|
|
125
|
+
가짜 소리 요소가 `pause()` 와 `load()` 에서 `ended` 타이머를 **안 걷었다.** 브라우저는 멈춘
|
|
126
|
+
소리에 `ended` 를 안 내고 `load()` 는 하던 것을 끊는데, 가짜는 그대로 냈다. 그 거짓 `ended`
|
|
127
|
+
가 뒤뜸 사슬을 깨워 **"정지 뒤에 다시 누르면 소리가 두 번 난다" 는 없는 결함**을 만들었다.
|
|
128
|
+
자를 고치니 그 자리는 멀쩡했고 위 둘만 진짜였다.
|
|
129
|
+
|
|
130
|
+
> 오늘만 **자를 네 번째 고쳤다**(훑개의 화살표 · `\w` 와 한글 · 걸어 둔 소비자 · 이번 가짜
|
|
131
|
+
> 요소). **못을 박기 전에 자가 맞는지부터 본다** — 틀린 자로 박은 못은 결함을 지킨다.
|
|
132
|
+
|
|
133
|
+
못은 **76가지**가 됐다(두 길 × 38).
|
|
134
|
+
|
|
10
135
|
## 0.281.0
|
|
11
136
|
|
|
12
137
|
### 앞뜸에서 ⏸ 가 **안 멈추고 단어가 두 번 났다** — 같은 판단이 두 벌이었다 (말귀 실측)
|