foobnix / LibreraReader

Book Reader for Android
http://librera.mobi
Other
2.72k stars 297 forks source link

TTS feature broken #1085

Open CaitlinMkaKatie opened 1 year ago

CaitlinMkaKatie commented 1 year ago

Good morning I have had your reader on my phone for a few months now It worked without any problems on my Samsung with Android 10.x Last weekend I got an update to Android 11 and since then the following TTS programs refuse to work with your Reader

I really don't know what's wrong, because when I proofread my book last week, Librera was able to process the file without any problems. It shows it to me and I can open it for manual reading, but that doesn't help me with proofreading. For that I need the TTS support.

Translated with www.DeepL.com/Translator (free version)

shkoda963 commented 1 year ago

Try to update to the latest version or install the beta version of beta.librera.mobi and check again.

CaitlinMkaKatie commented 1 year ago

Try to update to the latest version or install the beta version of beta.librera.mobi and check again.

Already done - occurred on the newest version 8.8.68 too - till i dont opened it before sending by BT w/ any software from PC to mobile dev

rlpowell commented 1 year ago

This is also happening to me, or at least I assume it's the same issue. I just got an FxTex Pro1, which runs Android 11, and when I try to do TTS in Librera the phone just vibrates and the "Google Speech" words next to "Voice" in the TTS window go away.

rlpowell commented 1 year ago

I'm on Beta 8.9.14 BTW. I would be more than happy to help debug.

rlpowell commented 1 year ago

Uh. I was able to fix it by going to the beginning of the book and retrying, then jumping progressively further into this book, which is quite long (1266 pages at font size 21); now it seems to be fine anywhere. 🤷

rlpowell commented 1 year ago

A couple of times now I have had to switch to a different, shorter book, play with orientation changes until the speech matches the text, and then switch back to my long book, because I couldn't get the long book to play at all.

Whatever this is, it seems to be triggered by initial install / re-install; I have never had it just start happening when I had previously installed the app, only right after installation.

rlpowell commented 1 year ago

FWIW, I was able to easily reproduce this issue in Android Studio with this config:

image

The process was just: wipe data, launch virtual device, install the 8.9.5 APK from https://github.com/foobnix/LibreraReader/releases/download/8.9.5/Librera.Pro-8.9.5-uni.apk , install the attached book, set font to 29, set orientation in Librera to Portrait, disable hyphenation, jump to a random point in the book, and start TTS.

The book:

Jackal_Among_Snakes (1).zip

rlpowell commented 1 year ago

This issue was introduced somewhere between 8.2.11 and 8.2.29 , so https://github.com/foobnix/LibreraReader/compare/8.2.11...8.2.29

Which is ... a lot of commits.

And also has a MuPDF upgrade, of course. 😢

rlpowell commented 1 year ago

@foobnix I was able to narrow this in my testing to commit ec3989439 ; my build environment is almost certainly not the same as yours (I would looooooove a Dockerfile for Librera to match your build environment!), but for me, this change fixes the "on a fresh install, TTS is using the wrong rotation"; it's a revert of one of the changes in that commit:

diff --git a/app/src/main/java/com/foobnix/model/AppProfile.java b/app/src/main/java/com/foobnix/model/AppProfile.java
index a45661407..a10be2ea7 100644
--- a/app/src/main/java/com/foobnix/model/AppProfile.java
+++ b/app/src/main/java/com/foobnix/model/AppProfile.java
@@ -83,7 +83,6 @@ public class AppProfile {
             LOG.d("AppProfile init null");
             return;
         }
-        AppTemp.get().init(c);

         if (!Android6.canWrite(c)) {
             return;
@@ -124,6 +123,7 @@ public class AppProfile {
         }
         TintUtil.init();
         BookCSS.get().load1(c);
+        AppTemp.get().init(c);

         PasswordState.get().load(c);
         DragingPopup.loadCache(c);

I think it makes sense that this issue could be caused by something being initialized before the CSS has been loaded, if the CSS includes orientation information.