Android modify audio settings

Как встроить голосового помощника в любое мобильное приложение. Разбираем на примере Habitica

Вам не кажется, что многие мобильные приложения стали бы куда удобнее, будь в них голосовое управление? Нет, речь не о том, чтобы вести беседы с банковским ассистентом в чате техподдержки. В основном было бы достаточно голосовой навигации по приложению или form-filling в режиме диалога.

На примере Habitica (опенсорсный app для закрепления привычек и достижения целей, написан на Kotlin) Виталя Горбачёв, архитектор решений в Just AI, показывает, как быстро и бесшовно встроить голосовой интерфейс в функционал любого приложения.

Но для начала давайте обсудим, почему голосовое управление мобильным приложением — это удобно? Начнем с очевидных вещей.

  • Нам часто нужно воспользоваться приложением в момент, когда заняты руки: готовка, управление транспортным средством, тащим чемоданы, во время механической работы и так далее.
  • Голос — важнейший инструмент для людей с нарушениями зрения.

Кейсы и так прозрачные, но на самом деле всё еще проще: в некоторых случаях набор голосом просто быстрее! Представьте — заказ авиабилета одной фразой «Купи мне билет на завтра на двоих в Самару» вместо долгого заполнения формы. При этом с возможностью задавать пользователю уточняющие вопросы: вечером или днем? с багажом или без?

Голос полезен при прохождении нами сценария «form-filling» и удобен для заполнения почти любых длинных форм, требующих от пользователя определенного объема информации. И такие формы присутствуют в большинстве мобильных приложений.

Слева направо: приложение РЖД «Пригород», дневник питания FatSecret (пользователям приходится заполнять форму несколько раз в день, выбирая из сотен продуктов), приложение пекарни «Коржов».

Из-за того, что сегодня голосовых ассистентов часто внедряют в чат поддержки и развиваются они именно оттуда, большинство компаний пытается запихнуть функционал приложения в чат. Пополнить баланс, узнать что-то о товаре или услуге… Это далеко не всегда удобно реализовано, а в случае с голосовым вводом и вовсе контрпродуктивно, хотя бы потому, что рапознавание речи часто работает совсем не идеально.

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

Мы решили показать, как это можно сделать, на примере Habitica — это опенсорсное приложение, написаное почти на чистом Котлине. «Хабитика» отлично подходит под кейс с голосовым ассистентом — тут тоже для того, чтобы завести новую задачу, требуется заполнить довольно объемную форму. Попробуем заменить этот муторный процесс одной фразой с наводящими вопросами?

Я разбил туториал на две части. В этой статье мы разберемся, как добавить голосового ассистента в мобильное приложение и реализовать базовый сценарий (в нашем случае это готовый сценарий по уточнению прогноза погоды и времени — один из самых популярных в мире запросов к голосовым ассистентам). Во второй статье — а она выйдет уже скоро — мы научимся вызывать голосом определенные экраны и реализовывать сложные запросы внутри приложения.

Что нужно для работы

SDK. Мы взяли Aimybox как SDK для построения диалоговых интерфейсов. Из коробки Aimybox дает SDK ассистента и лаконичный и кастомизируемый UI (который при желании можно и вовсе переделать). При этом в качестве движков распознавания, синтеза и NLP можно выбрать из уже имеющихся или создать свой модуль.

По сути, Aimybox реализует архитектуру голосового помощника, стандартизируя интерфейсы всех этих модулей и правильным образом организуя их взаимодействие. Таким образом, внедряя это решение, можно значительно сократить время на разработку голосового интерфейса внутри своего приложения. Подробнее про Aimybox можно прочитать тут или тут.

Инструмент для создания сценария. Сценарий будем писать на JAICF (это опенсорсный и совершенно бесплатный фреймворк для разработки голосовых приложений от Just AI), а интенты распознавать с помощью Caila (NLU-сервис) в JAICP (Just AI Conversational Platform). Про них подробнее расскажу в следующей части туториала — когда дойдем до их использования.

Смартфон. Для тестов нам понадобится смартфон на Android, на котором мы будем запускать и тестить «Хабитику».

Читайте также:  Car scanner pro elm obd2 для андроид

Порядок действий

Для начала форкаем «Хабитику» (ветку Release) и ищем самые важные для нас файлы. Я пользовался IDE Android Studio:

Находим MainActivity.kt — туда мы будем встраивать логику.

HabiticaBaseApplication.kt — там будем инициализировать Aimybox.

