@goodandready/dsh-voice 0.6.0 → 0.6.1
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/lib/client.js +17 -0
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -125,6 +125,18 @@ window.__ModuleLoader__.load({
|
|
|
125
125
|
actions.setDraft(draft ? draft + ' ' + text : text)
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
// Объявление о том, что человек заговорил.
|
|
129
|
+
//
|
|
130
|
+
// Нужно, чтобы озвучка немедленно замолчала: слушать ответ и говорить
|
|
131
|
+
// одновременно невозможно, а перекрикивать собственный плагин — глупо.
|
|
132
|
+
// Связи между плагинами нет: голос кричит в окно, кто хочет — слышит.
|
|
133
|
+
// Поэтому оба плагина работают и поодиночке.
|
|
134
|
+
function announceVoice(phase) {
|
|
135
|
+
try {
|
|
136
|
+
window.dispatchEvent(new CustomEvent('dsh-voice:speaking', { detail: { phase } }))
|
|
137
|
+
} catch (noEvents) { /* окна нет — значит и слушать некому */ }
|
|
138
|
+
}
|
|
139
|
+
|
|
128
140
|
// ------------------------------------------------- распознавание в браузере
|
|
129
141
|
//
|
|
130
142
|
// Отдельная нога, не похожая на все остальные: речь распознаёт сам браузер,
|
|
@@ -318,6 +330,9 @@ window.__ModuleLoader__.load({
|
|
|
318
330
|
|
|
319
331
|
function startRecording(mode) {
|
|
320
332
|
if (voice.phase !== 'idle' && voice.phase !== 'error') return
|
|
333
|
+
// Кричим до открытия микрофона, а не после: чем раньше замолчит
|
|
334
|
+
// озвучка, тем меньше её попадёт в запись.
|
|
335
|
+
announceVoice('start')
|
|
321
336
|
voice.set({ phase: 'recording', mode, error: '', levels: [], caption: '' })
|
|
322
337
|
modeChain(mode).then((info) => {
|
|
323
338
|
// Браузерная нога — только если её прямо поставили первой в цепочке.
|
|
@@ -399,6 +414,7 @@ window.__ModuleLoader__.load({
|
|
|
399
414
|
}
|
|
400
415
|
|
|
401
416
|
function cancelCurrent() {
|
|
417
|
+
announceVoice('end')
|
|
402
418
|
if (voice.browser) {
|
|
403
419
|
voice.browser.abort()
|
|
404
420
|
voice.browser = null
|
|
@@ -418,6 +434,7 @@ window.__ModuleLoader__.load({
|
|
|
418
434
|
// Останов по второму нажатию: диктовка досылает хвост, голосовое —
|
|
419
435
|
// отправляет всю запись и открывает окно отмены.
|
|
420
436
|
function stopCurrent() {
|
|
437
|
+
announceVoice('end')
|
|
421
438
|
if (voice.browser) {
|
|
422
439
|
const mode = voice.mode
|
|
423
440
|
const said = (voice.browserFinals || []).join(' ').trim()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-voice",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Voice input for DeepSeek Harness: dictation chunked by pauses and voice messages, each with its own provider fallback chain (Deepgram, Groq, HuggingFace, local whisper.cpp, plus any OpenAI-compatible API of your own).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|