- Denoiser — повышение разборчивости аудиосигнала несмотря на внешний шум;
- Noise Around — одновременное прослушивание медиаконтента и звуков окружающего пространства;
- Natural — в котором плеер адаптирует выходной сигнал не только к АЧХ конкретных наушников, но и персональным особенностям слуха пользователя.
Версия для iPhone
Естественно, эти возможности были бы невозможны без новаторского алгоритма обработки сигнала. О его создании и пойдёт речь.
От слуховых аппаратов к медиаплеерам
В начале 2014 года дружная команда разработчиков трудилась над выпуском приложения Petralex Hearing Aid, реализующего цифровой слуховой аппарат на базе смартфона/планшета. Изначально приложение было адресовано людям, которые вынуждены (но стесняются) носить слуховой аппарат. Ведь гарнитуру смартфона за слуховой аппарат никто принять не подумает. К тому же у смартфона/планшета есть вся аппаратная часть (как и у настоящего – и весьма недешевого! – цифрового слухового аппарата). Дело лишь за «софтом», способным в реальном времени обрабатывать аудиосигнал в соответствии с персональной аудиограммой пользователя (характеризующей нарушения слуха), снятие которой – тоже дело «софта».
Так вот, в самый жаркий период окончания работ над Petralex два человека из команды разработчиков, после тяжёлого трудового дня, ехали в метро. И один дал товарищу наушник – послушать песенку с забавным содержанием. Правда из-за шума (кто ездил в метро, знает!) товарищ не разобрал ни одного слова! И сгоряча предложил идею: анализировать окружающий шум и обрабатывать полезный сигнал так, чтобы повышать его разборчивость (несмотря на внешний шум!).
Идея друзей вдохновила. К дальнейшему обсуждению подключились математики – с целью создать нужный алгоритм обработки сигнала (используя, в том числе опыт, полученный с Petralex).
Битва над алгоритмом
Самой главной проблемой была неординарность задачи – ни одной публикации по данной тематике найти не удалось! В первый момент разработчики вообще не знали об имеющихся аналогах. Возможно поэтому, решили задачу гораздо более оригинальным способом. А о похожих решениях (по материалам западных конференций) узнали уже в момент оформления собственного патента.
Но это было позже. Поначалу алгоритм обработки сигнала был ещё очень сырой. Ни о каком «реал-тайме» не шло речи вообще. Впрочем, для начальной отладки это нормально – целью было заставить работать программный модуль в принципе, чтобы получить желаемый результат.
Первый прототип приложения, готовый к установке на телефон, вышел спустя пять месяцев после возникновения самой идеи – в июне 2014 года. И сразу же выявились его недостатки – математический алгоритм обработки сигнала оказался очень «тяжёлым»!
Ведь основная проблема при обработке звука в режиме реального времени – требуется простой и эффективный алгоритм. Чтобы мобильный телефон успевал обрабатывать довольно стремительный поток данных (44.1 кГц в нашем случае). Обычно, в обработке речи ограничиваются частотами 8 или 16 кГц. Но поскольку в нашем приложении обрабатывается и музыка, то частота должна быть выше.
Так вот, получившийся алгоритм отказывался работать на iPhone 4. Пришлось разработчикам вновь засучивать рукава и оптимизировать код на Си. В результате удалось снизить загрузку процессора с 55% до 35% на iPhone 5. На тот момент этого оказалось достаточно (хотя сейчас ребята трудятся над ещё большим снижением загрузки CPU, чтобы приложение запускалось на любом «захудалом Android»).
Искания «меломанов»
Тестирование плеера с обновлённым алгоритмом показало себя замечательно. Первый режим (получивший название Denoiser) был готов. Однако дальше опять встретились трудности. К примеру, какую степень быстроты реакции алгоритма на изменения окружающего шума выбрать? Если сделать алгоритм очень «чувствительным», то звук плеера будет изменяться стремительно – при смене внешней шумовой обстановки. С одной стороны это хорошо – если шум возник резко и остаётся на неизменном уровне длительное время. Но для «внезапных» шумов (типа стука молотка, резких ударов, вообще любых единичных «возмущений») высокая чувствительность плеера не подходит. С другой стороны очень медленная реакция тоже плохо – слушатель будет вынужден долго ожидать, пока алгоритм плеера адаптируется к новой обстановке. «Золотую середину» в настройках алгоритма разработчикам приходилось кропотливо выбирать вручную – методом проб и ошибок.
Ещё одной проблемой была необходимость учитывать специфику конкретной аппаратуры (т.е. собственный уровень шума микрофона гарнитуры). На этот шум алгоритм обработки вообще не должен реагировать! Однако беда в том, что у каждого телефона свой, «индивидуальный» уровень шума. Все это нужно было как-то учесть в конечном варианте приложения. Хорошо ещё, что звуковая система iPhone характеризуется довольно малым уровнем шума.
На данном этапе разработки приняли решение считать уровень собственных шумов для всех «яблочных» устройств одинаковым. Хотя в дальнейшем (и сейчас эта работа продолжается) ставится задача «научить» плеер не реагировать на голос пользователя, который также фиксируется микрофоном телефона – наряду с внешними шумами.
На этом, математический алгоритм обработки звука был закончен. Помимо режима Denoiser («без шумов») разработчики придумали функции одновременного прослушивания музыки и окружающих звуков (например, в метро – полезно слышать названия передаваемых станций).
Но особой гордостью разработчиков стал режим Natural («натуральное звучание»). В этом режиме достигается сглаживание искажений, вносимых в аудиосигнал аппаратной частью воспроизводящего устройства, а также индивидуальными особенностями слуха пользователя (исключая случаи явного нарушения слуха).
Эффект Natural также достигается благодаря «хитрому» математическому алгоритму обработки аудиосигнала. Его суть заключается в оценке АЧХ воспроизводящего устройства относительно субъективного порога слышимости в тишине (для каждого пользователя этот порог свой) – и ввода поправочного коэффициента. На практике это означает, что потратив пару минут на настройку плеера (с помощью встроенной процедуры определения порога слышимости), можно наслаждаться живой окраской музыки. И почувствовать себя в настоящем концертном холе!
Ещё немного радужных красок и…
Математический алгоритм плеера был отлажен. Но для его превращения в полноценное мобильное приложение требовался дружелюбный интерфейс. И вновь появились трудности. Разработчики очень долго мучились над синхронизацией рисования анимации (в частности спектрума – чтобы он не «дёргался» и совпадал с обновлениями экрана мобильника). Класс CADisplayLink нигде явно не описан. То есть документация конечно есть. Но попробуй найти конкретные указания, что вот «именно это очень важно и нужно»!
Следующей «ступенькой» к успеху стала борьба с интерфейсом. В частности в iOS при включении микрофона (когда ваше приложение свёрнуто) отображается красная полоса. Микрофон можно выключить вызовом одной функции, но полоса при этом не пропадает. Чтобы её убрать приходится делать кучу ненужных, да еще и часто мешающих работе, манипуляций (останавливать AudioGraph и перезапускать снова, что не есть хорошо – эту остановку можно услышать на слух). Ну, и общей загвоздкой было отсутствие простеньких приложений (типа «Hello world», работа с БД, работа с Аудио, Видео и т.д.). Хотя в целом уже ничто не могло остановить победного шествия приложения!
Вот вкратце история создания UrbanDenoiser Player – первого в мире плеера с уникальными режимами воспроизведения. Результат многомесячной работы дружной команды специалистов теперь доступен каждому – плеер распространяется свободно!
PS: Из последних новостей — приложение UrbanDenoiser Player стало победителем Европейского кубка разработчиков проводимого Microsoft, в категории B2С http://appcup.eu
Спасибо за внимание!
Комментарии (30)
NeGO
16.06.2015 13:12+1Планируется ли версия для андроид?
glazik
16.06.2015 13:26-2В андройде есть большая проблемма с Latency (http://superpowered.com/latency/)
Звуковые драйвера андройда не позволяют обработать звук с микрофона и выдать его на наушники быстрей чем 10 ms. И именно это задержку и ниже наш мозг перестаёт замечать. Так, что думаю пока гугал не сделют шаг в этом направлении, рынок програм основаных на обработке звука в реальном времени на андройде, развиваться не будет.
Хотя, возможно, у ITforyou есть како-то алгоритм «угадывающий» искажения на перёд
NikitOS9
16.06.2015 15:30-2>уникальный медиаплеер…
любая обработка исходника и будет уже не битперфект на выходе, при этом еще говорить о повышении качестве музыки — слишком уж рекламно,
шумодавы для разговоров еще подходят, но не для музона, хотя в случае прослушки mp3 в затычках это все не важно имхоNewbilius
16.06.2015 15:33В каких наушниках и на какой громкости должен фанат идеального звука слушать музыку в изначально зашумлённом помещении, транспорте и т.п.?
NikitOS9
16.06.2015 15:44-5еще важны вопросы на каком железе и какой аудио формат,
фанату нужно самому слушать и сравнивать, айфон, ведроид и тд… точно не для фанатов качественного музона
artoym
16.06.2015 15:35+1Всю статью не оставляло ощущение, что автор никогда-никогда-никогда не слышал словосочетание «активное шумоподавление».
Интересно насколько хорошо он работает — ведь обработка сигнала требует времени, а это критично.SADKO
16.06.2015 18:12Автор пишет вообще о другом, активный шумодав даже на айфоне врядли получится.
А вот подкручивать эквалайзер в зависимости от окружающих шумов вполне себе можно.netmaxed
17.06.2015 08:30+1ах вот оно что!
а то я статью прочитал и вообще ничего не понял :)
а почемуактивный шумодав даже на айфоне врядли получится
?artoym
17.06.2015 08:48Айфон крутой и быстрый, но даже он не успеет получить сигнал, обработать и выдать свой.
То есть здесь просто те частоты на которых внешний шум в плеере увеличиваются? Всё?
SystemXFiles
16.06.2015 15:37Установил.
Понравилось то, что можно слышать окружение, для меня важно это в условиях города, если еду на велосипеде (сейчас так понимаю задержки уже меньше не сделать, ибо они ощутимы, что немного беспокоит, т.е. если машина резко появится рядом, то пару миллисекунд могут быть решающими).
Небольшие замечания и предложения:
- Плейлисты показываются без учета вложенности сразу все в корне, это отталкивает от использования вашего плеера на постоянной основе.
- Определение слухового порога не позволяет сбалансировать звук верно, потому есть мысль после определения уровня на обоих ушах, дать возможность отрегулировать баланс вручную для каждой частоты, дабы каждая частота начала звучать одинаково на обоих ушах (по ощущениям)
- Статистический анализ шума это хорошо в транспорте, но хотелось бы, чтобы плеер мог реагировать чуточку быстрее для подавления некоторых неожиданных относительно длительных шумов (добавить настройку к примеру).
- Вообще иметь возможность тонкой ручной настройки работы плеер, в том числе алгоритма. Так сказать для любителей покопаться в конфиге.
SystemXFiles
16.06.2015 17:37Заметил, что в стандартном плеере iOS звук получается словно чище (всякие приблуды в настройках выключены), а в вашем немного заглушенный (даже если выключить в плеере все). Частично исправилось это дело через настройку слухового профиля с той громкостью наушников, с которой обычно слушаю музыку (надо акцентировать внимание на этом пользователям, ибо разница есть). Звук значительно лучше, но стандартный плеер чище звучит все равно.
Не знаю с чем это связано, но как-то грустно стало. Вроде натуральный звук должен быть, а выходит обратное.
ITforyou Автор
16.06.2015 19:33Спасибо за замечания. Учтем в будущих версиях. Не хотелось запутывать пользователя дополнительными настройками, хотя мысли такие были.
mrThe
16.06.2015 16:47Так вот, получившийся алгоритм отказывался работать на iPhone 4. Пришлось разработчикам вновь засучивать рукава и оптимизировать код на Си. В результате удалось снизить загрузку процессора с 55% до 35% на iPhone 5
Требуется iOS 8.0 или более поздняя версия.
Я так понимаю, с iphone4 так и не получилось? :(ITforyou Автор
16.06.2015 17:12+1У iOS 7 другой audio api и пришлось бы поддерживать несколько версий приложения.
entze
16.06.2015 17:17Тестировал одно из приложений «заточенное под наушники». Предлагалось выбрать производителя и модель и в демо режиме сравнить с «чудо-фичей» и без. Затем купить «чудо» через in-app.
Конечно, с «чудом» звук был значительно лучше. Вот только «без чуда» звук был значительно хуже звука из стандартного плеера. Т.е. Разработчики сознательно портили звук.
По поводу активного шумодава — разве микрофон не должен быть рядом с ушами?SADKO
16.06.2015 18:09+1Должен и не один, но здесь как я понял нет активного подавления шума, а скорее динамическая частотная коррекция сигнала исходя из спектрального состава окружающих шумов…
ilyak
16.06.2015 18:18А что если телефон в кармане лежит? В микрофон будет попадать много громкого шуршания, что будет только портить звук.
На единичные громкие звуки программа никак не реагирует, получается?
В общем, выпускайте андройд версию скорей, пока не потрогаешь не поймешь.ITforyou Автор
16.06.2015 19:32По умолчанию предполагается использование микрофона гарнитуры, который находится около лица. В плеере есть возможность переключения микрофонов — с гарнитуры на встроенный в телефон.
SystemXFiles
16.06.2015 19:36Еще бы хорошо автоматический выбирать, если подключены например наушники и в них нет микрофона, то выбирать телефон.
crwin
16.06.2015 20:29Из замеченного на iOS 8.4 (последняя бета) — красная полоска имеется.
В остальном же качество услышенного меня даже расстроило. Возможно для некоторых типов музыки и подходит, но для электроники это полный атас — всё булькает, сцена то отдаляется, то приближается, то высокие, то низкие. Мне лично не подходит с моим кейсом, но использовал, если бы это были не_динамические преднастройки, например как это реализовано в плеере Radsone.
ganzmavag
17.06.2015 16:46Попробовал на Windows Phone. Даже без учета фич, получился самый красивый плеер на этой операционке. Хотелось бы только воспроизведение музыки по папкам, а то библиотека не всегда корректно работает. Ну и, конечно, работы в фоне.
По поводу теста слуха — сделайте поплавнее увеличение громкости. А то задержки толком нет, только нажал, что слышишь один тон — уже другой слышно. Разница получается в скорости реакции, а не в реальной слышимости.
Идея просто очень понравилась. У меня на одном ухе завал по ВЧ, очень здорово будет, если удастся с помощью вашего алгоритма нормально начать музыку слушать, как она должна быть. Спасибо огромное)
grozaman
С наушниками-ёлочками проблема исчерпывает себя на корню :)
Но работа проведена интересная, куча народу ходит в обычных AirPods. За дизайн отдельный плюс.
o_nix
А бывают ли ёлочки разных размеров? И где вообще их именно брать?
SLY_G
Впервые от вас узнал про такие наушники, как «ёлочки». У них улучшенная звукоизоляция?
grozaman
Они на любителя, так скажем. То есть некоторым не нравится такое глубокое «проникновение» беруши в уши.
Но звукоизоляция отличная, что одновременно и плюс, и минус. Плюс — ну тут объянять не надо, а вот минус так это то, что можно даже не услышать сиренящую машину переходя через дорогу.
ayakovlev
Теперь надо для ёлочек написать программу, которая будет из внешнего шума выделять важные звуки и транслировать их в наушник.
Например, гудки автомобилей, объявления и речь, начинающуюся только с вежливого обращения.