🎵 Проект «Антизалипод»: оффлайн-аудиоплеер из старого смартфона

 Публичный пост
5 марта 2024  2298
Беха ОХУЕННО

Привет, клубнички и клубни!

Много раз замечал за собой, что бесконтрольное потребление контента приводит к сенсорной перегрузке, от которой и до выгорания недалеко. Время сейчас такое, что от новостей спасаться довольно трудно, приходится вводить искусственные ограничения. Вместе со всеми моими прочими странностями вроде bash-скриптов на телефоне для измерения настроения и музыкального центра на базе флоппи-дисковода мне захотелось сделать следующий шаг.

Среди всего барахлища, которым сейчас засрат мой подвал, нашёлся один очень маленький и очень красивый белый телефончик, Motorola RAZR i. На гриле динамика красуется логотип ещё той самой Motorola Mobility, которая была до Google и Lenovo. Приятные воспоминания, надо сказать! Чего стоит одна только текстурная спинка устройства с имитацией белого карбонового волокна. На этой спинке, кстати, очень своеобразно выглядит лого Intel Inside. Ага, внутри там самый настоящий Atom, и архитектура у него вполне себе X86. Что особых преимуществ не даёт, просто попытка зайти на рынок смартфонов.

Ну да ладно, переключимся на то, что позволило мне подарить этому красавчику вторую жизнь и постоянную прописку в моём кармане.

Софт

Определюсь сначала с основными идеями построения оффлайнового плеера:

  • Не подключать устройство к интернету. Вообще никак и никогда. Это в том числе означает, что операционная система не будет получать патчи, закрывающие уязвимости. Это осознанный шаг, вместе с этим я закрываю себе возможность попасть в ловушку бесконечных лент контента с pull-to-refresh.
  • Максимально удобные физические контролы прямо на самом плеере. Motorola RAZR i родом из той эпохи, когда в телефоны не боялись добавлять дополнительные кнопочки. Тем самым у меня появляется возможность замапить полный контроль плейбека (play/ffwd/rew/volume) и оперировать им вслепую.
  • Скробблинг в Last.fm. Для этого мне потребовалось по локоть залезть в Java и модифицировать мой любимый плеер. Мне это удалось, о чём я расскажу далее
  • Система меню, похожая на оригинальный iPod. У меня он когда-то был, да так и остался навсегда в сердечке. Даже когда он умер, я купил SanDisk Sansa Clip Zip на замену, прошил туда Rockbox и пользовался дальше как ни в чём не бывало. Теперь под эту функцию пристроился старый мобильник: с помощью кастомного лончера я вынес в построчное меню всё, для чего устройство предназначено, то есть музыка, подкасты, аудиокниги и диктофон. Больше нихера. И кроме плееров ничто не может изрыгать уведомления, что важно.

Теперь о конкретной реализации плана.

Lineage OS (неофициальный билд)

На стоковой прошивке Motorola RAZR i апгрейдился максимум до Android 4.4. Энтузиасты с XDA developers собрали неофициальный билд Lineage OS на базе Android 9. Кстати, именно в этой версии Android, по слухам, запатчили проблему 2038, что есть дополнительный приятный бонус! Можно продолжать быть кибердедом и 14 лет спустя :D

Смартфон бегает под этой версией операционки не то что бы сильно бодро, но достаточно быстро, чтобы не раздражать и чтобы уметь воспроизводить аудиофайлы. А больше от него ничего и не надо. Раз в месяц я меняю обои на новые и нескучные. Если делать это через стандартный интерфейс Lineage OS, то вот там начинаются дикущие тормоза. В остальном же жить вполне можно.

В прошивке есть root через интерфейс ADB. Это помогло мне сделать ремап кнопки спуска затвора камеры на функцию toggle play/pause путём простой замены кодов в кеймапах. Сама же фирмварь позволяет при заблокированном и выключенном экране использовать долгое нажатие Volume keys как Fast Forward и Rewind. И вот это самое охеренное! Можно полностью оперировать плеером вслепую, не доставая его из кармана! Как же долго я хотел это всё вернуть, и вот получилось, наконец.

Unlauncher

Скачать тут. Nuff said, это лучший лончер, если вы хотите сделать тупофон из смартфона. Выглядит неплохо, есть цветовые темы и всевозможно гибкие настройки для запускалки такого типа. Не поддерживает виджеты, но они и нахер тут не нужны. Зато можно переименовать любое приложение и даже добавить эмодзи. Что я и сделал, выглядит аккуратненько теперь.

Vanilla Plus (мой форк Vanilla Music)

Тут сложно. Я пользовался плеером Vanilla аж с самого начала моего захода на территорию Android. Любимый, простой, достаточно функциональный, хотя для современных смартфонов уже немного ржавый.

Зачем мне понадобилось его форкать? Я начал играться с темами оформления, потом плавно перешёл к починке самых противных багов. На момент написания в апстрим принято уже несколько моих пулл-реквестов, в процессе ревью висит ещё один однострочник, однако есть и такие функции, которые вряд ли вообще нужны будут оригиналу.

