Улучшаем качество звука на планшетах Android с процессорами Intel Atom с помощью API Dolby Digital
Заключительный фактор — качество звука, здесь за него отвечает встроенное звуковое оборудование Dolby Digital Plus*. Аппаратные ресурсы Dolby предоставляют несколько важных компонентов, среди которых отметим следующие: Volume Maximizer — увеличение громкости звука без искажений; Audio Optimizer — существенное улучшение четкости звука с помощью проприетарных алгоритмов обработки звука Dolby. Также отметим, что поскольку решение Dolby — аппаратное, оно не вызывает добавочной нагрузки на ЦП. При использовании оно практически не расходует вычислительные ресурсы системы. Понятие «качество звука» как таковое носит в значительной степени субъективный характер, особенно в том, что касается уже записанного содержимого, но применяемый здесь кодек Dolby Digital Plus содержит целый набор технологий, которые стоит рассмотреть более подробно.
Технология аудиокодека Dolby Digital Plus
Звуковой кодек Dolby Digital Plus включает ряд технологий обработки звука, которые воздействуют на звуковое содержимое, воспроизводящееся на мобильном устройстве. Конечная цель кодека состоит в повышении субъективного качества звука. Следует отметить несколько технологий, связанных с воспроизведением музыки.
Volume LevelerVolume Leveler непрерывно отслеживает воспроизводимый звук с помощью «психоакустической модели восприятия громкости» (в терминологии Dolby), которая определяет, насколько громким звук будет казаться человеку. Это значение используется для динамической регулировки уровня громкости, чтобы обеспечить одинаковую с точки зрения слушателя субъективную громкость. Одновременно применяется еще одна технология, Auditory Scene Analysis; ее цель — избежать неверной регулировки звука, в результате которой могут быть усилены звуки и моменты мелодии, намеренно сделанные тихими. Специалисты Dolby заявляют, что Volume Leveler может независимо регулировать оба звуковых канала и даже отдельные частотные диапазоны, чтобы избежать эффекта «накачки» и «вибрации» при обработке звука.
Volume MaximizerОдно из важных преимуществ кодека Dolby Digital Plus — это модуль Volume Maximizing, обеспечивающий достаточно громкий звук из маленьких динамиков, которыми обычно оснащаются мобильные устройства. После обработки звука в Volume Leveler модуль Maximizer увеличивает амплитуду звука на достаточно значительную величину, вплоть до 12 дБ. Чтобы избежать чрезмерного усиления сигнала, которое может привести к обрезанию частотного диапазона, Volume Maximizer использует «упреждающий ограничитель». Ограничитель сочетает усиление сигнала с многодиапазонным сжатием для увеличения громкости звука без искажений.
Audio OptimizerЧастотный диапазон динамиков, которыми оборудуются мобильные устройства, зачастую далек от идеала. Другими словами, для разных частот может достаточно сильно различаться уровень звука. Из-за этого прослушиваемая музыка может звучать ненатурально или приглушенно. Технология Audio Optimizer применяет набор фильтров для обхода возможного несовершенства динамиков. Эти фильтры индивидуально подбираются для каждой модели устройства. Конечная цель — выдать естественный, сбалансированный звук с одинаковым уровнем воспроизведения всех частот, что для большинства устройств на практике означает повышение уровня низких и высоких частот.
Audio RegulatorЗаключительный этап обработки музыки, интересующий нас как слушателей — это Audio Regulator. При увеличении громкости выходного звука на мобильных устройствах могут возникнуть искажения. Этот эффект может быть вызван самими усилителями, перегрузкой динамиков, резонансом или «треском» на смартфонах и планшетах. Такое поведение индивидуально для каждого устройства, оно может различаться для разных частот. Regulator применяет многодиапазонное сжатие с учетом индивидуальных особенностей каждого конкретного устройства. И Audio Regulator, и Audio Optimizer калибруются в соответствии с уникальными особенностями каждого типа устройств. Кроме того, для сохранения тембра звука при сжатии применяются ограничения. И наконец, Regulator зависит от громкости. Можно в меньшей степени задействовать управление искажениями или отключать его при невысокой громкости.
Почему звук важен на мобильных устройствах?
Планшеты и смартфоны все чаще становятся предпочитаемыми устройствами для просмотра и потребления развлекательного содержимого. Хорошее качества звука достаточно сильно влияет на общее восприятие развлекательных материалов. Недавно компания Parks Associates провела исследование (по заказу Dolby) с целью оценки важности высококачественного звука. Это исследование показало, что в большинстве случаев владельцы смартфонов придают некоторое значение качеству звука при выборе смартфона или планшета.
Тем не менее, после прослушивания звуковой демонстрации с устройства с улучшенным воспроизведением многие пользователи признали, что качество звука немаловажно для их мобильных устройств. После простой демонстрации технологии обработки звука Dolby Digital и вы с этим, скорее всего, согласитесь.
Использование API Dolby Audio в приложениях Android- Загрузите и установите API Dolby Digital в мобильное приложение по адресу developer.dolby.com.
- Получите инстанс объекта DolbyAudioProcessing. Это очень просто: достаточно вызвать GetDolbyAudioProcessing() из API Dolby.
- Создайте объект прослушивателя Dolby. Обычно объектом прослушивателя Dolby делается текущая Activity, чтобы упростить реализацию, но это может быть и отдельный класс.
Описание примера
Мне представилась возможность создать приложение для потоковой передачи звука, чтобы помочь независимым музыкантам в привлечении внимания и в демонстрации своей музыки. Важно было иметь устройство, пригодное для демонстрации как музыки, так и приложения. Поэтому по соображениям производительности, длительности работы от аккумулятора и качеству звука для этого проекта был выбран планшет Galaxy Tab 3 10.1 (86-разрядный). Музыкальное содержимое передается в виде потока из SoundCloud и воспроизводится с помощью объекта MediaPlayer, входящего в состав API Android.
Чтобы можно было использовать код на других платформах (WPF, Магазин Windows* и т. д.), я использовал стороннее средство разработки, Xamarin Android, позволяющее писать собственные приложения для Android на .NET C#. Тем не менее, поскольку Xamarin использует собственные API Java Android, этапы разработки в целом такие же, как при написании приложений Java.
Пример использования API DolbyЧто касается Android Activity, отвечающей за воспроизведение мелодий, я решил сделать ее прослушивателем API Dolby Digital. Это означает, что она отвечает за прослушивание и реагирование на API Dolby Digital с помощью методов, определенных в IOnDolbyAudioProcessingEventListener. Также я реализовал в Activity интерфейс IOnCompletionListener объекта MediaPlayer, сделав его единой точкой воспроизведения. Такой подход неплохо работает, но можно выделить эти интерфейсы в отдельные классы, если это требуется архитектурой вашего приложения.
Моя подпись класса выглядит так:
Я поддерживаю экземпляры обоих объектов MediaPlayer доступными в качестве переменных на уровне классов. Обратите внимание, что объект DoblyAudioProcessing следует сделать статическим и не следует удерживать более одного экземпляра этого объекта в приложении. Если требуется доступ к объекту DolbyAudioProcessing из Activity, следует предоставить доступ к нему с помощью одноэлементного класса или какого-либо типа глобальной ссылки.
Для инициализации обработки звука Dolby я создал вспомогательный метод InitAudio(), чтобы безопасно получить ссылку на объект DolbyAudioProcessing. Поскольку по прежнему необходима совместимость с другими устройствами, этот метод непригоден для устройств, не оборудованных кодеком Dolby. При запросе объекта обработки я также задаю режим обработки Dolby Digital. В этом случае я выбрал режим музыки, предназначенный для повышения четкости звука, баланса и ощущаемой громкости. Улучшения звука заметны при использовании встроенных динамиков устройства, наушников или линейного выхода на внешнее звуковое оборудование.
И наконец, я проверяю и сохраняю состояние обработки Dolby, когда действие запускается, и восстанавливаю состояние, когда наше приложение работает в фоновом режиме или закрывается. Оборудование Dolby Digital влияет на весь звук, воспроизводящийся на устройстве, поэтому это очень важный шаг, и он легко осуществляется с помощью методов управления жизненным циклом действия onResume() и onPause().
API SoundCloudAPI SoundCloud позволяет создавать приложения, использующие всю функциональность веб-сайта SoundCloud. HTTP-запросы отправляются к набору URL-адресов конечных точек для запроса информации и выполнения действий. Работа с API SoundCloud хорошо документирована, но, поскольку сам этот API достаточно сложен, в нем поначалу может быть непросто разобраться. Сначала следует изучить документацию REST. Самый простой способ начать работу — использовать оболочку API Java, доступную на портале GitHub; тем не менее я опишу процесс внедрения SoundCloud вручную. Нужно создать идентификатор клиента SoundCloud, который является уникальным идентификатором для вашего приложения. Это следует делать при взаимодействии с другими API REST для доступа к общедоступному содержимому.
Воспроизведение содержимого SoundCloudРассмотрим процесс доступа к определенному исполнителю в SoundCloud, загрузки информации об альбоме, чтения отдельных мелодий и воспроизведения. Для этого мы будем взаимодействовать со службой RESTful SoundCloud и декодировать возвращаемые данные JSON.
Шаг 1. Создайте идентификатор клиента Как было сказано выше, этот идентификатор бесплатен, его можно создать здесь. Он будет выглядеть примерно так: 7de8bc189e5ba2ab12fa4223951fabb8.
Шаг 2. Найдите идентификатор исполнителя Нужно найти идентификатор пользователя исполнителя, чью музыку следует воспроизводить. Это можно сделать непосредственно на веб-сайте SoundCloud или с помощью API SoundCloud. Поскольку мы только изучаем API, я покажу способ быстро найти идентификатор вручную. Откройте страницу любого исполнителя непосредственно на сайте SoundCloud, щелкните Share, а затем Embed. В окне Code & Preview вы увидите тег iFrame. Внутри него вы увидите ссылку, которая будет выглядеть примерно так: https%3A//api.soundcloud.com/users/547647. Число — это нужный нам идентификатор исполнителя.
Шаг 3. Создание запроса для загрузки альбомов Сейчас мы создадим первый запрос к API SoundCloud. Начнем с адреса API, а затем соберем полный URL-адрес с помощью идентификатора исполнителя с шага 2 и нашего собственного идентификатора клиента с шага 1.
Переменная response является результатом применения метода GetUserPlaylists() на предыдущем шаге. Мы получим список объектов AlbumData (определенных ниже).
Шаг 6. Создание URL-адреса мелодии Скорее всего, вы предпочтете представить пользователям набор альбомов, чтобы они выбрали нужный, в ListView; я не буду подробно описывать создание пользовательского интерфейса. Ниже приведен код объекта передачи данных AlbumData. Обратите внимание, что внизу он содержит список объектов TrackData, представляющих отдельные мелодии. К счастью, данные, использованные для заполнения объекта TrackData, содержат URL-адрес для воспроизведения.
Шаг 7. Воспроизведение мелодии И наконец, воспроизведение звука с удаленного URL-адреса с помощью потоковой передачи по протоколу HTTP на платформе Android выглядит так:
Где myTrack — конкретный экземпляр TrackData мелодии, которую мне нужно воспроизвести.
Объекты передачи данных SoundCloudЗаключение и выводы
SoundCloudПриведенная выше информация послужит хорошим фундаментом для начала работы с SoundCloud. Если же требуется более глубокая реализация, например отправка или управление содержимым, потребуется создать дополнительные объекты передачи данных и убедиться, что данные в вашем приложении являются синхронными с SoundCloud. Если вы разрабатываете программы на Java, то имеет смысл заглянуть в Android Sharing Kit.
Dolby Digital и SoundCloudВ службах потоковой передачи звука распространена проблема, связанная с неодинаковым уровнем звука у разных файлов. Это никак не повлияет на предоставление службой содержимого, но очень хорошо, если API Dolby Digital нормализует громкость. Разница в уровнях становится особенно заметна при переключении между мелодиями разных исполнителей.
Android MediaPlayerОбъект MediaPlayer в API Android удобен для воспроизведения локального или потокового звукового содержимого, но его нельзя считать универсальным решением: он работает не всегда. При создании приложений для Android всегда следует проводить тестирование на как можно большем количестве устройств, причем это особенно важно, если речь идет об объекте MediaPlayer. Не следует надеяться на то, что он «просто заработает» на всех устройствах, даже если при тестировании все было идеально. Это особенно касается менее мощных устройств. Попробуйте использовать функции альфа- и бета-тестирования магазина Google Play или используйте службу тестирования, позволяющую запустить ваше приложение на самых разных телефонах и планшетах.
ПроизводительностьКак было сказано выше, будьте осторожнее с MediaPlayer, поскольку на маломощных устройствах он может не работать должным образом. Кроме того, обязательно оптимизируйте другие части вашего приложения, чтобы звук воспроизводился без перерывов. Всегда запускайте код, ожидающий веб-службы, отдельно от пользовательского интерфейса, применяйте такие методики, как повторное использование ячеек и View Holder в списочных элементах управления, чтобы снизить объем используемой памяти и повысить производительность. Полезные советы по оптимизации см. в документации Плавная прокрутка ListView.
УстройстваПланшет Samsung Galaxy Tab 3 10.1 оказался великолепным демонстрационным устройством, и мне очень понравилось улучшение звука, достигнутое аппаратной обработкой потокового содержимого кодеком Dolby Digital. Этот кодек доступен не на всех устройствах, но все равно имеет смысл интегрировать API Dolby Digital в ваши приложения Android. Реализовать такое решение можно очень быстро, при этом оно существенно улучшает четкость выходного звука.
Дальнейшие действияПланшет Samsung Galaxy Tab 3 10.1 по-прежнему весьма конкурентоспособен, но рынок мобильных устройств стремительно развивается. Скоро на рынке появятся планшеты с новыми четырехъядерными процессорами Intel Atom. Dell Venue* 8 7000 станет ведущим в своем классе устройством после выпуска в IV квартале 2014 года. Кроме того, оборудование Dolby Digital Plus довольно широко распространено. Компания Lenovo, крупный производитель мобильных устройств, выпускает несколько планшетов, оснащенных кодеком Dolby. Я недавно переключился на Lenovo S8-50f в качестве основного устройства для разработки на платформе Android. Это устройство оборудовано четырехъядерным SoC Intel Atom Z3745 архитектуры x86, 2 ГБ оперативной памяти и, разумеется, кодеком Dolby Digital Plus.