вменяемый open-source плеер под Android
Посоветуйте вменяемый open-source плеер под Android. Я даже купил Poweramp и он меня устраивал, но только пока он работал. Теперь я поставил до CM12 и он не видит лицензию, автору накласть. Вопрос: среди открытых плееров есть хоть один вменяемый? Хотя бы чтобы альбомы сортировал по году, а не по алфавиту. Ну и скробблинг нужен. Пока такое нашел только в Vanilla Music, но у него инопланетнейшая логика во всем остальном и он почему-то не у всех альбомов видит год. Есть что на примете?
И как там альбомы сортировать по году? Или черт с ними с альбомами, хотя бы по директориям играть.
И там аж 2 плеера, и то один VLC, а второй — Kodi. Тогда уж https://f-droid.org привел бы, умник.
Абсолютно внезапно поставил еще раз, включил сортировку по году и он всего лишь 1 альбом Annihilator’а поставил не туда. Может и сойдет.
У него есть куча мелких неприятных багов. Но среди того, что я нашёл, это лучший опенсорсный плеер.
Есть ещё NexMusic, основан на коде Apollo, но проприетарен(привет, BSD!). Впрочем, им и пользуюсь.
Источник
Модифицируем плеер Vanilla Music под Android
Порой нам недостает функциональности приложений, которые мы используем каждый день. Имея при этом навыки программирования, хочется сделать что-нибудь свое: продукт, который будет иметь все необходимые функции, которые вам нужны. Так я решил написать свой собственный андроид-плеер, но столкнулся с серьезной трудностью — чтобы сделать более-менее пригодный плеер, требуется катастрофически много времени на программирование, а тем более на отладку. Погуглив немного на тему open-source плееров для андроид, я быстро нашел проект Vanilla Music в Google Play, а затем и на Github. Скачав исходники, я вскоре вскоре принялся его модифицировать под свои нужды.
Я уже давно пытаюсь освоить программирование под Android и пишу приложения под собственные нужды, иногда выкладывая их на Google Play. В этот раз мне захотелось плеер с переключением песен по клавишам громкости. Это конечно неудобно, если необходимо поменять громкость -поэтому вторая версия идеи звучала так: переключение песен клавишами громкости должно происходить только тогда, когда телефон находится в кармане, иначе просто регулировать громкость. Второе, что мне хотелось бы иметь в функционале плеера — возможность сместить время остановки воспроизведения, если устройство активно использовалось. Итак, приступим к практике!
Открыв исходники плеера, я принялся разбираться, где и как происходит управление воспроизведением музыки. Как оказалось — это класс PlaybackService, судя по наличию функций для воспроизведения, остановки, переключения треков. Этот функционал был заложен в функцию performAction этого класса:
Как видим, названия команд звучат весьма недвусмысленно. Выделяем нужные нам команды NextSong (следующий трек), PreviousSong (предыдущий трек) и PlayPause (установить паузу при воспроизведении или воспроизвести при паузе). Для того чтобы отловить нажатие клавиш громкости внутри сервера (это сложнее, чем внутри Activity), создадим функционал оценки изменения громкости. Для этого нам понадобится ContentObserver. Внесем класс в пространство PlaybackService:
Чтобы SettingsContentObserver заработал, необходимо связать его с Playbackservice. Для этого в функции onCreate() класса SettingsContentObserver запишем следующие строки:
Чтобы класс SettingsContentObserver смог определять нажатия клавиш громкости, будем считывать и анализировать на изменения громкость из объекта mAudioManager, который уже объявлен и инициализирован в классе Playbackservice.
Вот код измененного класса SettingsContentObserver:
SettingsContentObserver использует также следующие переменные класса PlaybackService (которые необходимо объявить):
. Т.к. мы работаем с оценкой громкости, если пользователь будет переключать треки — громкость изменится, поэтому мы запустим отдельную фоновую задачу, которая установит громкость в прошлое значение, если произошло ее изменение (запуск этой задачи можно найти в блоке кода выше, он выделен комментарием):
Итак, функционал для переключения треков готов. Для того чтобы треки переключались при условии нахождения смартфона в кармане, нам нужно будет задавать переменную isproximity=true (см. класс SettingsContentObserver, метод onChange), при оценке даных с датчика приближения. Чтобы включить его в работу, отыщем метод private void setupSensor() и модифицируем ее следующим образом, добавив слушателя для датчика приближения:
Чтобы получать и оценивать данные от сенсоров, используем уже присутствующий метод public void onSensorChanged(SensorEvent event) и добавим в его начало следующий код:
В этом участке кода мы меняем глобальную переменную класса Playbackservice isproximity в соответствии с данными от датчика приближения и, таким образом, включаем или отключаем возможность переключения треков по при нахождения телефона в кармане. Если рассмотреть этот метод, то ниже можно будет увидеть считывание и обработку данных из акселерометра, а именно это нам нужно, чтобы оценить, брал ли в руки пользователь свой смартфон, для отложения остановки воспроизведения. Для определения активности я экспериментально определил порог срабатывания для акселерометра, если пользователь взял смартфон в руки, добавив следующий участок кода (он отмечен комментарием) в методе onSensorChanged:
Итак, мы выбрали значение, при котором акселерометр показывает, что пользователь взял телефон в руки, теперь остается только выполнить код по отложению отключения. Т.к. отключение по времени уже реализовано в Vanilla Music, не составило труда найти строки кода, выполняющие остановку по времени: они находятся в функции public void userActionTriggered():
Значение mIdleTimeout — время отключения, считанное из настроек. Поместим этот код в обработчик события из акселерометра, при взятии его в руки (enable_defer_stop == true — включить опцию отложения остановки воспроизведения ):
Подведем итоги: мы модифицировали исходный код Vanilla Music, с этими изменениями он может переключать треки в кармане и отлаживать свое засыпание на заданное время, если пользователь брал телефон в руки, в результате получилось сделать приложение под себя с минимальными затратами по времени, в этом и есть большая польза Open Source. Код, полученный в результате модификации вы можете увидеть здесь, а также скачать исходный код проекта.
UPD: Следующая статья посвящена добавлению еще одной интересной возможности.
Источник
Сравниваем 6 популярных музыкальных плееров под Android с поддержкой BitPerfect-доступа к USB ЦАПу. Кто победит?
Напоминаю, что в прошлом сравнении у нас схлестнулись 5 бесплатных музыкальных плееров под Android с поддержкой Hi-Res Audio. Кто пропустил, рекомендую почитать сначала первую часть. Теперь пойдет самая жара, так как сегодня в сравнении примут участие 6 музыкальных плееров, которые поддерживают BitPerfect доступ к USB ЦАПам. То есть через них можно напрямую выводит звук на тот самый «свисток», о которых так часто заходит речь в наших обзорах. Для примера можно вспомнить воистину народные ЦАПы: iBasso DC03, HiBy FC3, TempoTec Sonata HD II или E1DA 9038D. Это я привел по одному из разных ценовых категорий, еще больше вариантов можете посмотреть в соответствующей подборке на этом же ресурсе.
В сравнении примут участие (о чем вы меня неоднократно просили) PowerAmp, Neutron, USB Audio Player, NePlayer, HiBy Music и FiiO Music. К сожалению, плееры от Shanling умеют работать только со своими устройствами. Исключались также программы не поддерживающие разрешение 24 бита 96 кГц, которое по определению является нижней границей Hi-Res Audio и на котором у нас происходят все измерения. Из аппаратуры использовался аудиоинтерфейс Motu M4, а в качестве источника я взял Hi-Res аудиоплеер на Android Shanling M3X и к нему USB ЦАП iBasso DC03. Уровень громкости составляет 100%, все приложения скачаны из Play Market, величина дополнительной нагрузки — 32 ома. В процессе я делаю ровно 4 замера, чтобы исключить случайные отклонения. Итак, все формальности учтены, пора представлять участников.
Участники
О HiBy Music и FiiO Music мы уже говорили в первой части сравнений. Это крупные производители аудиообрудования с которыми уже давно принято считаться у всего аудиофилского сообщества. Кроме того, HiBy Music много лет был известен как поставщик программного обеспечения для большого числа аудиодевайсов из Китая и не только. Возможностей у этих музыкальных плееров просто масса: разного вида эквалайзеры, поддержка Hi-Res форматов, MQA, DSD. В общем, довольно серьезные программы.
PowerAmp, пожалуй что был первым нормальным плеером с поддержкой lossless форматов на Android. Он реально пионер в этой сфере, поэтому и количество скачиваний у него превосходит все возможные пределы. Звуковой движок менялся уже несколько раз, есть все необходимые настройки, эквалайзер и красивые эффекты визуализации. По умолчанию схема формирования сигнала у PowerAmp какая-то просто дичайшая, но ее можно настроить.
Следом за PowerAmp появился аудиофилский Neutron. Он также поддерживает USB ЦАПы, имеет целую кучу разнообразных настроек, есть даже тонкости для DSD сигнала. Интерфейс конечно тут на любителя, но то дело второе.
USB Audio Player изначально предназначался исключительно для воспроизведения музыки через USB ЦАПы, но по просьбе пользователей его функционал был расширен. Один из лучших в своем классе, не единичны случаи, когда производители аудиообрудования предустанавливали его на свои девайсы в качестве основного музыкального софта. Мой фаворит, думаю, что именно он превзойдет всех.
Следующий участник — NePlayer. Играет он только из плейлиста, причем к папкам доступа нет вообще. Родом, судя по всему, из Японии. Очень мало информации, однако USB ЦАПы он тоже поддерживает и умеет разделять музыку по качеству.
Тестирование
1. Начнем с неравномерности АЧХ в диапазоне 40 Гц — 15 кГц (Дб).
HiBy Music | -0.06 | -0.18 |
FiiO Music | +0.04 | -0.09 |
PowerAmp | -0.05 | -0.24 |
Neutron | -0.06 | -0.18 |
USB Audio Player | -0.06 | -0.17 |
NePlayer | -0.06 | -0.17 |
По цифрам видно, что все справились очень хорошо, но Neutron зачем-то обрезает частотный диапазон на 20 кГц. По этой причине он здесь оказался аутсайдером.
2. Следом идет уровень шума (Дб).
HiBy Music | -108.8 |
FiiO Music | -108.8 |
PowerAmp | -108.2 |
Neutron | -107.8 |
USB Audio Player | -108.8 |
NePlayer | -108.5 |
Тоже все в принципе молодцы, худший результат у Neutron.
3. Самый важный, на мой взгляд, параметр — динамический диапазон (Дб).
HiBy Music | 109.0 |
FiiO Music | 102.2 |
PowerAmp | 108.2 |
Neutron | 107.8 |
USB Audio Player | 109.0 |
NePlayer | 108.6 |
В этом случае сплоховал FiiO Music и чуть лучше результат у Neutron. Самый же топ показали HiBy Music и USB Audio Player.
4. Ну и последняя пара — уровень гармонических и интермодуляционых искажений в процентах.
HiBy Music | 0.00080 | 0.00165 |
FiiO Music | 0.00078 | 0.314 |
PowerAmp | 0.00082 | 0.00323 |
Neutron | 0.00080 | 0.010 |
USB Audio Player | 0.00078 | 0.00168 |
NePlayer | 0.00078 | 0.00166 |
Аутсайдеры опять FiiO Music и Neutron, все остальные почти ноздря в ноздрю.
Выводы
Какие можно подвести итоги? Если вы планируете использовать со смартфоном мобильный, ну или даже стационарный, USB ЦАП, то выбирать FiiO Music и Neutron не нужно, у них самые низкие показатели качества среди измеренных нами. На удивление неплохо себя показал PowerAmp на своем новом движке и неочень популярный NePlayer. От них, честно скажу, не ожидал. Ну а реальными лидерами оказались бесплатный HiBy Music и платный USB Audio Player. Разницы между ними в данном аспекте использования вообще никакой. Однозначно могу их рекомендовать и использовать по назначению. Тем более, что они к тому же еще и поддерживают стримминговые сервисы в режиме BitPerfect, а это вообще высший уровень качества.
На этом у меня все. Если понравилось, оставляйте свои комментарии, обсудим, а возможно и дополним сравнения новыми участниками. Предлагайте ваши варианты с коротким пояснением, почему именно его. Ну а выбрать себе хороший мобильный ЦАП можно, например, из моей подборки.
Источник