Наш ассоциированный член www.Bikinika.com.ua

Як Apple Music зламала мені життя. Двічі.

Уявіть собі, що ви - представник тієї нечисленної прошарку користувачів iTunes, який тримає свою медіатеку в ідеальному стані

Уявіть собі, що ви - представник тієї нечисленної прошарку користувачів iTunes, який тримає свою медіатеку в ідеальному стані. Кожному альбому в обов'язковому порядку присвоєно обкладинка, все теги прискіпливо прописані, навпаки тисяч композицій виставлений рейтинг, а кількість вручну підібраних плейлистів перевалило за другий десяток. Для вас музика - більше, ніж просто набір байтів. Свою музичну бібліотеку ви накопичуєте роками, купуючи альбоми в iTunes Store або вишукуючи рідкісні записи на торрентах. А самі файли зберігаються не по кутках жорсткого диска, а в автоматично згенерованої файлової бібліотеці iTunes - розкладені по татусям і завжди під рукою.

І ось в один прекрасний ранок ви помічаєте, що ваша чудова медіатека хвора. Так настільки хвора, що з кожною миттю бажання пристрелити його (щоб не мучилася) тільки збільшується. Адже перед очима діється якийсь справжній кошмар. З'являються кілька дублікатів одного і того ж альбому, обкладинки повністю поплутав, плейлисти виявилися наповнені абсолютно довільними піснями. Більш того, при відтворенні композицій їх зміст повністю розходиться з метаданими! «Ні, ні, це ж Боб Ділан, а не Cage the Elephant!», Крутиться у вас в голові, але ви не можете нічого з цим вдіяти.

Саме це і сталося зі мною. Різниця тільки в тому, що моя катастрофа не була спонтанною. Вона виникла не сама по собі. Вона виникла після поновлення iTunes до довгоочікуваної версії 12.2, яка принесла нам Apple Music і iCloud Music Library. Знали б я і сотні (якщо не тисячі) інших користувачів iTunes про те, що їх чекає, заздалегідь - не робив би різких рухів. Однак кнопка «Включити медіатеку iCloud» здавалася досить нешкідливою на перший погляд.

iCloud з якоїсь причини не впорався з вивантаженням бібліотеки в хмару, і біля кожної пісні поставив попередження про те, що, мовляв, ця композиція вже завантажена в iCloud. Перша підозра - підписка на iTunes Match, від якої я в кінці минулого року відмовився. Можливо, з якоїсь помилку файли все ще залишилися на сервері, і дії Apple Music викликали якийсь конфлікт. Множинні коментарі на форумах Apple підтверджують мою теорію, що з подібним жахом зіткнулися саме колишні передплатники iTunes Match.

Втім, чисто зовні здавалося, що вся плутанина викликана виключно збоєм в роботі самої програми - мовляв, спроба включити медіатеку iCloud викликала «лінійний зсув» метаданих. Причому «під роздачу» потрапили записи, додані в iTunes одними з перших - що також виглядало дивно. Досить швидко в надрах файлової системи були знайдені резервні копії безпосередньо медіатеки iTunes в форматі .itl - iTunes завбачливо робить збереження перед кожним оновленням ПЗ. (резервні копії знаходяться за адресою C: \ Users \\ Music \ iTunes \ Previous iTunes Libraries)

(резервні копії знаходяться за адресою C: \ Users \\ Music \ iTunes \ Previous iTunes Libraries)

«Підставивши» останній знайдений .itl замість поточної медіатеки, вдалося повернути iTunes до стану, в якому він перебував до оновлення. На жаль, на цьому мої муки тільки почалися. Виявилося, що користуючись своєю вседозволеністю в рамках каталогу iTunes Media, iTunes підмінив метадані не тільки в своїй базі даних, але і безпосередньо в файлах. Більш того, «виправлені» файли він розкидав всередині свого каталогу як душа забажає. Природно, попередня версія бази даних виявилася збентежена таким поворотом. Виходило, що при спробі відтворити деякі пісні, вилазила помилка про те, що «Немає запису».

Наступні абзаци описують процес «лікування» медіатеки в досить дрібних технічних деталях. Якщо вам це не цікаво - можете гортати статтю до наступного подібного попередження.

Та й як його взагалі можна було знайти? Битих пісень виявилося кілька сотень, шукати їх усіх вручну і переносити в початкове місце (по шляху так само вручну виправляючи метадані) - не варіант. Користуючись золотим правилом «ніхто тобі не допоможе, крім тебе самого», вирішив скористатися мовою програмування Python, вкрай зручним для написання подібного роду скриптів. Основне завдання стояла одна - вникнути в організацію файлу бази даних медіатеки iTunes і знайти спосіб визначити «минуле життя» зіпсованого файлу, щоб потім повернути його на місце.

Подібна лазівка ​​знайшлася досить швидко. iTunes після запуску з новим .itl файлом автоматично генерує XML документ, в якому і зберігає інформацію про свою медіатеці. У XML файлі можна знайти інформацію про кожну окрему композиції - назва, альбом, виконавця, жанр і так далі. Найцікавішим полем виявилося «Persistent ID» - це кодовий набір літер і цифр, який присвоюється файлу в момент додавання його в медіатеку і не змінюється, що б з ним не відбувалося. Саме по цьому полю і можна було визначити, що ж за пісня насправді знаходиться перед нами. А враховуючи, що в інформації про пісню також прописувалося її місцезнаходження, завдання нарешті стала цілком зрозумілою і відчутною.

Тобто, потрібно було порівняти два XML файлу - з правильною інформацією і з неправильною інформацією. У разі, якщо у пісень з однаковим Persistent ID розходиться місце розташування файлу, потрібно просто перемістити його, попутно очистивши його від метаданих - сам iTunes потім «підтягне» їх зі своєї медіатеки.

Зізнаюся, навички розробки на Python у мене досить посередні, тому для реалізації цього простого алгоритму мені довелося досить помучитися. При написанні програми були задіяні вбудована бібліотека plistlib (який перетворює plist-XML в зручно відформатований «dict») і зовнішня бібліотека mutagen (для роботи з ID3-тегами і не тільки). У підсумку розробка та налагодження зайняла у мене трохи більше восьми годин, проте скрипт, отриманий на виході, робив саме те, чого я від нього і очікував.

Я не буду викладати скрипт у відкритий доступ, так як для його функціонування потрібні особливі умови і я не можу гарантувати його працездатність в кожному окремому випадку. Втім, якщо ви, як і я, зіткнулися з описаною вище проблемою, обов'язково зв'яжіться зі мною - я і код надам, і розповім, як ним користуватися. Актуальні контакти ви завжди знайдете в моєму профілі .

На цьому місці закінчуються технічні деталі і тривають роздуми про те, що «Apple вже не та»

Після того, як моя музика була майже повністю вилікувана, я зробив ще одну спробу підключити iCloud Music Library - на цей раз попередньо її очистивши. Не допомогло. Знову попередження про «дублікатах», знову катастрофа з метаданими. Правда, вдруге вона вже стільки жаху не навела - буквально в два кліка все повернулося в початковий стан. Однак після цього я остаточно вирішив, що Apple Music - не для мене, і поки її не починаєш, користуватися нею просто неможливо.

Наскільки я знаю, подібне вже відбувалося раніше - під час запуску iTunes Match. Добре, що я не зіткнувся з цим тоді. Але я вже смакую ваші зауваження про те, що «у всіх все нормально працює, а ти мені тут втирати якусь дичину». Так ось немає, не працює. Коментарі на, на і ще кількох показують, що з такою проблемою зіткнулися багато - і нехай на тлі мільйонів користувачів Apple Music це лише одиниці. І цього Apple просто не можна прощати - вже далеко не в перший раз компанія лізе в призначені для користувача файли і без попередження змінює те, що міняти просто недозволено.

Більш того, після подібних пригод довіру до Apple, тож похитнулося після недавніх подій, пропадає остаточно. В кінці-кінців, такого жаху від компанії, адепти якої хизуються фразою «це просто працює», аж ніяк не чекаєш.

Та й як його взагалі можна було знайти?

Новости