Инструменты для работы с аудио в Android-разработке

Audio Processing in Android Development

За время работы Android-разработчиком, мне пришлось столкнуться с нетривиальной задачей: заказчика интересовала возможность обработки голоса (voice processing) в реальном времени - "на лету".

Увлекаясь музыкой, в студенческие годы мне доводилось экспериментировать с обработкой аудио и работать с различными аудио-редакторами на PC. Голос, по сути, является таким же звуком, как и звучание музыкальных инструментов. Следовательно, нужен инструмент для обработки аудио-сигнала, который можно было бы полноценно использовать при разработке своего Android-приложения.

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

К сожалению, мне не удалось найти готовое решение для работы непосредственно с голосом. Однако во время своих поисков я познакомился с некоторыми библиотеками и SDK, работающими с аудио-данными, о которых хотел бы рассказать. Язык программирования Java, используемый для Android-разработки, не позволяет эффективно работать с аудио-контентом, поэтому практически во всех случаях придётся иметь дело с JNI и кодом, написанным на C++.

SoundTouch Audio Processing Library.

Библиотека является Open-Source проектом и не является SDK для какой-либо конкретной платформы. Разработчики заявляют, что их инструмент будет работать в средах Windows, Mac OS, Linux & other *nixes, Raspberry Pi, Android, Apple iOS.

Проект представляет из себя C++ библиотеку с весьма ограниченным функционалом. Разработчику из инструментов предлагается лишь ускорение/замедление темпа и повышение/понижение тона. В случае Android-разработки, как было сказано выше, придётся иметь дело с JNI – имплементировать C++ код в проект.

Ещё одной особенностью является то, что библиотека работает только с файлами. Исходный WAV-файл подвергается обработке, результат которой записывается в другой файл. Чтобы услышать результат применения эффектов, необходимо воспроизвести полученный в результате файл. Обработки звука "на лету" нет.

Bongiovi DPS SDK.

  • sdk.bongiovidps.com
  • Исключительно платная лицензия. Стоимость, впрочем, на сайте не указывается. Заявленная фраза "Please contact us to discuss pricing" предполагает относительно гибкое ценообразование. Без лицензии, в демо-режиме, SDK будет работать 10 минут.

Продукт является полноценным SDK с возможностью использования как в iOS, так и в Android-проектах. Представляет собой инструментарий для тех, кто хочет сделать свой Audio Enhancer.

Что такое Audio Enhance? Это real-time обработка воспроизводимого файла: применение всем знакомых аудио-эффектов типа "на улице", "в концертном зале" и прочих, эквалайзер, динамическое управление громкостью и так далее. Если обобщить, то инструменты такого направления имеют цель сделать воспроизводимый звук сочнее. Соответственно предполагается использование качественной акустической системы (или наушников).

Сравнивая с инструментами, с которыми мне приходилось иметь дело в плане аудио-обработки, я бы отнес данный SDK к семейству DSP-процессоров. Как, например, для широко известного в прошлом mp3-плеера WinAmp существовало множество DSP-плагинов. У Вас есть возможность разработать свой собственный.

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

Однако никаких pitch-shifter'ов, вокодеров или других преобразователей звука – и голоса в частности – в этом SDK нет.

Essentia.

Open-Source C++ библиотека для аудио-анализа. Это не фреймворк – скорее, сборник алгоритмов, обёрнутых в кросс-платформенную библиотеку, совместимой с Linux, Mac OS X, Windows, iOS и Android.

Она позволяет досконально разбирать аудиофайл, получая множество специфической информации и характеристик, о назначении половины которых можно только догадываться. В числе прочих: beat detection, BPM (ударов в минуту), определение начала ритма, смены ритма, танцевальность трека (danceability), динамическая сложность, сегментация, тональность, размер, преобладающая мелодия и шаг, аккорды, спектральные характеристики (спектральные пики, сложность, контрастность, диссонанс), временные характеристики (продолжительность, громкость и куча прочих), статистические характеристики (от мат. ожидания до эксцесса и асимметрии). В общем, исчерпывающая информация об аудиофайле.

Как это всё может пригодиться? Я полагаю, что вся эта информация может использоваться сложными аудио-редакторами, как, например, Sony Sound Forge или Adobe Audition. Полноценный аудио-редактор такого класса на мобильном устройстве – вещь, пожалуй, не востребованная. Привычнее заниматься монтажом аудио, сидя перед монитором персонального компьютера. Разработчики, кстати, предлагают использовать библиотеку в связке с Python'ом. И, в случае, если вы разрабатываете свой аудио-редактор, тот же спектральный анализ, к примеру, понадобится Вам для выполнения процедуры шумоподавления.

Если говорить об использовании библиотеки в Android-разработке, также придётся использовать JNI и вручную имплементировать C++ код в проект.

Superpowered Audio SDK.

  • superpowered.com
  • SDK бесплатное для разработки приложений, распространяемых через аппстор, в других случаях условия нужно узнавать дополнительно. Технология Superpowered HLS стреаминг частью SDK не является и бесплатно не предоставляется.

Сборник С++ библиотек для обработки аудио "на лету".

SDK является кросс-платформенным (iOS, Android и OSX) и позиционируется разработчиками, как самый быстрый инструмент для аудио-процессинга. Более того, обещается экономное отношение к аккумулятору и прочие приятные моменты.

Разработчику предлагается применение различных эффектов к аудио: реверберация, эхо, компрессор, limiter, flanger, gate, микшер. В общем, эффекты, знакомые людям, которые увлекаются игрой на гитаре или занимались аудио-монтажом. Присутствуют также инструменты для анализа источника аудио. Инструмент частично можно использовать и для обработки голоса. Внутри пакета SDK присутствует документация и примеры приложений.

Что касается разработки проекта под Android, по заявлению разработчиков, полноценной интеграции в Android-проект на данный момент нет. Придётся применить немного магии при работе с системой сборки проекта Gradle. Впрочем, в документации об этом рассказывается.

SpectrumWorx SDK.

Хотелось бы вспомнить еще о таком инструменте, как SpectrumWorx SDK.

Для ознакомления на сайте присутствуют демо-записи с применением того или иного эффекта – Вы можете прямо сейчас оценить, как что будет звучать.

Разработчикам доступны trial-версии SDK. Для получения таковой на сайте необходимо заполнить форму и отправить Request. Мне, к сожалению, ответ на мой запрос так и не пришёл.

Выше перечислены основные инструменты, которые мне попались в процессе поиска решения. Список, конечно же, можно дополнить и расширить. Я написал лишь о том, с чем успел познакомиться сам. Искренне надеюсь, что кому-то может пригодиться информация.

Спасибо за внимание.

Связаться