Activity_main.xml — туда встроим элемент интерфейса.

AndroidManifest.xml — там хранится вся структура приложения и его разрешения.

Согласно инструкции в репе «Хабитики» переименовываем habitica.properties.example и habitica.resources.example, убирая из них example, заводим проект в firebase под приложение и копируем в корень файл google-services.json.

Запускаем приложение, чтобы проверить, что сборка рабочая. Вуаля!

Для начала добавим зависимости Aimybox.

в dependencies и

И добавим сразу после compileOptions следующую строку, чтобы все работало корректно

Убираем флаги с разрешений RECORD_AUDIO и MODIFY_AUDIO_SETTINGS в AndroidManifest.xml, чтобы опции выглядели следующим образом.

Теперь инициализурем Aimybox в BaseApplication.

Добавляем AimyboxProvider при инициализации класса.

И делаем собственно инициализацию.

Вместо YOUR_KEY впоследствии будет ваш код от Aimybox Console.

Теперь встраиваем фрагмент в mainActivity.kt. Предварительно вставляем ФреймЛэйаут в activity_main.xml, прямо под фреймлэйаутом с id bottom_navigation

В сам MainActivity сначала добавляем эксплицитный запрос разрешений в OnCreate

И при их получении добавляем фрагмент в указанный выше фрейм.

Не забываем добавить в OnBackPressed возможности выйти из ассистента после захода в него.

Кроме этого, добавим в стили (styles.xml) в AppTheme

И отдельные стили чуть ниже:

Давайте проверим, добавился ли микрофончик. Запускаем приложение.

У нас посыпалась куча ошибок о неправильном синтаксисе. Исправляем все, как советует IDE.

Но микрофончик наползает на нижнюю навигацию. Давайте чуть поднимем. Добавим в стили выше в CustomAssistantButtonTheme:

Теперь подключим туда асисстента и проверим, нормально ли он отвечает. Для этого нам понадобится консоль Aimybox.

Начнем с того, что зайдем в app.aimybox.com под нашим акком гитхаба, сделаем новый проект, подключим пару навыков (я подключил DateTime для теста) и попробуем задать соответсвующие вопросы в асисстенте. Здесь же в настройках, в правом верхнем углу, берем apiKey, который вставляем в createAimybox вместо YOUR KEY.

Только надпись на английском, давайте поменяем приветственное сообщение в strings.constants.xml.

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

В следующей статье про ассистента для «Хабитики» расскажу, как с помощью голоса не только узнавать погоду, а управлять непосредственно приложением — переходить по страничкам и добавлять привычки и задания.

Источник

Спросите несколько разрешений android 6.0

Мне нужно показать несколько разрешений, и моя программа покажет только первое, я не знаю почему, надеюсь, вы можете мне помочь

Итак . программа просто запрашивает первое разрешение «Записать внешнее хранилище», а затем показывает «permiso no concedido», но я не знаю почему, я надеюсь, вы можете объяснить мне, почему, спасибо и извините за мой плохой английский

2 ответа

Запрос разрешения требуется только для разрешений, уровень защиты которых составляет dangerous . Вы можете обратиться к этому документу, чтобы определить уровень защиты. Дополнительные сведения см. В этом документе с обзором разрешений.

MODIFY_AUDIO_SETTINGS

Вы не видите запрос разрешения для этого, потому что уровень защиты для этого разрешения — normal . Это разрешение будет предоставлено автоматически, без запроса пользователю.

WRITE_SETTINGS

Вы не видите запрос на разрешение, потому что уровень защиты равен signature . На основе документации:

Примечание. Если приложение нацелено на уровень API 23 или выше, пользователь приложения должен явно предоставить это разрешение приложению через экран управления разрешениями. Приложение запрашивает одобрение пользователя, отправляя намерение с действием ACTION_MANAGE_WRITE_SETTINGS. Приложение может проверить, есть ли у него это разрешение, вызвав Settings.System.canWrite ().

Вам нужно активировать намерение, чтобы запросить это разрешение.

CHANGE_CONFIGURATION

Это разрешение требует, чтобы приложение было подписано ключом подписи прошивки или было установлено в системном разделе. Таким образом, вы не можете запросить это разрешение через диалоговое окно разрешений. Обратитесь к этому SO

Однако существует обходной путь для предоставления этого разрешения через adb следующим образом:

adb -d shell pm grant android.permission.CHANGE_CONFIGURATION

Но нельзя ожидать, что все ваши пользователи будут обладать техническими знаниями для этого.

