вторник, 23 мая 2017 г.

Как я подключил радиопетличку к смартфону

В этой статье я бы хотел рассказать о том, как я подключил радиопетличный микрофон к смартфону.
boya-to-s4-cover
У меня есть радиопетличная система Boya wm6 и смартфон Samsung galaxy s4, который я использую в качестве камеры. На моём канале есть видео, в котором я рассказывал о возникшей проблеме подключения. Для тех кто не смотрел, повторю некоторые детали.


Есть несколько способов подключения внешних микрофонов к смартфону. Самый простой — это подключение через гарнитурный разъём. Я буду говорить именно о нём. Нам нужно подключить четырёх-контактный штекер TRRS в джек. А из ресивера у нас выводится трёхконтактный аудио штекер TRS. Поначалу я думал, что достаточно будет спаять переходник, который бы соединял контакты соответствующие земле и плюсу микрофона с одного конца c соответствующими контактами другого конца. Если будете паять такой, обратите внимание на то, какой стандарт применяется в вашем смартфоне. У меня применяется CTIA, но на более старых смартфонах может использоваться другой стандарт — OMTP. Отличаются они тем, что у них поменяли местами землю и микрофон.
Так вот, подключив ресивер к смартфону через такой переходник, как ни странно, ничего не заработало. Смартфон воспринимал вставляемый штекер как безмикрофонный. Однако сомнений в том, что я правильно спаял переходник у меня не было. Потому что когда я через него подключал непосредственно петличный микрофон, то всё работало нормально. Если же подключать к нему вывод с ресивера, то ничего не работает. Пришлось покопаться, чтобы узнать, в чём же дело.
Для записи видео я планирую использовать приложение Open Camera. Это навороченная многофункциональная камера с открытым исходным кодом. В настройках записи есть возможность выбрать источник звука. Но, не всё так просто. Если выбрать пункт «Микрофон видеокамеры», вопросов никаких нет. Здесь подразумевается запись со внутреннего микрофона, а он доступен всегда. Но если выбрать источник «Внешний микрофон (если есть)», то тут могут быть разные варианты в зависимости от того «доступен» или «недоступен» внешний микрофон.
opencamera-sound-sources
За что отвечают пункты «По умолчанию» и «Оптимизировано для голоса» я пока не понял, надо будет поковыряться… Также в настройках есть возможность выбора количества каналов записи: моно или стерео. Опять же, с моно всё понятно, а со стерео интереснее.
opencamera-sound-mono-stereo
Здесь подразумевается запись со второго внутреннего микрофона смартфона на устройствах где он есть. Но у меня есть идея заставить смартфон писать двухканальный звук с разных источников: один канал с гарнитурного разъёма, второй — со внутреннего микрофона. Почему я так хочу сделать и о возможности реализации такой идеи я могу рассказать отдельно. Сейчас же не будем на это отвлекаться.
К сожалению, в приложении Open Camera нет никакой индикации о доступности внешнего микрофона, по крайней мере пока, это надо будет исправить позже. И это не было бы такой проблемой, если бы у нас был обычный проводной петличный микрофон, хотя индикация, конечно, не помешала бы. Но мы-то пытаемся заставить работать в качестве микрофона устройство, которое изначально не воспринимается корректно. Позже расскажу как я исправлял проблему. Я пытался подобрать сопротивление, которое бы помогло смартфону распознать ресивер. Но как же мне было подбирать эти сопротивления, если я не вижу воспринял ли смартфон вставленный штекер как просто наушники или как гарнитуру? А поскольку я этого не вижу, я не знаю откуда приложение берёт звук для записи. То есть, чтобы убедиться, что я пишу звук именно со внешнего микрофона, мне каждый раз приходилось записывать тестовый ролик, в котором я шепчу отдельно во внутренний микрофон и отдельно во внешний. После чего просматривал этот ролик, что опять требует отключения штекера и траты времени, и только после этого я мог фиксировать значение сопротивления, на котором смартфон воспринял штекер тем или иным образом. Кроме того, ситуация осложнялась тем, что если в смартфон вставить штекер через сопротивление, воспринимаемое как наушники с микрофоном, а затем выкрутить сопротивление на более низкое, на котором запись голоса ещё нормальная, то при переподключении штекера он уже не воспринимался как наушники с микрофоном.
Меня эта ситуация не устраивала, и я решил сначала обеспечить себе возможность индикации. Вообще надо отметить, что я видел смартфоны, которые в статус баре полноценно отображали подключенное устройство. А современные смартфоны почему-то эту информацию не отображают. То-ли google это убрали из голого Android, то ли производители смартфонов посчитали что это лишнее. К примеру мой samsung galaxy s4 иконку наушников отображает, но отличить подключены ли обычные наушники или гарнитура по этой иконке невозможно. Мне не понятно, если уж они сделали уведомление, то что стоило реализовать это полноценно, там всего пару строк кода добавить?
samsungs-useless-headset-notif
Короче говоря, мне пришлось написать своё приложение, которое бы отображало данную информацию, т. е. как смартфон воспринял вставленный штекер: это либо наушники без микрофона, либо с микрофоном. Ну а кроме того, можно будет проверять нажатия клавиш на пульте гарнитуры, но об этом позже.
hs-tester-have-mic
Не могу сказать, что в написании приложения было что-то сложное, но я потратил на это почти неделю, по большей части потому, что не было опыта программирования под Android. И кстати, там ещё есть что улучшать, так что если есть желание помочь, можете сделать это через github, отправив коммит в мой репозиторий. А само приложение вы можете скачать в Google Play, называется оно Headset Tester.
Итак, теперь у меня появилась возможность видеть, определился ли внешний микрофон, мне этого очень не хватало. В своём приложении в версии 1.0.0 я не реализовывал отображение иконки в статус-баре. Зато это реализовано в приложении Headset Indicator, которое я нашёл уже после написания своего. Но при подключении штекера самсунговское бесполезное уведомление закрывает обзор остальных иконок, и приходится ждать где-то две секунды, пока оно исчезнет. Это раздражает, потому что я не могу оперативно получить информацию при вставлении штекера. Раньше чтобы отключить этот тупой нотификатор, нужно было отключать или удалять приложение «Рекомендуемые приложения» при наличии root (для справки: пакет называется com.sec.android.pagebuddynotisvc, а лежит он по адресу /system/priv-app/PageBuddyNotiSvcK). В пятом андроиде отключить приложение невозможно, зато теперь достаточно зайти в настройки → вкладка Моё устройство → Дисплей→Панель уведомлений →и там отключить Рекомендуемые приложения. Кстати, если кому интересно, список приложений можно изменять. Для этого надо нажать на саму надпись «Рекомендуемые приложения», довольно неочевидно. Ещё интересно то, что приложения могут рекомендоваться при вставлении в док станцию. Но с ней я буду экспериментировать потом.
Сейчас я расскажу как мне удалось подключить радиопетличку. Я пробовал подключать ресивер к смарту через потенциометр. Но почему-то если я подключал штекер в смартфон с уже подключенным ресивером, то он не воспринимал сигнал. Я смог заставить смарт что-то записывать только при такой последовательности подключения: от переходного кабеля отключить ресивер, вставить переходной кабель в смартфон, затем подключить к кабелю ресивер. Но я бы не сказал, что это рабочий вариант.
Я думал, что проблема в несоответствии уровней сигналов и начал изучать как собрать аттенюатор. Мне хотелось собрать симметричную схему, чтобы можно было подключать его любой стороной. Кроме того, я хотел избавиться от потенциального жужжания, закрыв путь фантомному питанию для электретной капсулы, идущему от смартфона. Поэтому я припаял конденсатор в цепь делителя напряжения.
И, как оказалось, вся проблема была в нём. Когда я его впаял, смартфон стал воспринимать вставляемый переходник с подключенным ресивером нормально. Сопротивление вообще ни на что не влияло. Я использовал 125 МОм потенциометр. Что на нуле, что на всём промежутке до максимума звук был одинаковым.
Также поэкспериментировал с ёмкостью конденсатора. У меня было два одинаковых конденсатора на 4.7 мФ. Я подключил второй конденсатор параллельно, чтобы возросла ёмкость. Опять никакого влияния: что 1, что 2 конденсатора — всё звучало одинаково.
В итоге я исключил из схемы пот, так как я уже сказал, что он ни на что не влияет, и просто подключил кондёр на 4.7 мФ через сигнальный провод. Таким образом, у меня получилась самая что ни на есть симметричная схема. Да, кстати, конденсатор у меня керамический, т. е. у него нет полярности.
Signal     —————||—————  Signal
-> От ресивера         К смартфону ->
Ground   ——————————- Ground
Теперь нашу схему нужно куда-то внедрить. Я решил, что воспользуюсь такой пластиковой баночкой в качестве корпуса. Её жёсткость будет защищать всё что внутри. А гнезда для входа и выхода мы легко можем смонтажировать. Баночка лёгкая, провод от неё не будет сильно натянут. Она хорошо помещается в кейс для радиопетличной системы. Кроме того, открывающаяся конструкция позволит мне что-то поменять, если я захочу.
banochka-plastikovaja
Сначала припаиваем компоненты друг к другу. Затем берём сверло по дереву и сверлим два отверстия в баночке. После чего закрепляем гнёзда гайкой.
Ещё раз проверяем, что всё работает. Вешаем на себя трансмиттер с микрофоном, подключаем ресивер к смартфону через конденсатор и через переходник. Включаем запись видео. Просматриваем отснятый фрагмент и убеждаемся в работоспособности.
Ну вот теперь я смогу нормально перемещаться при записи встреч нашего клуба. Отныне мы будем всегда записывать на петличку, поэтому качество восприятия видео для вас будет на новом уровне. Если вам интересно свободное по, подписывайтесь на LinuxComp и принимайте участие в проектах. У нас много всего интересного.
P. S. Поскольку я уже много выяснил по вопросу о том как собирать аттенюатор, я бы хотел об этом тоже рассказать. Там есть много технических моментов, которые думаю, многим были бы интересны.

Комментариев нет:

Отправить комментарий