Инженер-электронщик
0,0
рейтинг
25 июня 2012 в 19:46

Распознавание речи на STM32F4-Discovery из песочницы

image
В этой статье я хочу рассказать о том, как можно распознавать речь на микроконтроллере, используя отладочную плату STM32F4-Discovery. Поскольку распознавание речи — достаточно сложная задача даже для компьютера, то в данном случае оно проводится при помощи сервиса Google. Распознавание речи таким способом может пригодится в разных задачах, например в одном из устройств «умного дома».

Отладочная плата STM32F4-Discovery заметно отличается от нередко упоминаемой в статьях отладочной платы STM32-Discovery. На ней установлен микроконтроллер STM32F407VGT6, использующий архитектуру Cortex-M4F, имеющий 1 MB Flash и 192 KB RAM. Контроллер способен работать с тактовой частотой 168 МГц.

На отладочной плате установлен аудио-ЦАП со встроенным усилителем (его выход соединен с разъемом для наушников) и цифровой MEMS-микрофон, благодаря чему на базе STM32F4-Discovery можно легко изготовить устройство, работающее со звуком.

Распознавание речи с использованием Google Voice Search описано здесь: Статья.
Для того, чтобы распознать какую-либо сказанную фразу с использованием микроконтроллера, нужно выполнить ряд действий:

Записать звук в память контроллера.
Произвести кодирование звука.
Установить соединение с сервером Google.
Отправить на сервер POST-запрос и закодированные аудиоданные.
Принять ответ от сервера.

Запись голоса
Поскольку на плате уже есть цифровой микрофон, записывать звук будем с его помощью. В данном случае это PDM-микрофон. Он имеет только два сигнальных вывода — тактирование и данные. При наличии сигнала тактирования, на выходе данных микрофона появляется сигнал, закодированный при помощи PDM модуляции (подробнее о ней рассказано в Википедии: Pulse-density modulation). На STM32F4-Discovery микрофон соединен с SPI/I2S — для приема данных с микрофона достаточно сконфигурировать I2S на прием данных, и по прерыванию от I2S считывать из регистра полученные данные. Эти данные сохраняются в память контроллера, и после того, как будет записано достаточное количество данных, производится их фильтрация, результатом которой являются несколько семплов аудиоданных.
Работа с микрофоном описана в документе AN3998 от ST — там объясняется принцип действия микрофона, особенности его подключения и описывается работа с функцией фильтрации.

На сайте ST среди различных примеров для платы есть пример работы со звуком, вот только он достаточно навороченный — в примере показано, как воспроизводить звук из памяти контролера и с подключенной к плате USB-флешки. Так же демонстрируется запись звука на флешку. Код для воспроизведения и записи звука я брал именно оттуда. Вот только в этом коде оказалось немало ошибок и недоделок — вероятно, пример писали в спешке.

Кодирование записанного звука
Описания работы с сервисом распознавания речи уже не раз приводились в интернете. Во всех случаях авторы используют аудиокодек FLAC, так как в Google используют нестандартное кодирование Speex данных.
Это видно из кода браузера Chromium: Код, отвечающий за запись звука.
В описании POST запроса указывается, что тип данных — «audio/x-speex-with-header-byte».
Вот только на STM32 не удастся закодировать данные в формат FLAC — нет таких библиотек. А вот код Speex портирован на STM32, поэтому для кодирования я использовал именно этот кодек. Из кода Chromium довольно легко понять, в чем заключается модификация кодека — перед началом каждого фрейма закодированных аудиоданных вставляется дополнительный байт, равный длине фрейма в байтах.

Запись и кодирование звука идут одновременно — с использованием двойной буферизации: в то время, пока в один из буферов записываются 160 семплов аудиоданных, данные из другого буфера кодируются в формат Speex. Закодированные данные сохраняются в памяти контроллера. Запись идет в течении 2 секунд, в результате чего формируются 2100 байт закодированных аудиоданных. Частота дискретизации — 8 кГц.

