Search
Write a publication
Pull to refresh

AEC — опыт работы с коммерческими решениями

Доброго времени суток, уважаемые хабровчане.
В этой статье я хочу поделиться опытом работы с коммерческими решениями в области Acoustic Echo Cancellation (AEC).

Преамбула


Так уж сложилось, что работаю я мультимедиа-разработчиком в %CompanyName% и всё свое рабочее время (в перерывах между чтением хабры) посвящаю программному продукту %AppName%.
Сейчас куда ни плюнь – у всех есть свой мессенджер, да еще и со встроенными звонилками. А вот с эхом у многих проблемы. Не считая таких монстров как Skype и WLM, разумеется. У того же GTalk AEC оставляет желать лучшего… Но к этому мы еще вернемся.

Фабула


Итак, всё началось на www.google.com, где я дрожащей рукой вбил в строке поиска Acoustic Echo Cancellation Software… Стоп! Отмотаем назад.

Всё началось здесь – www.speex.org — довольно известный опенсорный аудио кодек. В SDK также входит и AEC engine. ИМХО лучших бесплатных решений я не нашел. В «интернетах» много сорцов, призванных искоренять акустическое зло эхо, которые больше похожи на «лабораторную работу» по информатике – и написано криво, и не работает.

Плюсы:
  • Бесплатный и открытый
  • Удобен в интеграции
  • Отлично справился с Double-Talk на ноутбуках
  • Хорошо работает на конфигурациях с build-in speakers (ноутбуки)


Один большой минус:
  • Так и не заставил его нормально работать со standalone speakers. Тогда особенно проявляются все тонкости AEC’а – плавающее расположение микрофона относительно колонок, само положение колонок относительно друг-друга. А если еще и микрофон встроен в дешевенькую веб-камеру – тут почти совсем безнадежная ситуация.

Вывод: отличное начало для небольшого программного продукта. Благо и работоспособность неплохая, и документации в избытке. К тому же ответы на вопросы можно получить здесь — lists.xiph.org/pipermail/speex-dev — сам обращался не один раз.

…где я дрожащей рукой вбил в строке поиска Acoustic Echo Cancellation Software. Просмотрев сайты и выбрав заинтересовавшие, я приступил к работе. С каждой компанией связь происходила следующим образом:
  1. Отправляешь запрос на мыло вроде sales@...com с кратким описанием своей компании, её целей и информацию о количестве пользователей
  2. Присылают NDA (Non-disclosure agreement), которое нужно невнимательно прочитать и подписать
  3. Получаешь SDKу с документацией, иногда даже с тестовыми аппликухами
  4. Возможно, рвёшь на голове волосы – «Почему же ничего не работает»

От момента отправки заявки до получения SDK у меня в среднем уходило 3-4 дня. Сказывается разница во времени, да и неторопливость некоторых менеджеров по продажам. Дальнейшие переписки с дев-саппортом обычно протекают быстро.

Основные требованиями, которые я выдвигал в своих «манифестах», это:
  • C++ API
  • Поддержка DirectSound
  • Win/Mac платформы (Win обязательно, Mac приветствуется)
  • Широкий диапазон «эхо хвостов» (echo tail) – много пользователей, разные условия работы – адаптация к таким непостоянствам также обязательна


GAO Research

URL: www.gaoresearch.com

Компания позиционирует себя как «лидер в области встроенных решений». Но они практикуют и софтварный подход. На мой запрос ответили быстро и честно: «На данный момент мы не можем предоставить AEC solution, который бы удовлетворял Вашим условиям». Ну и спасибо, что не стали тратить своё и моё время. Cheers.

Acoustic Technologies

URL: www.acoustictech.com

Тоже получил отказ. Компания специализируется на BT устройствах.
«Our SoundClear solution with echo cancellation and noise reduction is primarily targeted at Bluetooth enabled hands-free accessory products».
Однако пожелали удачи и попросили «иметь их ввиду, если вдруг что…». Спасибо!

SoliCall

URL: www.solicall.com

Первый успешный опыт. Компания находится где-то в Израиле, так что часовые пояса не мешали, переписка шла быстро.
Что в коробке: статическая либа, хидер, 2 исходника aec_example и noise_example и подробная инструкция по интеграции с описанием API. Мне выдали версию со «сроком годности» в один месяц. Уложился.
В целом мне понравился подход – удобные функции, огромный диапазон настроек (агрессив-левелы, задержки в сигналах и т.п.). Но эту же гибкость можно отнести и к минусам: часы, дни, недели прошли пока я более ли менее смог отстроить систему до удовлетворительного качества. Но по результатам тестирования на нескольких машинах чуда так и не произошло.