Да, плеер умеет бродкастить метаданные проигрываемой музыки, но далее с этим необходимо работать приложениям-скробблерам. Эти приложения требуют подключения к интернету, а у нас по условиям задачи это запрещено. И тут я вспомнил, что треки со своего старого перепрошитого айпода скробблил путём скармливания логов утилитке в терминале. Повод закатать рукава и залезть внутрь кода. В оригинальный event emitter было добавлено немного логики для записи логов в файл. Почитал спеку, подровнял обработку событий и добился чего хотел!

О принимающей части скробблера будет дальше, а пока что, если интересно, можете посмотреть код моего форка.

AntennaPod (подкасты)

Скачать тут. Вне сомнений, лучший проигрыватель подкастов. Есть функция создания "виртуальных" фидов из локальных директорий, чем я и пользуюсь. Загрузка осуществляется через компьютер и только через него. Я слушаю довольно много всяких политобзоров (оставлю названия каналов при себе, тема очень срачегонная), а также Sci-Fi. Часто замечал за собой, что в поисках очередной дозы быстрого дофаминчика я начинал "доить" эти фиды на апдейты. С оффлайн-плеером апдейты по воздуху получать нельзя, а после прослушивания эпизоды для освобождения места удаляются. Получилось прям очень хорошо, всячески рекомендую подход с подобным гейткипером.

Voice (аудиокниги)

Скачать тут. Я брал довольно старую версию, новая сильно тормозит и в ней уёбищное оформление Material You. Все базовые функции проигрывателя аудиокниг, а именно таймер сна, закладки и возобновление воспроизведения с нескольких секунд раньше момента постановки на паузу. Сейчас переслушиваю цикл "Дюна" Фрэнка Герберта.

Кстати, автор программы пишет релиз-ноуты в стихах, что очень необычно как минимум!

Audio Recorder

Скачать тут. Простой диктофон, делает то, что от него требуется. Как человеку с ADHD мне необходимо записывать на ходу рандомные мысли. Экран RAZR i всё же не очень подходит для набивания текста на ходу, а вот диктофон — очень даже записная книжка. Дома уже я эти записи переслушиваю, обрабатываю и потом удаляю.

Amaze File Manager

Скачать тут. Иногда для дебага мне требуется побродить по файловой системе. В Amaze есть встроенные функции для просмотра различных форматов файлов. Размер небольшой, жрать не просит.

rb-scrobbler

Скачать тут. Основная рабочая станция у меня бегает под управлением Linux Mint. В ней я настроил правило udev, которое с помощью rb-scrobbler забирает файл по указанному пути и затем удаляет его. Всё происходит ровно так, как это было 14 лет назад с моим айподом.

Заключение

Лучшее достижение этого проекта — экранное время основного смартфона. Оно упало с 5-6 часов в день до 1.5 на минимуме. В своём доме я перестал всюду носить за собой телефон, а просто назначил ему отведённое место. Если возникает фантомное желание пожмякать брусочек в руке и потом его разблокировать его, то Антизалипод покажет, что нового контента нет, зато всегда можно довольствоваться существующим!

Проект в принципе годится для установки на любой старый Android-девайс c операционкой 8.x+, скачать можно здесь.

Связанные посты
28 комментариев 👇

Просто каеф, а не проекты у тебя. Интересно, если взять мобилу старую с выделенным DAC чипом (много хрений от сони) и сменной батарейкой (моё требование), то по идее можно из старой мобилы сделать аудиофильский плеер по твоим чертежам, плюс и уменьшить e-waste.

  Развернуть 1 комментарий

@mighty_conrad, спасибо!

Внезапно, ещё поздние LG вполне себе, но там аккумуляторы сложнее менять, конечно.

Я свой менял по гайдам iFixit. Если корпус разбирается без фена и спирта, то это вполне себе replaceable battery.

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@mighty_conrad, Насколько я помню, у этих рейзеров был OTG, то есть можно юсб-периферию подключать. Следующим уровнем задротства могло бы быть подключение внешнего компактного ЦАП для наушников)

А 99999 левелом было бы спаять такой ЦАП самому, и сделать на нем аппаратные кнопки управления плеером и громкостью😅

  Развернуть 1 комментарий

@glitchman, мой девайс неплохо драйвит Chi-Fi мониторы, иногда далеко за пределы болевого порога 😂

Поэтому громкость у меня часто на серединке. Это были те времена, когда вендоры особо не парились повреждением слуховых нервов кастомеров.

  Развернуть 1 комментарий

@glitchman, у меня сейчас и так Qudelix 5K плюс чайфайные топы за своих денег Moondrop Starfield. Заколебавшись с настройкой airsonic сервака, забил и взял Tidal пробник, если сильно хочется какой-нибудь митолкор в лосслесс послушать. Всё тянет, всё слышно.

А цап-царапку мобильную свою делать смысла большого не вижу, чипы, что умеют обрабатывать MQA начинаются от 80 евров на Mouser за штуку, иначе классическое ДоРоЖе И хУжЕ.

  Развернуть 1 комментарий

