Skip to content

Commit 5933f9a

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

File tree

3 files changed

+55
-10
lines changed

3 files changed

+55
-10
lines changed

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: 41 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,42 @@ 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 fasttextSubject
34+
})
35+
.pipe(
36+
rxjs.startWith(null),
37+
rxjs.shareReplay({bufferSize: 1, refCount: false})
38+
)
39+
const fasttextDispatcher = makeDispatcher("fasttext-host", {
40+
onServiceReady(args, sender) {
41+
fasttextSubject.next(sender)
42+
}
43+
})
44+
45+
2846
window.addEventListener("message", event => {
2947
const send = message => event.source.postMessage(message, {targetOrigin: event.origin})
30-
const sender = {
48+
49+
piperDispatcher.dispatch(event.data, {
3150
sendRequest(method, args) {
3251
const id = String(Math.random())
33-
send({to: "piper-service", type: "request", id, method, args})
34-
return domDispatcher.waitForResponse(id)
52+
send({from: "piper-host", to: "piper-service", type: "request", id, method, args})
53+
return piperDispatcher.waitForResponse(id)
3554
}
36-
}
37-
domDispatcher.dispatch(event.data, sender, send)
55+
}, send)
56+
57+
fasttextDispatcher.dispatch(event.data, {
58+
sendRequest(method, args) {
59+
const id = String(Math.random())
60+
send({from: "fasttext-host", to: "fasttext-service", type: "request", id, method, args})
61+
return fasttextDispatcher.waitForResponse(id)
62+
}
63+
}, send)
3864
})
3965

4066

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

0 commit comments

Comments
 (0)