Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с установкой уровня громкости синтеза речи в голосовых приложениях для Android в Delphi Описание проблемы и предполагаемых причинРазработчики, использующие Delphi для создания Android-приложений с функцией синтеза речи, иногда

Delphi , Синтаксис , Текст и Строки

 

Пользователь столкнулся с проблемой при работе с синтезатором речи в Android-приложении, созданном с использованием Delphi. Ошибка "External exception 1" возникала при попытке установить уровень громкости синтезированной речи. Это связано с изменениями в API Android, где вместо использования HashMap для передачи параметров теперь используется Bundle.

Шаги решения проблемы:

  1. Обновление Delphi: Убедитесь, что вы используете последнюю версию Delphi, так как в более старых версиях могут быть нерешенные баги, связанные с работой в Android.

  2. Исправление кода: В коде, который отвечает за установку параметров синтезатора речи, необходимо убедиться, что используется корректный тип данных для параметров. В частности, вместо JHashMap следует использовать JBundle.

  3. Пример исправленного кода:

    pascal procedure TAndroidTTS.SpeakVolume(say: String; volume: single); {$IFDEF ANDROID} var params: JBundle; begin params := TJBundle.JavaClass.init; params.putFloat(TJTextToSpeech_Engine.JavaClass.KEY_PARAM_VOLUME, volume); ftts.speak(StringToJString(say), TJTextToSpeech.JavaClass.QUEUE_ADD, params, StringToJString('')); end; {$ENDIF}

  4. Проверка интерфейса Java: Убедитесь, что интерфейс JTextToSpeech_Engine в файле Androidapi.JNI.TTS.pas содержит атрибут JavaSignature. Пример правильного объявления:

    pascal [JavaSignature('android/speech/tts/TextToSpeech$Engine')] JTextToSpeech_Engine = interface(JObject) ['{5BAC3048-CB0C-4DC4-AF62-D0D9AE4394CF}'] end;

  5. Вызов метода speak: Используйте метод speak с параметром params типа JBundle:

    pascal ftts.speak(StrToJCharSequence(say), TJTextToSpeech.JavaClass.QUEUE_ADD, params, StringToJString(''));

Комментарий по обновлению ответа:

Пользователь отметил, что после внесения изменений при вызове метода speak появилась ошибка "Invoke error: method not found". Это может быть связано с неправильным определением одного из методов speak. Внимательно проверьте все функции синтеза речи на корректность передаваемых типов и сигнатур методов. Возможно, потребуется дополнительная корректировка кода для успешной работы с синтезатором речи в Android.


 

Создано по материалам из источника по ссылке.

Пользователь сталкивается с трудностями в установке уровня громкости для синтезированной речи в Android-приложении, созданном с использованием Delphi, из-за изменений в API Android, требующих использования `Bundle` вместо `HashMap` для передачи параметро


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 08:56:25/0.0051708221435547/1