Skip to content

Commit 36fc1cf

Browse files
committed
use ttstool.com/fasttext to do language detection
1 parent 0664055 commit 36fc1cf

3 files changed

Lines changed: 57 additions & 10 deletions

File tree

js/document.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,16 @@ function Doc(source, onEnd) {
285285
})
286286
}
287287

288-
function serverDetectLanguage(text) {
288+
async function serverDetectLanguage(text) {
289+
try {
290+
const service = await rxjs.firstValueFrom(fasttextObservable)
291+
if (!service) throw new Error("FastText service unavailable")
292+
const [prediction] = await service.sendRequest("detectLanguage", {text})
293+
return prediction?.language
294+
}
295+
catch (err) {
296+
console.error(err)
297+
289298
return ajaxPost(config.serviceUrl + "/read-aloud/detect-language", {text: text}, "json")
290299
.then(JSON.parse)
291300
.then(function(res) {
@@ -297,6 +306,7 @@ function Doc(source, onEnd) {
297306
console.error(err)
298307
return null
299308
})
309+
}
300310
}
301311

302312
async function getSpeech(texts) {
@@ -335,7 +345,7 @@ function Doc(source, onEnd) {
335345
//method getState
336346
function getState() {
337347
if (activeSpeech) return activeSpeech.getState();
338-
else return Promise.resolve(source.isWaiting() ? "LOADING" : "STOPPED");
348+
else return "LOADING"
339349
}
340350

341351
//method getActiveSpeech

js/messaging.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ function makeDispatcher(myAddress, handlers) {
157157
if (handlers[req.method]) {
158158
Promise.resolve()
159159
.then(() => handlers[req.method](req.args, sender))
160-
.then(result => sendResponse({ type: "response", id: req.id, result, error: undefined }), error => sendResponse({ type: "response", id: req.id, result: undefined, error }));
160+
.then(result => sendResponse({ to: req.from, type: "response", id: req.id, result, error: undefined }), error => sendResponse({ to: req.from, type: "response", id: req.id, result: undefined, error }));
161161
//let caller know that sendResponse will be called asynchronously
162162
return true;
163163
}
@@ -187,7 +187,7 @@ function makeDispatcher(myAddress, handlers) {
187187
else
188188
pending.fulfill(res.result);
189189
}
190-
else {
190+
else if (res.to == myAddress) {
191191
console.error("Stray response", res);
192192
}
193193
}

js/player.js

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const piperObservable = rxjs.defer(() => {
1414
rxjs.shareReplay({bufferSize: 1, refCount: false})
1515
)
1616
const piperCallbacks = new rxjs.Subject()
17-
const domDispatcher = makeDispatcher("piper-host", {
17+
const piperDispatcher = makeDispatcher("piper-host", {
1818
advertiseVoices({voices}, sender) {
1919
updateSettings({piperVoices: voices})
2020
piperSubject.next(sender)
@@ -25,16 +25,44 @@ const domDispatcher = makeDispatcher("piper-host", {
2525
onEnd: args => piperCallbacks.next({type: "end", ...args}),
2626
onError: args => piperCallbacks.next({type: "error", ...args}),
2727
})
28+
29+
30+
const fasttextSubject = new rxjs.Subject()
31+
const fasttextObservable = rxjs.defer(() => {
32+
createFasttextFrame()
33+
return rxjs.race(
34+
fasttextSubject,
35+
rxjs.timer(3000).pipe(rxjs.map(() => null))
36+
)
37+
})
38+
.pipe(
39+
rxjs.shareReplay({bufferSize: 1, refCount: false})
40+
)
41+
const fasttextDispatcher = makeDispatcher("fasttext-host", {
42+
onServiceReady(args, sender) {
43+
fasttextSubject.next(sender)
44+
}
45+
})
46+
47+
2848
window.addEventListener("message", event => {
2949
const send = message => event.source.postMessage(message, {targetOrigin: event.origin})
30-
const sender = {
50+
51+
piperDispatcher.dispatch(event.data, {
3152
sendRequest(method, args) {
3253
const id = String(Math.random())
33-
send({to: "piper-service", type: "request", id, method, args})
34-
return domDispatcher.waitForResponse(id)
54+
send({from: "piper-host", to: "piper-service", type: "request", id, method, args})
55+
return piperDispatcher.waitForResponse(id)
3556
}
36-
}
37-
domDispatcher.dispatch(event.data, sender, send)
57+
}, send)
58+
59+
fasttextDispatcher.dispatch(event.data, {
60+
sendRequest(method, args) {
61+
const id = String(Math.random())
62+
send({from: "fasttext-host", to: "fasttext-service", type: "request", id, method, args})
63+
return fasttextDispatcher.waitForResponse(id)
64+
}
65+
}, send)
3866
})
3967

4068

@@ -346,3 +374,12 @@ function createPiperFrame() {
346374
f.style.borderWidth = "0"
347375
document.body.appendChild(f)
348376
}
377+
378+
function createFasttextFrame() {
379+
const f = document.createElement("iframe")
380+
f.id = "fasttext-frame"
381+
f.src = "https://ttstool.com/fasttext/index.html"
382+
f.allow = "cross-origin-isolated"
383+
f.style.display = "none"
384+
document.body.appendChild(f)
385+
}

0 commit comments

Comments
 (0)