Обновить

Я написал свой музыкальный плеер со своим стримингом: Android, Windows, Linux и сервер на Rust

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.3K
Всего голосов 23: ↑23 и ↓0+27
Комментарии36

Комментарии 36

Сегодня я узнал что оказывается можно тональность прямо в плеере определять... Поставлю пожалуй плагин в foobar себе.

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

А если в композиции тональность меняется несколько раз, плеер что и как определяет?

общую, среднюю по всему треку, это было бы слишком расточительно по ресурсам если бы я измерял каждый момент трека(

А можете вкратце рассказать, как определяется тональность композиции? ИМХО, это вполне может потянуть на рассказ в виде отдельной статьи.

Я бы с радостью составил статейку на эту тему, но я так понял мой технический уровень недотягивает до уровня хабра(

Попозже могу описать как я решил эту задачу, отдельным комментарием

Напишите, пожалуйста, это реально интересно. Я хоть и сам музыкант, но не очень понимаю, как программно определять тональность даже с использованием нейросетей. Просто бывает, что слушаешь какую-нибудь симфонию Прокофьева до-диез мажор, а в её звучании мажор как-то не очень присутствует :-) Вот и как определять здесь тональность?

Да и в более простой музыке это совсем непросто может оказаться.

Хорошо, сегодня подготовлю статейку об этом)

а как настраивает бит-перфект в вашем плеере?

Зависит от платформы.

На винде. Внизу окна есть кнопка "Звук" (иконка эквалайзера). В ней выбираете свой ЦАП и включаете "Эксклюзивный режим (bit-perfect)". Плеер занимает устройство целиком через WASAPI Exclusive и выводит звук с частотой и разрядностью файла, в обход микшера Windows. Там же видно, что сейчас реально идёт на выход, например "Сейчас: эксклюзивно, 96.0 кГц". Пока плеер держит устройство, другие программы вывести на него звук не могут.

Линукс. В том же разделе выбираете устройство вида hw:…. Звук идёт напрямую в ALSA, мимо PipeWire и PulseAudio.

Android. Настройки → Аудиотракт → "Bit-perfect по USB". Нужны Android 14+ и USB-ЦАП. Используется системный API Android 14 для bit-perfect вывода, поэтому результат зависит от прошивки и железа: на части телефонов производитель его не поддерживает. Если режим реально включился, приложение само отключает EQ, ReplayGain, dither и кроссфейд. На телефонах без поддержки есть режим "Hi-Fi": плеер не трогает сэмплы, но системный микшер Android с ресемплингом остаётся.

В любом режиме bit-perfect ломают эквалайзер, выравнивание громкости и регулировка громкости не на 100%. Громкость в этом режиме лучше крутить на самом ЦАПе.

Мне больше всего не хватает в классических музыкальных плеерах это отсутсвие рекомендаций - благодаря им я встретил много потрясающих исполнителей: известных, которых игнорировал раньше, переоткрыл заново (считай находился в вакууме собственной коллекиии), так и маленьких, о которых мало кто знает. Поэтому приходится сидеть на ужасных популярных клиентах типа яндекс музыки. Хочу, чтобы была и собственная коллекция, и качественные рекомендации, и плеер с человеческим лицом, и миксы. Раньше слушал или по исполнителям или по альбомам или по плейлистам (вручную утомительно делать) или все сразу. Да я готов платить подписку за использование api стриминговых сервисов, если это позволит реализовать все мои хотелки!

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

Реализовать собственную площадку это слишком радикально :) Я про то, что существующих сервисов много, но отсутствует возможность пользоваться ими кроме как через собственные клиенты, со всеми их недостатками. Жаль, что нельзя переиспользовать имеющееся даже при возможности оплачивать такой доступ.

Ну если прям хочется, я реализовал на сервере OpenSubsonic, просто ставишь сервер через скрипт, настраиваешь домен и подключаешь. Потом в приложениях что поддерживают OpenSubsonic API вставляешь ссылку из веба сервера своего и слушаешь. Возможно я все еще не понимаю что ты пытался донести, сорян

У меня как-то давно еще была хотелка оперативно узнавать выходы новых релизов любимых исполнителей. Как это физически возможно? Делать парсилку миллионов соцсетей и сайтов? Вручную проверять? Стриминговые сервисы дают это из коробки

