Доброго времени суток, уважаемые хабровчане.
В этой статье я хочу поделиться опытом работы с коммерческими решениями в области Acoustic Echo Cancellation (AEC).
Так уж сложилось, что работаю я мультимедиа-разработчиком в %CompanyName% и всё свое рабочее время (в перерывах между чтением хабры) посвящаю программному продукту %AppName%.
Сейчас куда ни плюнь – у всех есть свой мессенджер, да еще и со встроенными звонилками. А вот с эхом у многих проблемы. Не считая таких монстров как Skype и WLM, разумеется. У того же GTalk AEC оставляет желать лучшего… Но к этому мы еще вернемся.
Итак, всё началось на www.google.com, где я дрожащей рукой вбил в строке поиска Acoustic Echo Cancellation Software… Стоп! Отмотаем назад.
Всё началось здесь – www.speex.org — довольно известный опенсорный аудио кодек. В SDK также входит и AEC engine. ИМХО лучших бесплатных решений я не нашел. В «интернетах» много сорцов, призванных искоренять акустическоезло эхо, которые больше похожи на «лабораторную работу» по информатике – и написано криво, и не работает.
Плюсы:
Один большой минус:
Вывод: отличное начало для небольшого программного продукта. Благо и работоспособность неплохая, и документации в избытке. К тому же ответы на вопросы можно получить здесь — lists.xiph.org/pipermail/speex-dev — сам обращался не один раз.
…где я дрожащей рукой вбил в строке поиска Acoustic Echo Cancellation Software. Просмотрев сайты и выбрав заинтересовавшие, я приступил к работе. С каждой компанией связь происходила следующим образом:
От момента отправки заявки до получения SDK у меня в среднем уходило 3-4 дня. Сказывается разница во времени, да и неторопливость некоторых менеджеров по продажам. Дальнейшие переписки с дев-саппортом обычно протекают быстро.
Основные требованиями, которые я выдвигал в своих «манифестах», это:
Компания позиционирует себя как «лидер в области встроенных решений». Но они практикуют и софтварный подход. На мой запрос ответили быстро и честно: «На данный момент мы не можем предоставить AEC solution, который бы удовлетворял Вашим условиям». Ну и спасибо, что не стали тратить своё и моё время. Cheers.
Тоже получил отказ. Компания специализируется на BT устройствах.
«Our SoundClear solution with echo cancellation and noise reduction is primarily targeted at Bluetooth enabled hands-free accessory products».
Однако пожелали удачи и попросили «иметь их ввиду, если вдруг что…». Спасибо!
Первый успешный опыт. Компания находится где-то в Израиле, так что часовые пояса не мешали, переписка шла быстро.
Что в коробке: статическая либа, хидер, 2 исходника aec_example и noise_example и подробная инструкция по интеграции с описанием API. Мне выдали версию со «сроком годности» в один месяц. Уложился.
В целом мне понравился подход – удобные функции, огромный диапазон настроек (агрессив-левелы, задержки в сигналах и т.п.). Но эту же гибкость можно отнести и к минусам: часы, дни, недели прошли пока я более ли менее смог отстроить систему до удовлетворительного качества. Но по результатам тестирования на нескольких машинах чуда так и не произошло.
Плюсы:
Минусы:
Вывод: дорого и не практично. Платить килобаксы за решение, которое справляется в менее чем 50% случаев, не представляется разумным. Но ребята развиваются, и в данный момент я работаю с новой версией их продукта. Поглядим.
Нью-Йоркская компания, основанная в 1986 году – специализируется на хардварных и программных решениях в области видео/аудио процессинга.
Очень настороженно отнеслись ко мне. Всё порывались позвонить, однако я убедил их, что общение по почте предпочтительнее. Пришлось несколько раз переподписывать NDA – то должность не там указана, то подпись не очень видно и т.п. Еще и на работу они выходили в 4 утра по местному времени, но я уже спал.
Итак, SDK получил. Господи боже мой. DLL, либа и хидер из 3х(!!!) функций – инициализация и обработка speaker/mic фреймов. При инициализации передается структурка с одним полем – частота дискретизации. Первая мысль была: «ну раз так – значит у них внутри все работает». Ан нет. Качество просто ужасное – зря потратил время. К тому же было странное ограничение – AEC работает только минуту после инициализации, потом выдает пустые фреймы. Тестировать было очень тяжело – запуск/проверка/перезапуск и т.д. Из плюсов можно отметить только цену, которая на несколько килобаксов меньше, чем у Solicall’а и пожизненную техническую поддержку. Что поддерживать спрашивается?
Вывод: не зачтено.
Подобрались к самому вкусному. Еще бы – 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).
В этой статье я хочу поделиться опытом работы с коммерческими решениями в области 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. Просмотрев сайты и выбрав заинтересовавшие, я приступил к работе. С каждой компанией связь происходила следующим образом:
- Отправляешь запрос на мыло вроде sales@...com с кратким описанием своей компании, её целей и информацию о количестве пользователей
- Присылают NDA (Non-disclosure agreement), которое нужно
невнимательно прочитать и подписать - Получаешь SDKу с документацией, иногда даже с тестовыми аппликухами
- Возможно, рвёшь на голове волосы – «Почему же ничего не работает»
От момента отправки заявки до получения 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).