Как сказал @Sagar, единственное разрешение, которое я должен запросить, — это «WRITE_EXTERNAL_STORAGE», потому что «MODIFY_AUDIO_SETTINGS» просто считается «нормальным» для Android. Но, возвращаясь к моей проблеме, я нашел одно решение:

Читайте также:  Privacy and android apps

«WRITE_EXTERNAL_STORAGE» просто спрашивает его, как я, и чтобы получить WRITE_SETTINGS, я делаю этот код:

Источник

Android modify audio settings

Модификация и улучшение качества звука андройд | Modification and improvement of sound quality android

Данная тема создана с целью улучшения и повышения звуковых характеристик андройд устройств,
где все подробно описано начиная от простых действий в build.prop,
заканчивая внедрением сторонних аудио библиотек в свой смартфон.

Тему буду обновлять по ходу времени

Для всех действий понадобится наличе root прав

Список samplingRates 8000,16000,32000,44100,48000,88200,96000,176400,192000,384000,768000
Список format по возрастанию в качестве
AUDIO_FORMAT_PCM_16_BIT
AUDIO_FORMAT_PCM_24_BIT_PACKED (в основном используется для a2dp профиля)
AUDIO_FORMAT_PCM_8_24_BIT
AUDIO_FORMAT_PCM_32_BIT

Флаг fast
Он же вывод звука с низкой задержкой до 40 мс

16 bit и 48Khz максимкльно и все что ниже. Нельзя выводить hires

Разгрузка offload
Список форматов:
AUDIO_OUTPUT_FLAG_DIRECT (прямой выход)
AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD (сжатие аудио на выходе)
AUDIO_OUTPUT_FLAG_NON_BLOCKING (аудио выход не блокируется)

используется для вывода на bluetooth или устройства где это необходимо гарнитуру, современные устройства компрессиуют сигнал до mp3 под кодек SBC,если наушники (устройство) не поддерживают кодек ldac, aptx и hwa
если есть возможность выводить через hires кодек, то вывод идет через 24_BIT_PACKED, упрощенный формат 24bit

Прямой вывод звука, игнорирование всех эффектов системы и пост обработок, то есть вывод HIRES
Список форматов:
AUDIO_OUTPUT_FLAG_DIRECT (прямой выход)
AUDIO_OUTPUT_FLAG_DIRECT_PCM (прямой выход в PCM контейнере)
В чем разница незнаю, можете использовать 1 один из них

Флаги выхода аудио
AUDIO_OUTPUT_FLAG_PRIMARY (первичный аудио выход, используется по стандарту в большинстве устройств)
AUDIO_OUTPUT_FLAG_DEEP_BUFFER (Глубокий буффер)

Список форматов компрессии аудио от самого высокого до низкого качества (это не весь список, но самые нормальные) (не все будут поддерживаться)
AUDIO_FORMAT_FLAC
AUDIO_FORMAT_ALAC
AUDIO_FORMAT_APE
AUDIO_FORMAT_VORBIS
AUDIO_FORMAT_WMA
AUDIO_FORMAT_WMA_PRO
AUDIO_FORMAT_MP3 (по умолчанию)

bundle <
path /system/lib64/soundfx/libbundlewrapper.so
>
>
effects <

bassboost <
library bundle
uuid 8631f300-72e2-11df-b57e-0002a5d5c51b
>
>

Разложить все файлы по папкам из архива, и дать разрешения
Правка разрешений файлов
/bin/alsa_amixer 0755
/bin/alsa_aplay 0755
/bin/alsa_ctl 0755
/lib/libasound.so 0644
/usr/share/alsa //всем папкам 0755, всем файлам в папке alsa 0644
Драйвер для 32/64 битных процессоров: alsa_32bit.zip ( 405.16 КБ )
(ограничение андройд от 4 до 6 выше работать не будет)

Дополнение положить в /system/lib/hw с правами 0644 (может как положительно так и негативно сказаться на звуке): alsa.default.so.zip ( 12.96 КБ )

Готовый скрипт для запуска alsa: alsa.sh.zip ( 272 байт )

# Нестандартные
Имеет качествнный алгоритм обработки аудио
Ставить с заменой, если в /system/lib/libasound.so имеется данная библиотека, если ее нет бесполезно (возможно появистя эффект, но не уверен) В /system/bin не должно быть бинарников от alsa, иначе с замной библиотеки пропадет звук, сделайте копию оригинала для безопасности 🙂
Библиотека asound от Samsung GS8+: alsa_asound_sgs8+.zip ( 262.15 КБ )