В основном они на ютубе публикуют анонсы (мб в соц сетях). Оформлять как бы подписку-проверку на анонс и получать уведомление. Идею ты мне интересную подкинул, может быть покумекаю как сделать можно) Спасибо

За тето и мику +, за вайбкод -, выходит ноль

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

Визуал не мое, не умею придумывать, пришлось к клауду прибегнуть, так бы визуал шакальный был. А так плеер работает и на линухе) Ядро я кропотливо месяц ручками реализовывал. За тето благодарен)

Ну ладно, за ядро лайк поставлю.

А почему именно японские-то. Можно сделать плеер для фанатов бурзума или скриллекса

З. Ы кучу альбомов вокалоидов имею, пару фигурок, в секае 2 года и играм по вокалоидам до секая 3ку. Рэспэкт получается

Японский потому что душа упала туда, стремлюсь, язык учу) Чисто для себя делал ибо коллекции большие да в основном то чего на площадках нет (Demetori как пример). Подумал почему бы не поделиться с людьми как я, да и облегчить жизнь работягам)

Может вас заинтересует идея - читалка по манге и манхве, можно и не русскоязычные сайты. То что на рынке сейчас есть это дикий мусор, то проблемы с сервер-клиент, то подключение, то поиск. Есть одно приложение, оно для меня базовое уже 9 лет как читаю на английском (у нас жлобы и перевод глав это полгода). Может когда-нибудь реализуете в качестве эксперимента. Мобильные приложения не мой профиль, увы

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

Я подумаю над этим. Учитывая что сейчас достаточно сервисов по чтению японского/корейского творчества, можно как нибудь собирать это в одно место. Но советую лучше все равно приобретать бумажные копии, так удобнее, интереснее да и поддержать любимого мангаку тоже неплохо)

Я бы это назвал агрегатором сайтов. Нормального агрегатора у нас нет как и адекватных команд-переводчиков. Вы и сами прекрасно понимаете что те сайты которые предоставляют услуги чтения "за деньги", не заключают договора с японцами. По факту это тоже пальто

Да я б и покупал, только этого даже в продаже нет. Прям вообще

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

На амазоне проверил Bouryoku banzai, уже 72 глвы вышло, а книженции в переводе как не было так и не

Удачи вам

Тогда могу посоветовать только учить язык оригинала, увы) Спасибо большое!)

Удивительные совпадения, как раз этой ночью искал какой-нибудь плеер для своего MIAD01 (мобильный фубар уж как-то совсем надоел), и вот, даже вне этой тематики, совершенно случайно наткнулся на данный релиз. Самое примечательно, что мне все это очень близко: и яп музыка, и локальность плеера как таковая, и возможность синхронизации своих мобильных и стационарных устройств и библиотек. Собственно, хабр почитываю давно, но именно данный пост заставил меня тут зарегистрироваться чтобы оставить коммент.
Сразу столкнулся с тем, что не до конца понимаю логику работы библиотеки. Я могу выбрать отслеживаемую папку на самом телефоне, приложение начинает сканировать ее, и потом начинается импорт, Нами зачем-то в свою папку, видимо, перекачивает треки и в итоге через пару минут память телефона забита в ноль. Судя по весу, это явно не инфа про тональность/волну промотки и обложки. Что я делаю не так? Заранее спасибо за ответ, буду рад пользоваться приложением.
Попробовав импортировать 1-2 альбома, первые впечатления очень положительные, позже дополню ответ.

Привет, да, это немного странно работает и скорее всего я это переделаю, просто изначально было задуманно что библиотека все равно у меня не голая лежит на телефоне, так что я просто импортировал их в нами а внутренний механизм брал их и собирал к себе с нужными названиями (у каждого трека свой uuid), но я думаю ты прав в том, что это нужно исправить

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

И еще не очень ясна группировка по папкам при таком подходе - все треки в итоге в папке Импортированное, и других нет.

Ну и в целом, я лично привык именно что к папочным плеерам, у меня много электронной музыки, а, например, у тех же hardcore*tanoc почти все альбомы - это компиляция треков разных исполнителей. Тут закрался еще один нюанс - логика группировки по альбомам полностью копирует группировку по исполнителю, только первое в виде плиток, второе в виде списка. То есть если на альбоме один трек от одного исполнителя, второй от другого и т.д., то это будут разные альбомы. Это надо исправить, либо дать возможность выбора, потому что я понимаю, что коллаб Х и Y исполнителя могут быть в одном альюоме, а могут быт в разных, мб такое надо кому разделение (хотя я сомневаюсь).

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

А еще вопрос, планируются ли релизы на каких-то площадках, типа ф-дроид, иззи, гплей, гит релизы?

О, отлично, себе поставлю, как раз искал что-то подобное.

Один вопрос: кеширование есть на мобилках? Чтобы в самолёте слушать только скаченное, и с возможностью отдельно скачать пару любимых каталогов/групп?

Есть загрузка на телефон, изначально нацелено вообще на локальное прослушивание. Если поставили сервер то можно скачать трек на телефон и будет работать без сети

Спасибо,буду сейчас знакомиться и на пк и на телефоне и на плеере под андройд .Чего лично мне не хватает в плеере ,у меня коллекция 28 000 треков и растёт каждый день ,утром и вечером нахожу новую для себя музыку через яндекс музыку ,а днем на работе слушаю свою библиотеку через колонку ,и вот что я заметил.ни один плеер из тех что я слушал не работает корректно с случайным воспроизведением,то есть хочешь слушать музыку в случайном порядке ,но без повторений пока не проиграется вся библиотека ,а по итогу треки постоянно попрпадают в повтор и такое ощущение что гоняет одни и те же треки по кругу ,причём треков 100 наверное ,в power amp нашёл в настройках случайного воспроизвидения настройку что бы типо не повторялось ,но увы и ах это не работает .буду следить за проектом .И еще прочитал про библиотеку ,что плеер куда то копирует музыку ,если это так ,то это бяда ,у меня на телефоне нет места под вторую библиотеку ,а на плеере стоит карта памяти на 1.5 Тб ,которая уже на 826 гигов занята ,да и на пк версии по сути аналогичная ситуация ,поэтому если дела обстоят как описано выше ,то смогу пользоваться только тогда когда плеер научится пользоваться файлами из указанного места .

Проект крутой, спасибо. Но есть пара “но”:

  • Ну ведь есть же Jellyfin, бесплатный, огромная экосистема плагинов, куча приложений, в том числе и под IOS. Даже если нужного функционала нету, это решается за пару минут самописным плагином. Но нет! Миру срочно нужна очередная жертва неудачного слоп аборта, поддержка у которого прекратится через месяц, когда подписка Claude кончится.

  • Если хочется своего, тогда вы бы выбрали себе один конкретный фреймворк мультиплатформенный и на нем пишите сразу клиент с прицелом под мультиплатформу, не распыляя свое время и токены на поддержку индивидуальных клиентов для каждой платформы. Имхо, раз вы Jetpack затащили, тогда возьмите CMP, тот же Jetpack, только мультиплатформенный, переезд должен быть наименее болезненным. Tauri, хоть и заявляет поддержку мобилок, у него в этом плане все сложнее, чем у CMP\Flutter.

  • Остальные желаемые свистоперделки реализуются патчами поверх уже существующих клиентов(Finamp к примеру). В лучшем случае, в будущем вы сделаете PR в мастер, который по итогу примут, в худшем случае у вас будет личный форк, который поддерживать явно попроще, чем самопис.

У меня он "почти" кросс-платформенный, если так можно сказать. Реализован проект на tauri, единственное что я использовал kotlin и Jetpack Compose для нативного интерфейса и что бы меньше костылей городить. Я вообще затеял это чисто для себя в первую очередь, что бы закрыть свои хотелки в интерфейсе и удобстве, пост накатил что бы опыт получать, я же все таки обычный студент который хочет развиваться в профессии. Claude я использовал для создания интерфейса в tauri (что что, а React я не очень то знаю), все остальное ручками собирал с начала сентября на rust и kotlin. Если вы считаете что другие платформы лучше, я не заставляю и не призываю вас пользоваться моим софтом, я просто рассказываю с чем я сталкиваюсь в ходе разработки когда уже есть хотя бы какой-нибудь продукт который можно использовать

я же все таки обычный студент который хочет развиваться в профессии. Claude я использовал для создания интерфейса в tauri (что что, а React я не очень то знаю), все остальное ручками собирал с начала сентября на rust и kotlin

Желаю Вам удачи - всем бы студентам иметь столько желания развиваться и работоспособности. Отдельно хочу отметить, насколько многие (включая меня) недооценивают возможности современных средств разработки с помощью ИИ. Есть правильная фраза про то, что одни ищут возможности, а другие - причины (ничего не делать).

Спасибо большое!)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации