Где-то с неделю назад моя хорошая знакомая в разговоре пожаловалась что хочет подучить английский язык, но к сожалению из-за графика работы не может посещать курсы. Было бы неплохо если бы был какой то переводчик-самоучитель на обычный телефон (читаем j2me-платформа). Будучи модератором одного из околомобильных форумов, я принялся прочесывать темы в поисках подобного решения. Нашлись несколько. Проблема была в том что:
1) вес от 350 кб и до 7-8 мегабайт
2) только текстовый перевод
3) только пара языков (рус.-анг.)
Как истинный джедай девелопер, я решил исправить ситуацию, произвести впечатление на девушку, заодно давно хотел поработать с голосом на j2me.
В качестве движка всего этого дела сразу же выбрал продукт от Корпорации добра.
Поставил себе ТЗ:
— минималистический интерфейс (два поля ввода, выбор языков с какого и на какой переводить)
— перевод текста
— голосовое озвучивание переведенного текста
— голосовой ввод
В качестве движка перевода текста взял исходники любезно предоставленные знакомым разработчиком Doctor Drive.
Генерацию голоса нашел на Хабре. Через несколько часов был готов прототип, переводящий текст и озвучивающий его.
Оставался самый интересный, и на первый взгляд нереальный этап — распознание голоса на j2me. Идею программной обработки я отбросил сразу как фантастическую, и начал изучать как распознают голос с помощью GoogleSpeechAPI. Информации по тематике достаточно, главная проблема — API принимает формат flac или speex. Ну что ж, иду качать библиотеки соответствующих форматов под j2se и начинаю их портировать на j2me. В 4 часу ночи после 20-30-50 кружки кофе, смотря на предстоящую борьбу еще с не одной тысячей строк, меня посещает мысль о том что когда то, еще на Nokia N73 у меня стоял голосовой поиск от Google, и он работал на удивление быстро. Или там был какой то мегапроизводительный кодек flac, или там немного хитрости. Откладываю код программы и библиотеки, создаю новый проект, главная цель которого — перебрать в цикле все аудиоформаты, поддерживаемые телефоном, на предмет совместимости с GoogleSpeechAPI. Компилим, запускаем, несколько минут страха что я ошибся, длиннющее полотно текста с ошибками от апи… и один единственный ответ, выбивающийся из толпы. А формат то «encoding=amr»! Радость была недолгой, на все попытки отправить свой голос я получаю невнятные ответы с текстом вроде «оооо» и так далее. Раскинув остатками мозгов после бессонной ночи уже на работе, решил проверить с какими же характеристиками пишет диктофон телефона, спасибо aNNiMON'у который оперативно помог с этим. Выяснилось что нужно было заменить «audio/amr; rate=16000» на «audio/amr; rate=8000». После работы проверяем как работает. Бинго!
Теперь можно было оформлять программу и исходники в что-то более-менее юзабельное. Конечная версия может:
— переводит текст с одного языка на другой, список языков аналогичен такому же на translate.google.com
— озвучивает переведенный текст
— может переводит Голоc-В-Голос, то-есть диктуем текст, он появляется в поле ввода, переводиться, и озвучивается
— проверка произношения (не идеальное решение, но работает). Диктуем фразу, и она сверяется с эталоном
— открытие текста из файловой системы и перевод
— ведение журнала переводов, храниться в папке диктофона (в файловой системе)
Кидаю программу к себе на телефон, друзьям-знакомым, на парочку форумов, чтобы отловить ошибки. Реакция неоднозначная, на некоторых ресурсах в темах ни одного поста, некоторые знакомые попросили такую же под Андроид/компьютер. Сам пока жду реакции той самой знакомой.
И напоследок:
Скриншот
Исходники goo.gl/wJE1f
Мидлет goo.gl/qOMmZ
Автор: SergejKomlach