Сбой инициализации tts как исправить
В обход задержки инициализации Google TTS Engine в Android
Однако я столкнулся с проблемами со стандартным движком Google TTS, который установлен на большинстве телефонов. На данный момент, я играю некоторый текст сразу после инициализации объекта TextToSpeech и закрываю ресурс, как только речь заканчивается, согласно следующему коду:
На других постах я читал, что этой задержки можно избежать, используя другие движки TTS. Поскольку я всегда разрабатываю на своем телефоне Samsung, на котором по умолчанию настроен собственный проприетарный TTS, я никогда не замечал этой проблемы, пока не проверил свое приложение на телефонах других брендов, в которых по умолчанию настроен механизм Google TTS. Но в идеале я не хочу заставлять пользователей устанавливать другое приложение вместе с моим, и поэтому я хотел бы, чтобы это работало с самим Google TTS Engine по умолчанию.
Итак, мои вопросы следующие:
Можем ли мы как-то уменьшить или устранить задержку инициализации Google TTS Engine, программно или иначе?
Также правильно использовать статический объект TextToSpeech, для моих требований?
Любые решения наряду с кодом будут оценены.
Служба только инициализирует объект TTS и не выполняет никакой другой работы. Я явно не прекращаю службу, позволяя ей работать как можно дольше. Я определил объект TTS как статический, чтобы я мог получить к нему доступ из других классов моего приложения.
Хотя кажется, что это работает на удивление хорошо, меня беспокоит, может ли это привести к проблемам с памятью или батареей (в моей конкретной ситуации, когда служба обрабатывает только инициализацию объекта, а затем остается неактивной). Есть ли какие-либо проблемы в моем дизайне, или могут быть сделаны какие-либо дальнейшие улучшения / проверки для моего дизайна?
Сбой инициализации tts как исправить
Краткое описание:
Чтения электронных книг на мобильных устройствах.
eReader Prestigio позволяет читать книги в форматах PDF, DJVU, EPUB, EPUB3, FB2, FB2.ZIP, MOBI, PDF, HTML, DONC, RTF, TXT а так же аудио форматы MP3, AAC, M4B и Текст вслух (TTS).
Создайте учетную запись My Prestigio, и вы сможете:
— Синхронизировать между вашими девайсами страницу, на которой вы остановились
— Скачивать бесплатные книги с eReader Prestigio Store
— Покупать новые платные книги с eReader Prestigio Store через PayPal, Skrill и My Prestigio Vouchers
Версия: 6.0.0.3 GP eReader Prestigio (Пост Ansaros #63680089)
Версия: 6.0.0.3 build 1004989 Full eReader Prestigio (Пост Alex0047 #65283986)
Версия: 6.0.0.3 Full eReader Prestigio (Пост Alex0047 #64806715)
Версия: 6.0.0.2 Full eReader Prestigio (Пост Alex0047 #64258287)
Версия: 6.0.0.1 Full eReader Prestigio (Пост Meoweom #63938015)
Версия: 6.0.0 Full eReader Prestigio (Пост Alex0047 #63411871)
Версия: 5.9.7 GP eReader Prestigio (Пост pokpok #59312980)
Версия: 5.9.7 Full eReader Prestigio (Пост Alex0047 #59332218)
Версия: 5.9.4 GP eReader Prestigio (Пост Ansaros #58575334)
Версия: 5.9.4 Full eReader Prestigio (Пост Alex0047 #58605834)
версия: 5.9.2 Ad-Free eReader Prestigio (Пост SerzhGSA #54527209)
версия: 5.9.2 eReader Prestigio (Пост Alex0047 #53358423)
версия: 5.8 eReader Prestigio (Пост Alex0047 #53027038)
версия: 5.7.7.1 eReader Prestigio (Пост Ansaros #49796499)
версия: 5.6.6 mod (No Ads) eReader Prestigio (Пост Mr. Ricatto #48697105)
версия: 5.6.6 eReader Prestigio (Пост gotva #48007347)
версия: 5.6.5 eReader Prestigio (Пост gotva #47996331)
версия: 5.6.1 eReader Prestigio (Пост pokpok #47178624)
версия: 4.0.1 https://4pda.to/forum/d…der+Prestigio4.0.1.apk
версия: 5.5 для 4.0+ eReader Prestigio (Пост gotva #46241170)
версия: 5.4 для 4.0+ eReader Prestigio (Пост gotva #45347508)
версия: 5.3 для 4.0+ eReader Prestigio (Пост gotva #44501192)
версия: 5.2 для 4.0+ eReader Prestigio (Пост gotva #43483012)
версия: 5.1.1 для 4.0+ eReader Prestigio (Пост gotva #42706994)
версия: 5.1 для 4.0+ eReader Prestigio (Пост gotva #42663452)
версия: 5.0.2 для 4.0+ eReader Prestigio (Пост bozander #40573360)
версия: 5.0.1 для 4.0+ eReader Prestigio (Пост bozander #39522456)
версия: 5.0.0 для 4.0+ eReader Prestigio (Пост bozander #39481400)
версия: 4.5.3 для 4.0+ eReader Prestigio (Пост Ansaros #35325195)
версия: 4.5.1 для 4.0+ eReader Prestigio (Пост #35325195)
версия: 4.2 для 4.0+ eReader Prestigio (Пост #34858885)
версия: 4.1 для 4.0+ eReader Prestigio (Пост #33410907)
версия: 4.0.3 для 4.0+ eReader Prestigio (Пост #32653455)
версия: 4.0.1 https://4pda.to/forum/d…der+Prestigio4.0.1.apk
версия: 3.3.3 eReader Prestigio (Пост #28039310)
версия: 3.3.1 https://4pda.to/forum/dl/post/3772020/Prestigio+eReader+3.3.1.apk
версия: 3.1 eReader Prestigio (Пост #22793317)
версия: 3.0 https://4pda.to/forum/dl/post/2680935/eReader+Prestigio_3.0.apk
версия: 1.2 https://4pda.to/forum/dl/post/1907297/eReader-Prestigio.apk
версия: 1.0 betaeReader_Prestigio.apk ( 3,6 МБ )
Обход задержки инициализации двигателя Google TTS в Android
Я пробовал играть преобразования текста в речь объект, когда определенное событие запускается в телефоне.
однако я сталкиваюсь с проблемами с двигателем Google TTS по умолчанию, который установлен на большинстве телефонов. На данный момент я играю текст сразу после инициализации объекта TextToSpeech и закрываю ресурс, как только речь будет завершена, в соответствии со следующим кодом:
Я читал на других сообщениях, что этой задержки можно избежать, используя другие двигатели TTS. Поскольку я всегда разрабатываю на своем телефоне Samsung, который имеет собственный собственный TTS, настроенный по умолчанию, я никогда не замечал этой проблемы, пока не проверил свое приложение на других брендовых телефонах, у которых по умолчанию настроен движок Google TTS. Но, я в идеале не хочу заставлять пользователей устанавливать другое приложение Вместе с моим собственным, и поэтому я хотел бы, чтобы это работало с default Google TTS Engine.
однако, поскольку есть необходимость отключить ресурс, как только мы закончим с ним, я не удается сохранить объект живым и инициализированным надолго, и я не знаю, когда инициализировать / выключить ресурс,так как мне технически нужен голос, чтобы играть в любое время конкретное событие происходит, который в основном будет, когда мое приложение не работает на телефоне.
Итак, мои вопросы следующие :
можем мы как-то уменьшить или исключить задержку инициализации Google TTS Engine, программно или в противном случае?
есть ли способ, с помощью которого я могу сохранить объект TextToSpeech живой и инициализированный во все времена как сказать, через службу? Или это плохой, ресурсоемкий дизайн?
и с помощью static TextToSpeech объект правильный путь, для моих требований?
любые решения вместе с кодом будет оцененный.
обновление: Я подтвердил, что задержка связана исключительно С Google TTS engine, так как я пробовал использовать другие бесплатные и платные двигатели TTS, в которых мало или нет отставания. Но я все равно предпочел бы не иметь каких-либо сторонних зависимостей, если это возможно, и хотел бы сделать эту работу с Google TTS Engine.
обновление: Я, казалось бы, обошел эту проблему, привязав этот объект TTS к обслуживание и доступ к нему из сервиса. Служба липкая (если служба завершается из-за проблемы с памятью, ОС Android перезапустит службу, когда память снова будет доступна) и настроена на перезагрузку при перезагрузке устройства.
служба только инициализирует объект TTS и не выполняет никакой другой работы. Я явно не останавливаю службу, позволяя ей работать как можно дольше. Я определил объект TTS как статический, чтобы я мог получить к нему доступ из других классов моего приложение.
хотя это, кажется, работает удивительно хорошо, я обеспокоен, может ли это привести к проблемам с памятью или батареей (в моей конкретной ситуации, когда служба обрабатывает только инициализацию объекта, а затем остается бездействующей). Есть ли какие-либо проблемы в моем дизайне или могут быть сделаны какие-либо дальнейшие улучшения/проверки для моего дизайна?
измененный код VoiceGenerator:
1 ответов
Я разработчик приложения для Android Saiy. Это не бесстыдный плагин, это продемонстрировать, что я использую шаблон дизайна, который вы рассматриваете, и я «прошел», что вызвало ваш вопрос.
это свежо в моем сознании, так как я провел последний год, переписывая свой код и должен был уделять большое внимание окружающей проблеме.
попросил подобный вопрос некоторое время назад и инициализация текста в речевой объект в фоновом потоке, где он не конкурирует с другими задачами, может немного уменьшить задержку (как я вижу, вы уже делаете в своем опубликованном коде).
вы также можете убедиться, что запрос говорить не задерживается дальше, выбрав встроенный голос, а не один зависит от сети:
в API 21+ проверьте параметры на Голос класс. Особенно getFeatures() где вы можете изучить задержку и требования к сети.
в API KEY_FEATURE_NETWORK_SYNTHESIS в false внутри ваших параметров.
независимо от вышеизложенного, двигатель Google TTS имеет самое длинное время инициализации любого из двигателей, которые я тестировал (все они, я думаю). Я считаю, что это просто потому, что они используют все доступные ресурсы на устройстве, чтобы обеспечить высокое качество голоса они могут.
В общем, кроме вышеупомянутого,нет, вы не можете уменьшить время инициализации.
есть ли способ, с помощью которого я могу сохранить объект TextToSpeech живым и инициализированным во все времена, например, через службу? Или это плохой, ресурсоемкий дизайн?
также использует статический объект TextToSpeech правильный путь, для моего требования?
Как вы заметили, способ избежать времени инициализации-оставаться привязанным к движку. Но есть и другие проблемы, которые вы, возможно, захотите рассмотреть, прежде чем делать это.
Если устройство находится в состоянии, в котором ему нужно освободить ресурсы, что является тем же состоянием, которое вызывает задержку расширенной инициализации, Android имеет все права на сбор мусора этой привязки. Если вы держите эту привязку в фоновом режиме, служба может быть убита, поставив вас на место.
кроме того, если вы остаетесь привязаны к движку, ваши пользователи будут видеть использование коллективной памяти в настройках приложения Android. Для многих, многих пользователей, которые неправильно считают (бездействие) использование памяти прямо пропорционально разряжению батареи, по моему опыту, это приведет к удалениям и плохим рейтингам приложений.
на момент написания статьи Google TTS привязан к моему приложению по стоимости 70МБ.
эффективно, привязка к движку в службе и проверка того, что служба запущена, когда вы хотите, чтобы двигатель говорил, является «одноэлементным шаблоном». Создание статического двигателя в этой службе не будет служить никакой цели, которую я могу думать о.
наконец-то, чтобы поделиться своим опытом о том, как я справился с вышеизложенным.
Я ‘Google медленно инициализировать ‘в верхней части моих» известных ошибок » и » FAQ » в приложении.
Я запускаю фоновый таймер, который освобождает двигатель после периода бездействия. Это количество времени настраивается пользователем и поставляется с предупреждениями о задержке инициализации.
Я знаю, что выше не решает ваши проблемы, но, возможно, мои предложения успокоят ваших пользователей, что является отдаленной секундой для решения проблемы, но эй.
Я не сомневаюсь, что Google постепенно увеличит производительность инициализации-четыре года назад у меня была эта проблема с IVONA, которая в конечном итоге хорошо поработала над своим временем инициализации.
Отставание от задержки инициализации двигателя TTS Engine в Android
Я попытался воспроизвести объект TextToSpeech, когда в телефоне запускается определенное событие.
Тем не менее, я сталкиваюсь с проблемами с механизмом Google TTS по умолчанию, установленным на большинстве телефонов. На данный момент я воспроизвожу текст сразу после того, как объект TextToSpeech инициализирован, и завершение работы ресурса, как только будет завершена речь, в соответствии со следующим кодом:
Я прочитал на других сообщениях, что этой задержки можно избежать, используя другие двигатели TTS. Так как я всегда развиваюсь на своем телефоне Samsung, у которого есть собственный собственный TTS, настроенный по умолчанию, я никогда не замечал эту проблему, пока не проверил мое приложение на других телефонах, на которых установлен двигатель Google TTS по умолчанию. Но я в идеале не хочу заставлять пользователей устанавливать другое приложение вместе с моим собственным, и поэтому я хотел бы, чтобы это работало с самим Google TTS Engine по умолчанию.
Через некоторое ошибочное кодирование, которое я позже исправил, я понял, что если я смогу сохранить объект TextToSpeech инициализированным заранее и всегда не null – после инициализации я мог бы, похоже, обойти эту задержку.
Поэтому мои вопросы заключаются в следующем:
Можем ли мы как-то уменьшить или устранить задержку инициализации Google TTS Engine, программно или иначе?
Есть ли способ, посредством которого я могу сохранить объект TextToSpeech живым и инициализированным в любое время, например, через службу? Или это будет плохой, ресурсоемкий дизайн?
Также использует статический объект TextToSpeech правильный путь для моих требований?
Любые решения вместе с кодом будут оценены.
Обновление: я подтвердил, что задержка связана исключительно с движком Google TTS, поскольку я попытался использовать другие бесплатные и платные двигатели TTS, в которых мало или вообще нет отставания. Но я по-прежнему предпочитаю не иметь зависимостей третьих сторон, если это возможно, и хотел бы сделать эту работу с Google TTS Engine.
ОБНОВЛЕНИЕ: Я, похоже, обошел эту проблему, связывая этот объект TTS с сервисом и получая его от службы. Служба STICKY (если служба завершается из-за проблемы с памятью, ОС Android перезапустит службу, когда память снова будет доступна) и настроен на перезагрузку при перезагрузке устройства.
Служба только инициализирует объект TTS и не выполняет никакой другой работы. Я не запрещаю явно останавливать службу, позволяя ей работать как можно дольше. Я определил объект TTS как статический, так что я могу получить доступ к нему из других классов моего приложения.
Хотя это, кажется, работает удивительно хорошо, меня беспокоит, может ли это привести к проблемам с памятью или батареей (в моей конкретной ситуации, когда служба обрабатывает только инициализацию объекта, а затем остается бездействующей). Есть ли какие-либо проблемы в моем дизайне или какие-либо дальнейшие улучшения / проверки для моего дизайна?
Измененный код VoiceGenerator:
Я разработчик приложения Android! Это не бесстыдный плагин, он должен продемонстрировать, что я использую шаблон дизайна, который вы рассматриваете, и я «прошел», что вызвало ваш вопрос.
Это свежо в моем сознании, поскольку я провел последний год, переписывая свой код и должен был уделять большое внимание окружающей проблеме.
Некоторое время назад я задал аналогичный вопрос и инициализировал объект Text to Speech в фоновом потоке, где он не конкурирует с другими задачами, может немного уменьшить задержку (как я вижу, вы уже делаете в своем опубликованном коде).
Вы также можете убедиться, что запрос на разговор не задерживается, выбирая встроенный голос, а не зависящий от сети:
Независимо от вышесказанного, у Google TTS Engine есть самое длинное время инициализации любого из моторов, которые я тестировал (все они, я думаю). Я считаю, что это просто потому, что они используют все доступные ресурсы на устройстве, чтобы предоставлять самый качественный голос, который они могут.
Из моего личного тестирования эта задержка прямо пропорциональна аппаратным средствам устройства. Чем больше оперативной памяти и производительности процессора, тем меньше время инициализации. То же самое можно сказать и о текущем состоянии устройства – думаю, вы обнаружите, что после перезагрузки, где есть свободная память, и Android не нужно будет убивать другие процессы, время инициализации будет уменьшено.
Есть ли способ, посредством которого я могу сохранить объект TextToSpeech живым и инициализированным в любое время, например, через службу? Или это будет плохой, ресурсоемкий дизайн?
Также использует статический объект TextToSpeech правильный путь для моих требований?
Как вы уже отмечали, способ избежать времени инициализации – оставаться привязанным к движку. Но есть дополнительные проблемы, которые вы, возможно, захотите рассмотреть, прежде чем делать это.
Кроме того, если вы останетесь связанными с движком, ваши пользователи будут видеть использование коллективной памяти в настройках приложения для Android. Для многих, многих пользователей, которые неправильно рассматривают (бездействующее) использование памяти, прямо пропорционально утечке батареи, по моему опыту это приведет к удалению и снижению рейтинга приложений.
На момент написания статьи Google TTS привязана к моему приложению по цене 70 МБ.
Фактически, привязка к движку в сервисе и проверка того, что служба работает, когда вы хотите, чтобы движок говорил, является «одноэлементным шаблоном». Становление двигателя в рамках этой службы не будет иметь никакой цели, о которой я могу думать.
У меня « Google медленно инициализирует » в верхней части моих «известных ошибок» и «FAQ» в приложении.
Я запускаю фоновый таймер, который освобождает двигатель после периода бездействия. Это время настраивается пользователем и поставляется с предупреждениями о задержке инициализации …
Я знаю, что вышеупомянутое не решает ваши проблемы, но, возможно, мои предложения успокоят ваших пользователей, что является далекой секундой для решения проблемы, но эй …
Я не сомневаюсь, что Google постепенно увеличит производительность инициализации. Четыре года назад у меня была эта проблема с IVONA, которая в конце концов неплохо справилась с их временем инициализации.
Инициализация – это что такое? Для чего она проводится? Какие следствия её осуществления? Что делать при возникновении ошибок? Эти и множество иных вопросов мы рассмотрим в рамках данной статьи.
Общая информация
Для начала давайте разберёмся, что же собой представляет инициализация. Это обозначение используется для создания, активации, подготовке к работе и определению параметров программного обеспечения или аппаратной составляющей. Иными словами, они приводятся в состояние готовности к использованию. Процесс инициализации всегда направлен извне по отношению к объекту управления (программе или устройству). Он необходим для того, чтобы определить параметры и правила работы.
Примеры инициализации
Давайте представим несколько реальных ситуаций и разберёмся с ними. Итак, как, к примеру, выглядит процесс инициализации подсистемы печати, которая выводит данные на бумагу? Первоначально определяется, какое устройство будет работать. Учитываются все особенности, вроде формата печати, использования цветов, максимального разрешения и прочее. Чтобы получить такую информацию, устройство следует активировать, подав на него питание и управляющий сигнал. С помощью последнего и будут запрошены доступные параметры работы или запущен процесс сканирования возможностей. И полученные данные будут переданы в системный блок, где, после обработки, они будут представлены пользователю в виде вариантов печати, что доступны для оборудования. А что собой представляет инициализация программы? Так называется процесс, во время которого переменные устанавливаются в начальные значения или в ноль перед тем, как программа будет выполнена. Если же говорить, допустим, о магнитном диске, то в его случае это подразумевает запись управляющей информации и последующее форматирование.
Поговорим о программах
Как видите, инициализация – это важный аспект взаимодействия с информационными технологиями. Давайте рассмотрим, как же происходит этот процесс на примере загрузочной программы EXE. Итак, первоначально необходимо передать «Ассемблеру» указания, в которых будет иметься и соответствовать действительности информация про сегментные регистры. Затем сохраняется адрес в стеке, что находится в регистре DS. После этого он обнуляется. И в завершение – в регистр загружается адрес нужного сегмента данных. Когда работает «Ассемблер», то он может определять наличие смещений в отдельных областях. При этом перед загрузочным модулем включается 256-байтная область, которая известна ещё как префикс программного сегмента PSP. Чтобы установить адрес её начальной точки используется регистр DS. Пользовательская программа сохраняет адрес, помещая его в стек с последующим возвратом в DOS. И здесь часто возникает ошибка инициализации. Почему? Дело в том, что системе требуется, чтобы следующее значение было нулевым адресом стека. Для этого необходимо, чтобы с помощью специальной команды был очищен регистр AX. Если этого не сделать, то возникают проблемы. Когда же может возникнуть ошибка инициализации? При использовании нелицензионного программного обеспечения, когда не был произведён качественный взлом, или же, когда она запускается просто на разных операционных системах, и были перемещены адреса системных регистров.
Когда могут возникать проблемы?
Это весьма интересный вопрос, на который всё же нужно дать ответ, раскрыть его полностью. Рассмотрим, что собой представляет инициализация Windows. Первоначально подгружается базовая система ввода/вывода. И уже БСВВ инициализирует операционную систему. Если нет конфликтов с системными регистрами, то всё подгружается без проблем и так же функционирует. Но, допустим, была установлена пиратская операционная система. И пришло заводское обновление. Если согласиться на предложение его установить, то будет заменена часть информации, которая позволяет работать. И из-за внутренних механизмов безопасности функционирование будет блокировано. Иными словами, повреждение конфигурации любой программы – это самая частая причина того, что инициализация не возможна. Но, к счастью, это относится разве что к более старым версиям, нежели Windows 10, которая была сделана бесплатной. А сейчас давайте обратим внимание к аппаратной составляющей.
Как работает жесткий диск?
Поговорим о месте, где хранятся все наработанные нами данные. Инициализация жесткого диска включает в себя стартовую подготовку механики, определение в базовой системе ввода/вывода и активацию главной загрузочной записи. Последняя выступает в качестве главного управляющего звена, от которого зависит очередность обработки файлов, что составляют операционную систему. Если возникнет сбой в области главной загрузочной записи, то будет прекращено функционирование ОС и, соответственно, жесткий диск будет считаться не инициализированным. Следует отметить, что ошибка в данном случае может быть полной или же частичной. В первом случае запуск программного обеспечения будет прерываться текстовым сообщением, что уведомит о наличии проблем. И, соответственно, инициализация жесткого диска не будет проведена. Во втором случае операционная система может работать довольно корректно. Но всё же, часть данных будет недоступна для просмотра. Оба варианта требуют квалифицированной диагностики проблем.
Тестирование
Итак, мы знаем, что собой представляет инициализация. Это постепенно подводит к такому вопросу – а что делать в случае проблем? Первоначально необходимо протестировать проблему. Это можно сделать и вручную, разбираясь с теми ошибками, что выводит компьютер, или же воспользоваться любым некоммерческим продуктом соответствующего профиля. Многие считают, что они не удобны в плане использования и информативности и предпочитают использовать базовую систему ввода/вывода. В пользу последней следует отметить систематичность и методичность перебора информации, и высокую результативность подобного тестирования. К тому же, проверка в таких случаях проводится внимательно и небольшими «порциями» загрузочной области, причем – по битах. Если всё было перепробовано, а система не работает, то появляется сообщение о критическом сбое. В случае работы с программой выводится информация о проблеме.
Восстановление
С обычными программами всё просто. Можно попробовать переустановить её или же сделать восстановление системы. Если же говорить о проблемах аппаратуры, то тут немного сложней. Рассмотрим ситуацию на примере всё того же жесткого диска. Первоначально следует убедиться, что он вообще работает. Для этого его необходимо послушать. В случае неисправности, его, пожалуй, лучше выбросить и купить новый, ибо помочь тут можно только с помощью специализированной аппаратуры. Если он издаёт стандартные звуки, то следует:
Заключение
Вот и было рассмотрено, что же собой представляет инициализация. Частные примеры и случаи можно рассматривать ещё долго и упорно, но, увы, размеры статьи ограничены. Главное – что был рассмотрен сам механизм этого процесса.