Библиотеки брал от 6 андройд, но должны работать и на версиях ниже, так как они универсальные
ВАЖНО сделайте бекап системного раздела не гарантирую 100% работу библиотек (телефон может зависнуть на вечной анимации) , можете перебирать по одной и наблюдать как ведет себя смартфон
Установка: перенести все библиотеки с заменой в /system/lib и дать права 0644
Можно упростить процесс правки прав
su #получаем root
mount -o rw,remount /system #перевод системного раздела в запись
chmod 0644 /system/lib/*.so #смена прав

Список библиотек:
/libaudioflinger.so
/libaudioresampler.so
/libaudiospdif.so
/libaudioutils.so
/libeffects.so
/libinput.so
/libinputflinger.so
/libsonic.so
/libsonivox.so
/libsoundtrigger.so
/libspeexresampler.so
/libwebrtc_audio_coding.so
/libwebrtc_audio_preprocessing.so

В целом повышает общий уровень громкости, четкость, басс.
audio_engine.zip ( 1.24 МБ )

Рекомендации:
1. Используйте только от флагманов звуковые библиотеки. Так как только на данных устройствах,
производители делают максимальный акцент на составляющие устройства. Так же папка soundfx
2. Многие попросту удаляют папку soundfx с устройства и прочее, дабы сделать более чистый выход звука,
я являюсь противником данного метода, т.к. всегда приводило к жестяному и не живому звуку.

Делайте перезапуск интерфейса, что бы не ждать долгой перезагрузки, изменения так же вступают в силу
su
am restart

Сообщение отредактировал derak1129 — 08.07.21, 14:02

Подробная инструкция по настройке ALSA

На выходе получите высококачественнее звук

Смена звуковой карты, если имеется 2
Наличие и номер звуковых карт можно проверить командой в терминале
cat /proc/asound/modules
Если выдало к примеру, 0 стандартная карта, 1 адаптированная для музыки именно она должна поддерживать 32 или 24 битную обработку и 192000 дискритизацию, хотя бывает что и стандартная не плохо себя ведет на такой обработке.
0 mtkcard
1 hdcard
# по умолчанию 0, пишем 0 или 1 взависмости от наличия карт
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0

Читайте также:  Neighbours from hell season 1 full android

Находим и меняем данные строки
сильно влияет на звук
defaults.pcm.dmix.rate 48000 #повышем до 96000 / 192000 , насколько система позволяет
defaults.pcm.dmix.format «U16_LE» #формат обработки рекомендую использовать U32_LE или U24_3LE U18_3LE

Значения выше, высокие и средние поднимаются, если в минус басса больше, менять default

Функция значительно преображает звук, по умолчание 16, если спустить на 0 и ниже звук будет бассистым, наоборот ввысьвысокие и средние выражаются, более четкий
менять default

Сообщение отредактировал Roman_city — 28.09.17, 16:54

Библиотеки Beats
Оригинал, но тут расширенная версия
Данные операции над устройством безопасны, то есть они не приведут к крашам и вечным загрузкам устройства!
Работают на arm/arm64/x86
Не пихайте сразу все, они очень сильно влияют звук даже при малейшем изменении, можно испортить так и повысить звучание

Установка: всем файлам права 0644, папкам 0755, исключение /bin/все файлы, права 0755
Внутри лежит файл для добавления эффектов в audio_effects.conf

Внутри архива папка beats_expansion, в ней находятся все остальные конфигурации звука
Файлы с расширением /etc/*.bin бросайте в /system/etc с правами 0644, рекомендую использовать по 1 из каждого подраздела bas,dyn,img,peq (может одного хватит)

Список основных либов к которым поодключаются все остальные настройки и либы /system/lib:
/system/lib/soundfx/libbeatsbass.so
/system/lib/soundfx/libsrsfx.so
/system/lib/soundfx/libsrstb.so

Описание эффектов:
/etc/*.bin конфигурация выходного звука,
В папке /etc/soundimage лежат основные настройки для SRS, эквализируют звук, бассбусты, усилетели голоса и высоких и т.д., копируйте в /system/etc/soundimage с правами 0644
Из названия разберетесь
В папке /etc/audio, файлы, которые копрессируют, лимитируют и выравнивают АЧХ выходного сигнала.

/system/bin/sound лимитер
/system/lib/soundfx/libbeatsbass.so усилитель басса
/system/lib/soundfx/libsrsfx.so накладвает эффекты расширение стерео образа, реверб, дисторшен и т.д.
/system/lib/soundfx/libsrstb.so Что то вроде компрессора
/system/lib/soundfx/libsrscore.so помогает libsrsfx.so, компрессирует звук
/system/lib/soundfx/libbeatscorehtc.so помогает libbeatsbass.so
/system/lib/soundfx/libharmancorehtc.so возбуждает высокий спектр частот, голоса чище звучат

Сообщение отредактировал Roman_city — 14.10.17, 14:41

Выставил дискретизацию 384000, звук не пропал, смарт redmi 3s, проц снап 430.

Сообщение отредактировал rv.e.a — 12.10.17, 07:33

Настройка и эквализация звука в SRS Processing

Ставится в основном на бюджетных моделях, может ошибаюсь (как пример взял от Leagoo M8)
Возможно у кого то она заработает без наличия данной библиотеки
Наличие проверяется, нахождением файлов: в /system/lib/libsrsprocessing.so ../system/data/srs_processing.cfg (иногда он находисят в etc)

Версия самой программы, включение программы или нет и уровень усиления выходного сигнала
// BLOCK: srs_cfg
// Config — Non-IP Configuration
:srs_skip = 1 #Пропускает любую обработку SRS 0 -нет, 1 — да
:trumedia_enable = 0 #включен или нет
:trumedia_preset = 0 #какую использует предустановку, 0 — music ,1 — movie, 2 — podcast
:trumedia_igain_int = 1.000
:trumedia_igain_ext = 1.000
:vol_int_enable = 0 #регулирования объема
:trumedia_skip = 0

Tru Bass — строка эмулирует вертикальный басовый звук

srs_mus_int:
:wowhd_igain = 0.600 #усиление звука на входе
:wowhd_ogain = 1.000 #усиление звука на выходе
:wowhd_trubass_enable = 0 #включение отключение 0-1
:wowhd_trubass_min = 0.000 #минимальная частота воздействия в герцах
:wowhd_trubass_window = 1.000 #размер
:wowhd_trubass_slide = 0.000 #насколько будет сглажен
:wowhd_trubass_slide_udef = 0.000 #практически делает то же самое, что и slide
:wowhd_trubass_compressor = 0.000 #компрессор, срезает лишние частоты, возвышающие выше 0дб
// ALIAS :wowhd_trubass_size // TruBass Speaker Size
:wowhd_trubass_freq = 500 #основная частота на которую воздействует — частота
:wowhd_trubass_analysis = 300 #размер анализа — частота
:wowhd_trubass_sa_enable = 1 #включение отключение сплит анализа
:wowhd_trubass_mode = 0 #Тру басс мод (0 — моно, 1 — стерео)
:wowhd_xover_enable = 1 #частота среза фильтра для динамика
:wowhd_xover_order = 4 # степень воздействия (максимум — 6)
:wowhd_xover_freq = 750 #частота (рекомендую 250)
:wowhd_hpf_enable = 1 #Hi pass Фильтр — обрезает частоты ниже установленной фильтра
:wowhd_hpf_order = 4 #степень воздействия (максимум — 6)
:wowhd_hpf_freq = 250 #частота
:wowhd_srs_enable = 0 #SRS3D — создает ощущение 3D
:wowhd_srs_space = 0.700 #воздействие на правый и левый канал
:wowhd_srs_center = 0.500 #воздействие по центру
:wowhd_srs_mode = 1 #(0-моно, 1-один динамик, 2-стерео, 3-экстрим
:wowhd_srs_speaker = 0 #тип звука (0 — динамик, 1 — наушники)
:wowhd_focus_enable = 0 #включение отключение фокуса
:wowhd_focus = 0.170 #Степень воздействие фокуса
:wowhd_definition_enable = 0 #четкость звука 0-1
:wowhd_definition_min = 0.000 #минимальная степень воздействия
:wowhd_definition_window = 0.500 #размер
:wowhd_definition_slide = 0.000 #
:wowhd_definition_slide_udef = 0.100 #
:wowhd_widesur_enable = 0 #сключает расширение стерео образа
:wowhd_widesur_igain = 1.000 #усиление
:wowhd_widesur_centerboost = 0.500 #усиление по центру
:wowhd_widesur_separation = 0.500 #степень смешивания звука
:wowhd_skip = 0 #пропуск эффектов или нет 0 нет, 1 да

Источник

Оцените статью