Связь с сервером Google
image
Для соединения с интернетом используется отладочная плата с WIFI модулем — RN-XV. На ней установлен WIFI-модуль RN-171 (снизу платы), антенна, 3 сетодиода и штыревые разъемы. Связь с модулем идет через UART, так что для работы с ним достаточно 4 проводов. Стоимость платы в sparkfun, откуда я его заказывал — 35$. Сам WIFI — модуль стоит 30$. Подробнее о модуле можно прочитать на сайте sparkfun: RN-XV WiFly Module.

Для того того, чтобы передать данные на сервер, нужно подключится к нему по протоколу TCP, а затем передать запрос такого вида:

POST www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU HTTP/1.1@#Content-type: audio/x-speex-with-header-byte; rate=8000@#Connection: close@#Content-length: 2100@#@#

Символы @# программа заменяет на CRLF. После передачи запроса нужно отправить на сервер 2100 байт закодированных аудиоданных. Получив все данные, сервер производит распознавание речи, и передает распознанную строку вместе с дополнительной информацией, после чего соединение с сервером закрывается.

После того, как ответ сервера принят, программа выделяет из него распознанную строку и выводит ее через другой UART микроконтроллера. Данные из этого UART передаются на компьютер в терминал, в окне которого и появляется распознанная фраза. После этого контролер готов в запуску записи новой фразы.

Получившаяся конструкция выглядит так:
image

А вот как она работает:


Обновление:

Уже после того, как я выложил статью, я смог реализовать запуск записи при появлении громкого звука (в том числе и речи). Для этого программа постоянно ведет запись и кодирование звука. Закодированные данные помещаются в массив. После достижения его конца, данные начинают помещаться в его начало. В то же время программа постоянно проверяет, не появился ли громкий звук. При его появлении программа сохраняет значение указателя записи и ведет запись в течение 2 секунд. После остановки записи, программа копирует данные в другой буфер. Так как известно, в какой момент появился звук, можно брать данные незадолго до этого. Таким образом, первые звуки слова не теряются.

Видео работы VAD:


Программа написана в IAR.
Программа позволяет воспроизводить записанную фразу, перед тем как отправить ее на сервер. Для этого достаточно раскомментировать некоторые строки в функции main.

В приложенном архиве несколько проектов:
my_audio_test — записывает и сразу же воспроизводит звук с микрофона.
speex_out — воспроизводит звук в формате Speex, хранящийся в Flash памяти контроллера.
speex_rec — записывает и кодирует звук при помощи Speex в течение 2 секунд, после чего воспроизводит запись.
speech_wifi — сам проект распознавания речи, в этом проекте используется WIFI.
speech_wifi_vad — проект распознавания речи с VAD, в этом проекте используется WIFI.

dl.dropbox.com/u/66555655/NEW_VOICE.zip
@iliasam
карма
116,0
рейтинг 0,0
Инженер-электронщик
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (86)

  • 0
    Шикарно, для умного дома делаете?
    • +1
      Умный дом пока только в перспективе. Просто было интересно, как будет выглядеть распознавание речи при помощи микроконтроллера.
      • –1
        Хм… интересное решение, но куда более интересным было бы сделать без участия интернета а своими силами на МК, что система не была зависима от интернета.
        • +3
          Успехов :).
          • +2
            Есть делать систему под конкретного человека, то это достаточно легко, надо просто записать набор команд и делать сравнение записанной команды и того что слышим сейчас, если смотреть на применение системы относительно умного дома.

            p.s. а за что минусы то?
            • +2
              Минусы — за бред. Просто представьте на минутку, сколько нужно проделать работы и изучить матана, чтобы упихать распознавание речи на МК в одиночку. Это как собрать самолёт у себя в гараже из деталей со свалки (:
              • 0
                Простите но если мы говорим не об полноценном распозновании речи а о распозновании команд то тут хватит теории вероятности со 2 или 3 курса университета.
                Работы тут на 1 день, качественный МК, запись команд на память, при произношении команды сравнение того что получили с вариантами команд и при заданной вероятности выполнение команды. При количестве команд в рамках разумного времени и мощности Мк потребуется не много.
                • 0
                  Если бы все было так просто, то мы бы уже давно с бытовой техникой разговаривали.
                  • 0
                    Разговор дело со всем другое, там требуется огромный словарь, что и вызывает основную сложность, ваш вариант очень интересный и я не спорю что это очень хороший результат я лишь говорю то что по моему без использования интернета было бы интересней.

                    И мой вариант требует большой и длительной настройки под каждого человека что в рамках серийного производство не позволительно.
              • 0
                для прототипа хватит качественного инженерного решения использующее сервис распознавания, но дальнейший шаг подразумевает локальное решение на случай если например инета не будет.
            • +1
              Как вариант — при первом включении попросить хозяина обучить устройство. В фильме «Двухсотлетний человек» насколько я помню было что-то подобное.
              • –1
                Ага. А к инструкции приложить трехтомник «Войны и мира», сборник собраний сочинений Солженицына и пару-тройку желтушных книжонок…
                И научить МК работать 64-битными адресами и поддерживать оперативку на DDR3. И работать с жестким диском.
                • 0
                  достаточно раза 3 повторить команду, а дальше как написали выше матан, но есть ошибка, для заданных команд и действий и не слов и букв подойдет стандартная теория вероятности которая на 2 или 3 курсе университета, и большой мощности МК не потребуется
                  • –1
                    Мы, вообще-то, о распознавании речи говорим, а не о двух-трех командах…
                    • –1
                      Вообще то о распозновании речи к умному дому, т.е распозвании команд для системы и о разумном количестве команд это ну до 1000 где то. а не 2 или 3
                      • 0
                        Вы хотите 1000 команд записать сами? И где их все хранить?
                        • 0
                          Количество команд пользователь сам сможет выбрать, а хранить на SD карте
                      • 0
                        1000 команд — это уже не 2-3. Здесь простой «слепок» не подойдет: слишком много информации хранить придется. Так что, либо пилить полноценную распознавалку, либо сохранять все на объемной флешке и не пенять устройство за «тугодумство».
                        • +1
                          обьемная флешка не потребуется я думаю что команда будет весить больше сотни кбайт, а если ввести умный поиск то он будет не долгий)

                          Да Мк потребуется приличный 8 битные AVR не подойдут на Cortex M3 я думаю, спокойно можно сделать)

                          Вообще спор меня за интриговал, и я подумываю реализовать это) ну или пробовать) но боюсь не скоро смогу… завал на работе) как сделаю отпишусь)
                          • 0
                            Умный поиск — это как?
                            • 0
                              любой кроме пузырька)
                          • 0
                            А словарь откуда будете брать? Или предлагаете для каждого слова «слепок» хранить?
  • +2
    А ведь вместо кнопки можно сделать пороговый детектор…
    • 0
      Я же указал в статье — уже пробовал сделать детектор голоса. Кроме того, детектор будет на любой шум срабатывать.
  • 0
    Если я правильно вас понял, то не на весь шум будет срабатывать, после отправки запроса, вы получаете данные такие как, % распознания и вы можете отсеивать посторонние и не распознанные звуки.
    • 0
      Значение точности распознавания действительно передается. Только из-за шума возможно большое количество лишних запросов, при этом во время передачи запроса и ожидания ответа запись невозможна.
      При этом главная проблема детектора звука — первые звуки слова теряются.
      • 0
        Я делал алгоритм на запись звука используя технологию Google и добился записи звука и первых звуков.Могу поделиться, если требуется, но вы я думаю и так знаете как это сделать.
        • 0
          Я все-таки смог реализовать голосовую активацию, поэтому обновил пост.
      • 0
        Как вариант, можно анализировать уровни сигнала с микрофона и время.
        Например если был высокий уровень в течении 100мс, а потом низкий уровень 500мс, то это просто помеха или был сигнал более 100мс, а потом пауза 800мс, то из сигнала вычитаю 800мс и отправляю его на конвертирование.
  • 0
    Забавная игрушка.

    Почему-то мне кажется, что эта плата может распознавать звук и сама, без гугла. 168МГц + элементы DSP — это нешуточная вычислительная мощность.
    • +1
      Думаю, что максимум голосовые команды, да и то после предварительной записи.
    • 0
      Минимум придётся портировать существующий софт с сорцами, если таковой имеется. Причём, DSP здесь не сильно поможет: тут больше не обработка сигнала будет грузить ядро, а алгоритм распознавания. Ну, а если софта нет, тогда лучше запастись зубами — грызть гранит науки придётся долго и усердно.
    • 0
      В реальном времени — очень вряд ли.
      И потом, написать самому софт нереально, а существующий должен крутиться на какой-то оси.
  • 0
    Интересно, спасибо.
    Особенно пригодятся примеры, т.к. такая плата имеется, но ничего серьёзного именно на F4 не собирал. Просто дороговаты контроллеры сами по себе.

    И вопрос: почему не использовали имеющийся там Ethernet? А то модуль дороже самой платы выходит.
    • +2
      Эзернет там неполный. К нему еще надо допаивать PHY и в коде поддержки TCP разбираться.
  • 0
    Для построения «умного дома», в той части, где нужно распознавать речевые команды, можно воспользоваться вот такой штуковиной — EasyVR (Multi-language speech recognition module with serial interface)
    www.tigal.com/product/1770
    Можно запрограммировать платку на 32 голосовые команды.
    • 0
      Платка дороже модуля wifi стоит, только модуль тренировать не надо, и сам по себе wifi в устройстве очень полезен — например, для связи с остальными частями «умного дома».
  • 0
    Попробовал speech api.
    Фраза «accessing google speech api» распозналась как «texas in google speech be».
    Я бы не стал в свой дом засовывать такую штуку… А то ещё включит плиту вместо телевизора.
    • +1
      Так а чеж вы с ним на не родном языке говорите, попробуйте на русском, процент успешного распознования значительно улучшится.
      • 0
        Хм, а ссылочку не дадите? Я только english нашёл.
        • 0
          Вроде как вот тут про переключение языка написано.
  • +3
    Увидев в названии статьи довольно мощный DSP, подумал, что обнаружу в ней реализацию собственно распознавания.
    168 мегагерц DSP жмут чужим кодеком и распознаются чужим ПО на облачном сервере, ну ладно… Но передавать данные через привешенную на проводах платку уарт-усб, имея на борту USB-контроллер, это, простите, моветон.
    • 0
      *простите, следует читать "168 мегагерц DSP жмут аудиоданные чужим кодеком, которые распознаются чужим ПО"
    • +3
      Но-но, не пинайте так автора. Во-первых, ковырять и отлаживать USB или UART — две большие разницы (вы в курсе, я думаю). Во-вторых, для прототипа и проекта «для поиграться» результат всё равно хороший.

      Да, я тоже ожидал увидеть матан и прочие потроха алгоритма распознавания… Ну что ж поделать, я автора прекрасно понимаю: я сам недавно начал писать драйвер SD-карт, но потом подзабросил, ибо дофига рутины и отладки (и вообще это нудятина), а выхлоп мизерный — можно взять готовый шмат чужого говнокода, который уже работает, а свой писать да отлаживать никаких мотивации и времени не хватает.

      Впрочем, я когда-нибудь к своему драйверу вернусь, и надеюсь, что автор когда-нибудь зафигачит распознавание на самом МК. Это будет настоящий подвиг (:
      • 0
        прикольно, а я такой драйвер для sd карточек как раз только что закончил более-менее :)
        • +1
          Делитесь сорцами. Если они не привязаны к железу, я бы на STM32 с радостью потестил, да и вообще можно совместно пилить проект, если там осталось что-то (:
          Я, кстати, исключительно по спекам драйвер пилю (SD Specifications Part 1 Physical Layer Simplified Specification Version 3.01).
          • +1
            Да, я как раз по официальным спекам и сделал. Делаю это для STM32F217.
            Из примеров, которые можно найти в инете толкового ничего не нашёл. Сделал сам, нормально детектируются/инициализируются и читаются/пишутся карты SDSC и SDHC — у меня тут их горсть целая (правда 8 гиг всего самая «большая»). Скоро вот раздобуду 64 гиг и проверю что у такой SDXC карточки записано в регистрах CSD & SCR…
            Возможно нужно будет немного подкрутить тайминги, меня вообще сильно удивило насколько карточки различаются по скорости — FTL кое-где вообще плохо реализован.
            Да, чуть не забыл, всё это у меня для шины SPI, есть в планах сделать нормальный SDIO 4-х пиновый чтоб выжимать максимум скорости и ещё задействовать DMA чтобы проц не грузить.
            Мне интересно если бы кто-то потестил на разных картах — может что ещё поправить надо будет.
    • 0
      По поводу UART — это очень быстрое и простое решение. Использовать встроенный USB я умею, вот только не известно, как прерывания от USB (а при наличии соединения с компьютером они есть всегда), будут влиять на работу программы, в частности на запись сигнала.
      По поводу распознавания на контроллере — в свое время экспериментировал с распознаванием голосовых команд при помощи голосового движка от Micosoft. Запускалось оно на Pentium 133 MHz под win2k (А ведь это помощней контроллера будет — там и математический сопроцессор, и ОЗУ много, и диск есть). Движок приходилось более получаса обучать, перед началом распознавания надо было указать, какие команды будут ожидаться. И все равно распознавание работало некачественно, очень часто определялось не то слово.
      • 0
        Так это и есть то, что делает проект интересным и отличающимся от тонн подобных игрушек.
        Использовать DMA для считывания сигнала с микрофона, например. Описать ваше решение.
        Это и придало бы весу статье.
        Куда интереснее прочесть про реализацию распознавания, пусть и не такого качественного, как у гугла, чем сотую вариацию на тему «послать данные всемогущему облаку».

        Между прочим, есть проект распознавания на АВРке — некачественное, конечно, на уровне команд а не распознавания слов, но все же. На 16-мгц 8-бит АВРке. А тут целый ДСП. Интересно поглядеть на то, как он справится с такими задачами.
      • 0
        Да, справедливости ради замечу — с практической точки зрения ваша реализация (за исключением USB, это все-таки нужно любыми способами привести в норму, чтобы избавиться от переходника) наверняка куда более ценна, нежели свои велосипеды по распознаванию — потому что, все таки, мелкой ДСП плате тягаться с гугловскими серверами и алгоритмами бессмысленно. И в используемом продукте я бы сам выбрал такой же вариант, потому что важен результат. Так что девайс у вас хороший (только USB прикрутите =) )

        А вот статья, конечно, была бы более интересна про реализацию распознавания, очень уж хочется почитать отзывы тех, кто эту DSPшку пощупал с этой точки зрения.

        Да, а вы не касались правового вопроса? Допустим вот вы решите производить свою систему умного дома (гипотетическая ситуация) — что в этом случае говорит гугл относительно использования своего сервиса, это приемлемо?
        • 0
          Правовой вопрос совершенно не рассматривал, так как даже и в мыслях не было что-то продавать. Кроме того, Google может в любой момент изменить протокол связи, так что устройство можно применять только на свой страх и риск.

          По правде сказать, UART используется только для демонстрации работы контроллера — во время программирования и отладки я использовал semihosting, а UART — USB преобразователь я активно использовал при отладке работы WIFI-модуля — только так можно наблюдать, как идет процесс обмена данными с контроллером.

          USB — это хорошо, но без компьютера бессмысленно. Если я буду делать устройство, действительно являющееся частью умного дома, то компьютера там не будет, и весь код для USB придется выкинуть.
          Если уж кому-то и нужны примеры для работы с USB на STM32F4, то можно посмотреть здесь:
          Ссылка.

          Между прочим, в этом проекте ресурсы контроллера достаточно активно используются — кодирование звука при помощи Speex требует большого числа операций, да и памяти тоже требуется немало, поскольку только кодек использует 7 КБ, а еще есть аудиобуферы, буферы приема информации wifi модуля. Так что на STM32-Discovery запустить не удастся. Такое потянет отладочная плата с установленной stm32f103, но у меня ее нет, да и стоят они достаточно дорого.
    • 0
      Это на DSP, это лишь дополнительный набор DSP инструкций в ядре мк общего назначения.
  • +1
    Автору пожелание в усовершенствовании конструкции.
    Чтобы не остаться без такой полезной штуки если отключится интернет, воткните в порт USB( у этого контроллера вроде есть поддержка хоста) модем типа «свисток» и будет у вас резервный GPRS/EDGE/3G канал в интернет.
    Плюсов огромное количество:
    — опыт работы с usb хостом
    — опыт запуска TCP/IP
    — реверс инджениринг протокола свистка
    — занятие простаивающих ресурсов контроллера чем-то полезным
    — статья на хабре :-)
    • 0
      USB модем, это конечно интересно, но на практике обычно используют GSM/3G-модуль.
      • 0
        Ну так это же скучно, там все внутри уже реализовано, вам только питание подать и по УАРТ команды кидать.
        А я вон сколько удовольствия в моем варианте расписал :-)
  • +1
    Вижу уже не первую подобную статью где используется серве Google для распознавания речи.
    Много любителей есть также прикрутить Google к Аsterisk серверу.
    Но зачем гонят столько трафика, напрягать Гугле такой ерундой.
    Почему-то никто не может предложить использовать, например, CMU Sphinx, песплатный, есть русские акустические и лингвистические модели готовые. Для умного дома тем более у вас ограниченный набор фраз/команд, а не спонтанное распознование как делает Google.
    • 0
      Потому что не все так просто :)
      Акустические модели они, знаете, очень специфичные. И если тупо взять и загрузить их с VoxForge, то в 90% случаев они не заработают как надо в новых условиях (другой микрофон, посторонние шумы).
      А проводить адаптацию — это уже шарить надо.
  • +2
    Чёта с каждым новым сервисом гугла становится всё сыкатней и сыкатней. Понастроишь таких умных домов, потом дыц — америкосы решат, что пора — и каюк. Придёшь домой — а он тебе «ты кто такой? досвиданья» ;)
    Автор молодец. Но для умного дома, считаю, надо делать автономные сервисы, ну кроме если тольно внешнего управления.
  • +1
    Я уж думал и в правду на F4 речь распознают, а тут облом. Но всё равно интересно, работы тоже проделана не малая. Спасибо.
    • 0
      Я тоже думал, что кто-то либо изобрел мегаИИ, впендюривающийся в скудную оперативку, обслуживаемую МКшкой, или построил вокруг контроллера полноценный компьютер…

      Хотя, если взять ARM…
      • 0
        >>Хотя, если взять ARM…
        По вашему взят AVR?
        • 0
          Этот слишком дохлый. Надо что-нибудь хотя бы на гигагерц-другой…
      • 0
        Мы тут умудрились на SoC с CPU 20 Mhz + 48 Kb RAM + n Gb NAND flash запихать:
        — реляционную базу данных (полный CRUD-фарш с индексами, joins, транзакциями)
        — веб-сервер с сервлетами на JavaCard (правда эта жава самое узкое место во всём этом)
        И на этом добре крутится вполне приличное веб-приложение.
        Собственно самая алгоритмически навороченая часть ( БД ) занимает всего 8 Kb RAM!
        Тормозов не наблюдается, в полутора десятках таблиц хранится около ста тысяч записей в каждой.
        Так что распознавалку сделать можно если сильно напрячься…
        Но я как и многие подумал что в статье пишут как кто-то этого добился :)
  • 0
    Поправлю автора: распознавание голоса и распознавание речи — разные задачи.
    Распознавание голоса — определение человеческого голоса среди других звуков (то есть задача — определить, что человек что-то сказал и отреагировать).
    Распознавание диктора — определение персоны человека по голосу среди других людей.
    Распознавание речи — расшифровка аудиосигнала, перевод речи в текст.
    • 0
      Действительно, я ошибся. Переименовал пост и поправил текст.
  • 0
    По поводу шума — можно попробовать фильтровать данные по частоте и амплитуде — например после записи делать бпф — резать все частоты, не попадающие в интервал человеческого голоса, а также частоты, которые ниже порога определенного
    • 0
      В основном, все бытовые шумы примерно на тех же частотах, что и голос.
  • 0
    Позволяет ли данный WIFI-модуль RN-171 принимать и передавать потоковое аудио?
    • 0
      В каком смысле?
      • 0
        Если вы о программной передаче — то да, в принципе может. Правда, качество звука будет зависеть от выбранного протокола.

        Как раз на базе той же STM32F4-Discovery и RN-171 я делал WIFI радиоприемник, способный принимать данные с серверов Shoutcast. Приемник работал, но иногда звук прерывался или обрывалась связь с сервером, причем была явная зависимость качества звука от расстояния до роутера(при большем расстоянии становится больше потерь пакетов). Если бы я смог узнать, как управлять потоком в Shoutcast, то может быть, удалось бы добиться лучшего качества.
        • 0
          Да, есть желание тоже сделать wi-fi интернет-радио с софтовым декодированием mp3 или aac потока на Cortex M3/M4. Если не жалко, очень хотелось бы взглянуть на исходники вашего проекта. Ещё вопрос, хватит ли у RN-171 пропускной способности и скорости стека для обработки хотябы 92 кбит\с звука. Протокол tcp-ip.
          • 0
            К сожалению, я не смог запустить последнюю версию программы на DISCOVERY, так что пока не могу выложить исходники. Я постараюсь разобраться, из-за чего не работает проект и выложу его, как только смогу.

            Я использовал декодер mp3 вот отсюда: jjmz.free.fr/?p=65
            У меня звук воспроизводился на скорости 128 кбит/с. Однако, как я уже говорил выше, модуль работает на пределе возможностей, так что при слабом сигнале поток прерывается и соединение может разрываться.
            • 0
              Спасибо за помощь, пробовал портировать декодер helix но стабильной работы не получил пока. Может проблема была в антенне? А если внешнюю использовать?
              Заказал себе WiFly Module, ждёмс.
              • 0
                Я пробовал подпаивать антенну от роутера, немного получше стало, но проблемы остались, так что отпаял ее.
                • 0
                  Нашел ошибку в программе, исправил ее, так что приемник запустился.
                  Ссылка на исходники: ссылка

                  Вот пример работы приемника:


                  • 0
                    Выглядит очень неплохо) Кстати, в wi-fi модуле есть команда переключения антенны set wlan ext_antenna. По умолчанию включена внутрення чип-антенна (параметр равен 0). В данной модификации её нет и этот параметр должен быть при инициализации установлен в 1. Связь нестабильна т.к. фактически ваша RN-XV сейчас работает без неё. Модификация с разъёмом SMA кажется более практичной, антенну можно скрутить, например, со старого роутера :)
                    • 0
                      По поводу команды цитата из даташита: «This command applies only to RN-131. This command is not applied to the RN-171. Issuing this command on the RN-171 will give an error message: ERR: Bad Args».
                      У нас RN-171 и чип-антенны в нем нет. Так что 0 в данном случае — это внешняя антенна. Когда я перепаивал антенну, то в определенный момент ее контакт отошел, и модуль перестал работать, что свидетельствует о том, что используется именно внешняя антенна.
                  • 0
                    А под какой средой писался проект? Вроде где-то coocox проскакивал в конфигах.
                    P.S. все сообщения в этом топике написаны по просьбе инженера-разработчика. Если у кого есть возможность — пришлите инвайт f_i_l_i_n@list.ru
                    • 0
                      Да, под Coocox. Это связано с тем, что проект был написан на основе этого: jjmz.free.fr/?p=65, а там используется компилятор ARM GCC. Я пробовал скомпилировать код в IAR, но столкнулся с тем, что в IAR совершенно другой обработчик ассемблера.
                      • 0
                        а вот вы бы ещё библиотеки юсб прикрутили от stm), чтоб можно было не только через блютуз передавать
                        • 0
                          Это вы вообще к чему? Какой bluetooth?
                          • 0
                            тьфу, то есть вайфай), это я заработался, это я через блютуз тут передаю)
                            • 0
                              Ну а USB то куда приделать?
                              • 0
                                сжатую инфу в комп перегонять, а там можно уже декодировать и преобразовать в wav файл, в контейнере ogg
                                • 0
                                  А смысл? Если есть компьютер, то он сам с чем угодно справится, и контроллер уже не нужен.
                                  • 0
                                    ну там же не только звук может писаться, а ещё куча другой инфы и всё на одной платформе, а на компе прога которая всё эту инфу перерабатывает. Или возможно даже в raw писать и по USB сбрасывать, а уже не компе файл формировать, там кстати если я не ошибаюсь ogg контейнер только для сжатых данных speex нужен, а в wav уже могут быть сырые данные. Да вроде так.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.