Плюсы:
  • Грамотно написанный API
  • Большое количество настроек
  • Подробная документация
  • Отзывчивый, доброжелательный дев-саппорт


Минусы:
  • Слабо справляется с ситуацией Double-Talk
  • Так же слабо со standalone speakers
  • Большое количество настроек
  • Отстроенный на одной машине, показывает совершенно другие результаты уже на другой
  • Бесплатная тех.поддержка только в течение 21 дня после приобретения


Вывод: дорого и не практично. Платить килобаксы за решение, которое справляется в менее чем 50% случаев, не представляется разумным. Но ребята развиваются, и в данный момент я работаю с новой версией их продукта. Поглядим.

Vocal Technologies LTD

URL: www.vocal.com

Нью-Йоркская компания, основанная в 1986 году – специализируется на хардварных и программных решениях в области видео/аудио процессинга.
Очень настороженно отнеслись ко мне. Всё порывались позвонить, однако я убедил их, что общение по почте предпочтительнее. Пришлось несколько раз переподписывать NDA – то должность не там указана, то подпись не очень видно и т.п. Еще и на работу они выходили в 4 утра по местному времени, но я уже спал.

Итак, SDK получил. Господи боже мой. DLL, либа и хидер из 3х(!!!) функций – инициализация и обработка speaker/mic фреймов. При инициализации передается структурка с одним полем – частота дискретизации. Первая мысль была: «ну раз так – значит у них внутри все работает». Ан нет. Качество просто ужасное – зря потратил время. К тому же было странное ограничение – AEC работает только минуту после инициализации, потом выдает пустые фреймы. Тестировать было очень тяжело – запуск/проверка/перезапуск и т.д. Из плюсов можно отметить только цену, которая на несколько килобаксов меньше, чем у Solicall’а и пожизненную техническую поддержку. Что поддерживать спрашивается?

Вывод: не зачтено.

GIPS – Global IP Solutions

URL: www.gipscorp.com

Подобрались к самому вкусному. Еще бы – Yahoo, WLM, AOL – все используют этот хваленый Voice Engine от GIPS Google. Запросил у них SDK как раз через пару дней после объявления об их покупке Гуглом. Ответили дня через 4, зато без прелюдий – сразу выслали NDA. Причем практически молча – без фраз наподобие «yes, we can handle your environment» как делали все остальные. «Серьезные парни», — подумал я.

И вот «это» у меня. В коробке: шестимегабайтная статическая либа, куча хидеров и (о, да!) документация на 300 страниц. Ну и пару демок, которые показались мне не очень полезными.

Документация просто превосходная. Это, пожалуй, единственное о чем я могу так отозваться, потому как сам продукт в действии мне опробовать не удалось. А дело вот в чем: GIPS Voice Engine – это огромный SDK, с помощью которого можно с нуля накатать свой аудио/видео мессенджер абсолютно не заботясь о медийном ядре. Высокоуровневый API так и не позволил мне обработать аудио в своём движке на DirectSound.

То есть: весь GIPS VE можно разбить на 3 части – работа с железками, аудио/видео процессинг и передача в сеть. Раз за разом перечитывая 2 раздел по обработке аудио я так и не нашел функцию, которая позволила бы обработать 2 буфера. Всё что предоставляет GIPS это – CreateChannel, StartCall и т.п. AEC если и работает, то где-то внутри. Разочарование…

Вывод: отличное решение для тех, кто собирается создать конкурента Skype’у, WLM’у и т.п. Использовать какую-то часть продукта не представляется возможным, да и цена… А я даже и не спрашивал сколько все это стоит. Единственный вопрос который я задал в поддержку – «есть ли функция, позволяющая обработать 2 аудио/буфера и осуществить AEC». Но ответа так и не было получено.

Заключение


На данный момент рабочим вариантом для меня по-прежнему является Speex. Он показал лучшие результаты, причем бесплатно. Я все-равно продолжаю прорабатывать данный вопрос, ищу лучшие решения. Буду признателен, если кто-то поделится своим опытом в данном вопросе.
p.s. Цены на SDK я специально не стал озвучивать (не припомню что по этому поводу говорит NDA).
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.