@mighty_conrad, когда-то ровно по таким запросам делали аудиомонстра из Samsung Galaxy S3.
У меня даже был такой, но я всегда перебивался наушниками за 300-900 рублей и решил, что мне это всё аудиофильское не упало ни разу.

  Развернуть 1 комментарий
Alex Gift English разговорный / деловой: весело! 7 марта в 19:56

Azer, вы классный человек с суперными проектами. Всегда плюсую!

  Развернуть 1 комментарий

@Alex_Gift, спасибо большое!

  Развернуть 1 комментарий

Когда дочитал до скробблинга, прям свело олдскулы. Но пока жамкаю айфон 13 мини, таких больше не делают.

  Развернуть 1 комментарий

@cc00ffee, спасибо!

У меня есть такой бзик, не могу слушать музыку без скробблинга. Потом интересно бывает раскапывать геологические эпохи собственной меломанской эволюции.

Этот год я хочу сделать годом Last.FM, у меня даже интернет-радио записывается туда, а слушаю его я очень часто за работой.

  Развернуть 1 комментарий

Проект зачетный! Не бывает ломки от того, что онлайн-контент недоступен?

И всё-таки какой же крутой рэйзер был у моторолы! До сих пор восхищаюсь его дизайном и компактностью. А экран, амолед с настоящим черным цветом, почти что безрамочный.. И кевлар этот на спинке...

Через меня 5 штук razr M прошли (который не на Intel, a на snapdragon). Сам два из них юзал, плюс друзьям/знакомым насоветовал. Идеальный аппарат был.

Сейчас лежат два штуки (белый и синий) мертвым грузом, потому что экраны у них сдохли. Выкидывать жалко, чисто как память по классным тактильным брусочкам))

  Развернуть 1 комментарий

@glitchman, спасибо!

Так в этом и весь прикол, чтобы вызвать ломку и преодолеть её, заменяя быстрый дофаминчик думскроллинга на тактильный кайф и удовольствие от переоткрытия старого.

Я ж заметил даже за собой, что в Spotify мне хочется как можно скорее перепрыгнуть через кринж переслушивания первых альбомов Linkin Park, Evanescence, P.O.D. и Rammstein. На оффлайн девайсе всё возвращается на места и вновь обретает смысл. Я не знаю как это работает. Сплошная эзотерика на первый взгляд. Однако Spotify со своими алгоритмами всегда может подсунуть что-то новее и лучше. С классическими айподами такой возможности нет, поэтому переоткрытие является натуральным исходом.

  Развернуть 1 комментарий

Автор, золотые руки и чудо голова! Прочитал пост и захотелось так же, чуть на Авито не купил плеер.
Сейчас понимаю, что с моим сдвг не варик отвлекаться еще и на это, решил вопрос иначе.

А какой стек у вас под капотом, чтобы делать такое?

  Развернуть 1 комментарий

@TrustMetall, спасибо большое, очень приятно получать такой фидбек 🥰

Вообще говоря, я SRE, то есть сантехник по пайплайнам. С этого и началось, я надыбал образ контейнера для сборки приложений под Android. А там тихонько ковыряться начал. Как-никак один семестр в универе мы проходили Java 2 SE.

  Развернуть 1 комментарий
Novikov Nick Python инженер/MLOps 4 апреля в 10:42

Какой своевременный пост -- как раз второй день прессую продавца на местной барахолке продать мне плеер с кнопками за мою цену. Очень соскучился по возможности переключать треки просто наощупь, без дисплея. И хотя TWS наушники такую возможность вернули, но у них своих проблем хватает.

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Спасибо за пост, интересная концепция. А сама моторола какого года? Батарейка не бобо у неё? Надолго хватает?

Вспомнил свои плееры формата "флешка" из студенчества :D 4 гигабайта богатств и зарядка от втыкания в комп, кайф какой был!

И отдельно спасибо за Antennapod, давно искал куда слезть с нынешнего приложения, выглядит приятно, попробую (не для оффлайна впрочем).

  Развернуть 1 комментарий

@kudjo, спасибо и тебе!

Моторолка чувствует себя прекрасно, она 2012 года, если не изменяет память. Батарейку я поставил новую, хватает дня на три. Заряжаю, кстати, тоже от десктопа в основном.

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Ух, я тоже на Leboncoin (французское Авито) полез уже искать конкретно эту модель на вторичке, еле остановился.

  Развернуть 1 комментарий

@cc00ffee, вот это эффект!

Ну слушай, за 20 евро можно себе позволить небольшую слабость, если не впроголодь живёшь. В конце концов, можно продать, если надоест.

  Развернуть 1 комментарий

@rcmd, Ну всё же решил, что слишком радикально, останусь пока в рабстве айфона (он у меня маленький)! Зато в понедельник буду брать с рук Kindle DX: это такой киндл 2010 года с большим экраном, аппаратной клавиатурой и безлимитным 3G. Думаю сделать из него очень тонкий терминальный клиент или учит дочку Питону.

  Развернуть 1 комментарий

Nokia 5310 Xpress Music - тоже подойдет для музыки)

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб