Купил новый MP3 плеер: Samsung YP-T9

На днях умер мой старый плеер Samsung YP-F1 (правда потом он реанимировался), поэтому было решено купить новый. Я уже давно положил глаз на YP-T9, прежде всего из-за поддержки Bluetooth. К тому же в нём присутствует т.н. аудио-библиотека, наподобие той, что есть в Quodlibet. То есть все песни в нём индексируются и их можно просматривать по жанрам, исполнителям или альбомам.
Плеер оказался действительно достойным по качеству звука и удобству использования, однако при попытках подружить его с Linux обнаружился ряд проблем
Для начала надо сказать об общеизвестных проблемах этого плеера, которые часто упоминаются в Интернете:
Плеер не распознаётся как USB Mass Storage. Проще говоря, он не подключается как обычный флэш-накопитель. Эта проблема упоминается только на англоязычных сайтах, так как в США этот плеер продаётся с какой-то дурацкой прошивкой, не поддерживающей UMS. Решается это поиском нормальной прошивки и перепрошивкой. Для России это неактуально, у нас всё работает из коробки.
Аудио-библиотека работает только при закачивании песен с помощью специальной программы Samsung Media Studio. Об этом в частности пишет в своём обзоре сайт mobile-review.com. К счастью эта проблема также решается использованием более свежей прошивки. При этом в меню системных настроек плеера появляется пункт "Обновление библиотеки". Обновление надо производить после закачки новых песен или удаления старых. В моём плеере этот пункт был сразу.
Теперь о проблемах, с которыми столкнулся лично я и о способах их решения:
QuodLibet не распознаёт плеер как Media Device. Это значит, что нужно вручную копировать файлы на плеер, при этом неизбежно будут возникать проблемы с Windows-несовместимыми символами в именах файлов (если копировать через QuodLibet, то он об этом позаботится). После недолгого изучения исходников QuodLibet я обнаружил следующее:
- Список медиа-устройств QuodLibet получает из HAL (hardware abstraction layer)
- Устройство должно предоставлять функцию
portable_audio_player(предоставляемые функции называются capabilities в терминологии HAL).
Открыв hal-device-manager я обнаружил, что мой плеер предоставляет только функцию storage, то есть распознаётся как простая флэшка. Подключив свой старый плеер (который неожиданно ожил) я убедился, что он функцию portable_audio_player предоставляет. Настала очередь ковырять HAL. И вот что я наковырял:
В HAL имеется специальная база устройств. В ней перечислены устройства различных производителей, указаны их возможности и т.п. Именно на эту базу HAL опирается при определении capabilities. База эта до недавнего времени входила в состав пакета hal, теперь она вынесена в отдельный модуль hal-info. Описания MP3-плееров находятся в файле /usr/share/hal/fdi/information/10freedesktop/10-usb-music-players.fdi
Оказалось, что хранится там всё в достаточно простом формате. Чтобы добавить свой плеер в базу я просто скопировал запись, соответствующую моему старому плееру и поменял в ней product_id (его я узнал через hal-device-manager):
<!-- YP-T9 -->
<match key="@storage.originating_device:usb.product_id" int="0x5055">
<merge key="portable_audio_player.type" type="string">generic</merge>
<merge key="portable_audio_player.access_method"
type="string">storage</merge>
<append key="portable_audio_player.output_formats"
type="strlist">audio/x-ms-wma</append>
<append key="portable_audio_player.output_formats"
type="strlist">application/ogg</append>
<append key="portable_audio_player.input_formats"
type="strlist">audio/mpeg</append>
</match>
(соответствующий патч я отправил в список рассылки HAL)
После этого оставалось только перезапустить hal и переподключить мой плеер к компьютеру. Теперь Quodlibet распознаёт его как полноценный плеер. Проблема решена. Но это ещё не конец.
При копировании файлов и обновлении библиотеки, плеер отказывается показывать список исполнителей, альбомов и т.п. Потратив очень много времени на выяснение причины, я пришёл к выводу, что он либо не поддерживает тэги IDv2, либо не поддерживает в них кодировку UTF-8. Так или иначе, если в файле присутствуют только тэги IDv1, то всё работает нормально. В моей музыкальной коллекции используются только тэги IDv2 в кодировке UTF-8. Кстати, на сегодняшний день это единственно правильный способ хранить тэги в mp3 файлах.
Так как переписывать тэги для всей моей коллекции мне совершенного не хотелось, я написал скрипт, который нужно применять к файлам, уже записанным на плеер. Этот скрипт ищет mp3 файлы, и если в них есть тэги IDv2, то создаёт IDv1 тэги в кодировке cp1251, а тэги IDv2 удаляет. Сприпт этот можно взять тут. В нём я использую библиотеку python-mutagen, она же используется в Quodlibet. При этом пришлось изменять одну из функций mutagen, чтобы записывать тэги в cp1251 (мне стыдно за это).
Скрипт запускается так: python IDv2toIDv1.py /path/to/player/mountpoint
Если вы собираетесь воспользоваться этим скриптом, имейте в виду - этот скрипт очень плохой. То есть работает-то он нормально. Но то, что он делает - очень плохо. Вы не должны использовать тэги IDv1 - вместо этого вы должны влиять на производителей плееров, чтобы они сделали нормальную поддержку тэгов IDv2 в UTF-8.
Комментарии
Импортированы из оригинального блога.
А не мог бы подробнее расписать блутуз. С какими девайсами контачит, как это происходит. Как его подключить к компу и чем мне это будет полезно. как использовать в нём блутуз на сто процентов?
Я использую BT только для связи со стереогарнитурой. Подключается всё элементарно - ребёнок разбрерётся после прочтения инструкции.