Под таким оригинальным названием была создана тема на форуме qrz.ru. Через какое-то время местные модераторы стали моими соавторами и вначале поменяли название темы, а затем отредактировали текст, по непонятному для меня алгоритму изымая мои и чужие посты. Для того что бы все таки продолжить обсуждение в более в комфортной обстановке данная тема переезжает на всеми нами любимый форум cqham.ru. Итак начну заново. Три разработчика, - Василий UB6LFT , Владимир RZ6AT и Анатолий без радиолюбительского позывного написали несколько программ под операционные системы Windows, Linux, Android и для микроконтроллеров ArduinoUno (Nano), которые объединяет единый функционал – это передача звука по сети интернет. Программы почти совместимы по режимам, но есть небольшие различия, но об этом потом.
Цель создания данного проекта:
- получение личного удовлетворения от творчества
- создание удобного и простого инструмента для передачи речевых данных по сети интернет.
У многих радиолюбителей, и не только, периодически возникает необходимость трансляции речевых данных из точки A в точку B. Тут причины бывают разные, всех не перечислить, но для реализации этого мы начинаем думать, а что же приспособить для этих целей. В поле зрения попадают различные говорилки, - скайп, зелка и другие. Но все это как-то избыточно. Конечно, если есть возможность держать включенными персональные компьютеры, то что-то подобрать можно. Можно приспособить микрокомпьютеры, но их функционал может быть избыточным. Лучше всего для этого подойдут микроконтроллеры, желательно дешевые. Собственно мы с Владимиром и начали прорабатывать этот вариант, начиная с самых простых и популярных AVR. На данный момент на Arduino реализован пока что 8 битный звук, поскольку трудно сделать 16 битный с ограниченными ресурсами этой "железки". Но в планах есть сделать улучшение характеристик на более крутых процессорах.
Итак, что для этого надо. Во первых нужен сервер в сети интернет, с белым статическим IP. Это самый легкий вариант, который обеспечить взаимодействие между двумя и более устройствами, которые могут находиться в локальных сетях за NAT серверами. Варианты организации связи напрямую не рассматривались, поскольку симметричные NAT блокируют их. А через сервер связь будет всегда. К тому ресурсы микроконтроллеров бывают очень ограничены, для того, что бы реализовать на них сложные алгоритмы сетевого взаимодействия. Во вторых сам сервер должен иметь очень простой алгоритм взаимодействия по этой же причине. Для этого в передаваемые пакеты введено всего 4 байта служебной информации. На основании этой служебной информации и происходит обмен между клиентами. Забегая вперед скажу, что серверу все равно какую информацию через него передают, лишь бы были соблюдены правила обмена. Для того, что бы сервер знал, кто у него в канале клиент должен раз в две секунда напоминать о себе серверу специальным пакетом из 4 байт. Если клиент хочет создать закрытый канал по номеру, то этот номер также должен периодически передаваться. Ну а дальше, - вся информация, что приходит от определенного клиента раздается всем другим клиентам, у которых совпадает код закрытого канала. Защитится от тех кто будет подслушивать или мешать обмену информацией тут можно только одним способом - это спрятаться среди сети серверов и кодов закрытия каналов внутри сервера. Общественные голосовые конференции по такому принципу не создашь, но организовать корпоративную или частную сеть, о которой никто не знает, вполне возможно. На данный момент, до октября месяца этого года, такой сервер нам предоставил Сергей RV3DOD. После окончания его работы будут предоставлены сервера в виде исполняемых файлов, что бы пользователи могли сами организовывать свои обменные ресурсы. Итак, что сделано на данный момент.
Версия под Windows, которая сделана в виде PMR радиостанции.
Приведу еще одну картинку которую выложил Refraktor на qrz.ru
Программа маленькая, портабельна, не требует установки, имеет очень простое управление. Виртуально имитирует PMR радиостанцию. Всего 5 кнопок управления. Как известно PMR радиостанция имеет 8 каналов для общения, но в данной программе можно указать почтовый индекс и тогда общение будет происходить только между теми, у кого установлен одинаковый номер, а это миллион различных комбинаций. Переключение каналов производиться кликом левой кнопкой мыши по кнопкам слева. Канал Г (ниже первого) имеет особый статус, на нем можно проверить работоспособность рации, услышать свой голос, но общаться там нельзя. Верхней левой кнопкой производиться вызов в канале. Нижняя левая выключает программу. Щелкая мышкой по динамику осуществляется переключение между приемом и передачей. Если щелкнуть правой кнопкой мыши по кнопке выключения виртуальной радиостанции, то появиться дополнительное меню.
В нем можно выбрать микрофон и устройство воспроизведения. По умолчанию используются те, что установлены в Windows основными. Приемом/передачей можно управлять клавишами клавиатуры. По умолчанию используется клавиша пробела. Поочередное ее нажатие производит переключение. Клавиши Ctrl работают по другому, передача производиться между нажатием клавиш и их отжатием. В программе отсутствует перехват нажатий клавиш Windows (что бы не раздражать различные антивирусные программы), поэтому при управлении с клавиатуры программа должна иметь активное окно, то есть быть на переднем плане.
Если все таки есть необходимость осуществлять прием-передачу при неактивном окне программы, то можно воспользоваться данной программой.
Скачиваем программу и "вынимаем" её в удобное для себя место. Запускать нужно key.exe, при первом запуске окно программы не отобразится, но появится иконка в trey. При повторном запуске окно программы отобразится. В нем ничего интересного нет, кроме служебной информации, но программу при этом можно закрыть уже стандартным способом. Программа ищет все запущенные программы PMR и в случае нажатия левого CTRL или правого оповещает их об этом событии. Если конкретный экземпляр программы PMR настроен на управление одной из этих клавиш, то он будет управляться. Если например запущено несколько экземпляров программы с управлением от левого CTRL, то при нажатии на эту клавишу все они станут на передачу.
Режим симплекс позволяет общаться без помех (заводки звука), если используется не гарнитура, а динамики компьютера.
Ну и главная изюминка программы:
Для того что бы менять цифры надо навести курсор мыши на нужное место и щелкнуть правой или левой кнопкой мыши. Колесико мыши также работает. Изменения вступают в силу после закрытия диалогового окна с почтовым индексом. Для того, что бы запустить несколько экземпляров данной программы необходимо ее запускать из разных каталогов, из одной и той же папки запустить несколько экземпляров невозможно. Для продвинутых пользователей есть возможность менять настройки усиления звука по приему и передачи. Есть возможность включить VOX, поменять сервер, изменить режим звука. Программа работает с такими режимами mono:
- По умолчанию частота дискретизации 16000, кодек G711
- 16000, звук 16 бит
- 16000, звук 8 бит
- 8000, 16 бит
- 8000, G711
- 8000, 8 бит
- GSM
При приеме программа сама определяет режим и производит нужное декодирование. Для передачи необходимо в рабочем каталоге программы создать файл root.txt и в первой строчке написать цифру нужного режима, вот так:
4
0,1 - 16000 G711
2 - 16000 16 bit
3 - 16000 8 bit
4 - GSM
5 - 8000 16 bit
6 - 8000 G711
7 - 8000 8 bit
В этом случае на передачу будет работать кодек GSM.
Файл ip.txt позволяет после старта программы подключаться по указанному адресу. В файле в первой строке адрес указывается так, например:
192.168.0.5:16000
Обязательно надо нажать Enter в конце строки. Файл vox.txt включает VOX. Пример:
5
1000
5 - уровень при котором срабатывает передача ( диапазон до 127 ), 1000 - количество миллисекунд после которых передача выключится, если на входе не будет достаточного уровня.
Основная задача этой программы осуществлять связь с микроконтроллерами, поэтому и такое разнообразие режимов, в зависимости от того на что данный микроконтроллер способен. Но вместе с тем, ничего не мешает использовать данную версию самостоятельно, с такими же версиями или с версией под Android. Поэтому по умолчанию стоит наиболее подходящий для речевой связи кодек. Полоса частот 8000 герц G711 обеспечит вполне качественное звучание.
Версия под Android, также в виде PMRрадиостанции.
Приведу картинки все того же Refraktor
Правда он их выкладывал по поводу того как неправильно выглядит программа на некоторых телефонах.
Не на всех телефонах работает, а на каких то работает, но не совсем так как надо. Но у меня и у многих пользователей работает нормально. Автор программы Анатолий. Надеемся, что он не бросит проект и будет постепенно устранять выявленные недоработки и добавлять новый функционал. Лично я использую эту версию в связке с версией Windows, на которой включаю VOX (через файл vox.txt) и организовываю нужную мне трансляцию, какого либо канала Виртуальной Шарманки или чего либо другого, а сам слушаю это на своем смартфоне. Управление программой также не вызывает сложностей. Дополнительные 5 кнопок, это банки памяти. Для того что бы запомнить нужный канал надо нажать на выбранную кнопку и держать в течении 2 секунд. Очень удобно потом коротким нажатием на кнопку вызывать нужные каналы, у которых индекс, сервер, порт, звуковой режим могут быть разными. Для того что бы начать передачу надо нажать и держать за динамик. Или же двойным кликом по динамику включить передачу, что бы выключить достаточно кликнуть по нему один раз. Программа полностью совместима в версией Windows за исключение режима GSМ. Будем надеяться, что со временем Анатолий реализует и этот режим.
Версия под Linux, в виде консольного приложения.
example2.zip
Если первые две версии выложены в виде исполняемых файлов, то данная версия выложена в исходных кодах на языке Си. Для работы со звуком выбрана звуковая библиотека ALSA. Эта версия для тех, кто разбирается в программировании, что бы лучше понять применяемые алгоритмы.
Ну и наконец то версия для Arduino
Сам код . cod.txt