dimayakovlev.ru


Создание поальбомных плейлистов в плеере iTunes

Когда-то столкнулся с утверждением: “iPod Shuffle уничтожает привычку слушать музыку альбомами!” Утверждение сильное, позиция утверждающего была безапелляционна. Прав ли был утверждающий? И да, и нет.

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

Такой сценарий использования подходит пользователям, привыкшим слушать музыкальные радиостанции, где транслируются песни разных исполнителей. Но это не значит, что плеер iPod Shuffle категорически не подходит тем любителям музыки, которые предпочитают слушать музыку альбомами, и хотят делать это при помощи такого маленького, удобного для повседневного использования устройства от компании Apple.

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

Кроме необходимости наведения порядка в фонотеке плеера iTunes, желание слушать музыку альбомами на iPod Shuffle требует от пользователя совершения дополнительных действий. Как оказалось, эти действия не очевидны. Из-за чего появляется отношение к плееру iPod Shuffle, как к устройству с урезанными возможностями, для ограниченного круга пользователей.

Решение поальбомного прослушивания музыки при помощи iPod Shuffle лежит на поверхности: плеер поддерживает плейлисты и воспроизведение треков по порядку, а значит пользователь может создавать в библиотеке плеера iTunes поальбомные плейлисты и синхронизировать их с iPod Shuffle. При этом важно давать плейлистам соответствующие альбомам названия, чтобы после синхронизации можно было удобно осуществлять навигацию по ним, ориентируясь на, озвучиваемые при помощи функции VoiceOver, названия плейлистов.

Если фонотека не большая и любимых альбомов в ней не много, создание поальбомных плейлистов не должно доставить неудобства. Другое дело, когда возникает желание создать поальбомные плейлисты для полных дискографий исполнителей - это по-настоящему рутинная работа, которую следует автоматизировать.

Для этого я написали сценарий на языке PHP, работающий с объектной моделью плеера iTunes в Microsoft Windows. Скажу сразу, что у меня не было задачи написать универсальное решение, подходящее для всех, поэтому сценарий решает задачу именно так, как требовалось решить её мне.

<?php

if (php_sapi_name() !== 'cli') {
  exit();
}

$iTunesApp = new COM('iTunes.Application') or die('Unable to load iTunes Application');
// $playlists = $iTunesApps->LibraryPlaylist()->Source()->Playlists();
$selectedTracks = $iTunesApp->SelectedTracks;
if ($selectedTracks === null) {
  die('No track or tracks selected in iTunes library');
} elseif ($selectedTracks->Count == 1) {
  echo '1 track selected in iTunes library. Start creating album playlist...', PHP_EOL;
} else {
  echo $selectedTracks->Count , ' tracks selected in iTunes library. Start creating albums playlists...', PHP_EOL;
}

$playlists = [];
$playlistFolderName = 'TMP - ' . time();
$playlistFolder = $iTunesApp->createFolder($playlistFolderName);
foreach ($selectedTracks as $track) {
  $playlist = $track->AlbumArtist . ' - ' . substr($track->Year, 0, 4) . ' - ' . $track->Album;
  $playlists[$playlist][] = $track;
}
foreach ($playlists as $playlist => $tracks) {
  echo $playlist, PHP_EOL;
  $playlistCurrent = $playlistFolder->CreatePlaylist($playlist);
  foreach ($tracks as $track) {
    $playlistCurrent->AddTrack($track);
    echo "  ", $track->TrackNumber, ' - ', $track->Name, PHP_EOL;
  }
}
if (count($playlists) == 1) {
  echo 'Done! 1 playlist created in Playlist Folder ', $playlistFolderName, PHP_EOL;
} else {
  echo 'Done! ', count($playlists), ' playlists are created in Playlist Folder ', $playlistFolderName, PHP_EOL;
}

Для использования сценария скопируйте и сохраните код в файл, например в директорию с библиотекой плеера iTunes. Запустите плеер iTunes, выделите треки для которых требуется создать поальбомные плейлисты, затем в командной строке выполните команду для исполнения сценария.

php -f create_albums_playlists_from_selected.php

В процессе работы сценария в корне музыкальной библиотеки плеера iTunes будет создана временная папка с именем, состоящим из префикса TMP - и текущей метки времени, содержащая поальбомные плейлисты для выделенных треков с именами, созданными по шаблону album artist - year - album (исполнитель - год - альбом). После завершения сценария временную папку можно переименовать или перенести созданные в ней плейлисты в другие папки, затем удалить её.

Такой вариант автоматизации будет полезен не только пользователям iPod Shuffle, но и тем, кто просто привык использовать плейлисты в своей фонотеке. Поэтому при желании и необходимости можно изменить сценарий: добавить в него сортировку треков по дискам и номерам, разбивку альбомов на плейлисты с номерами дисков, использовать другой шаблон именования плейлистов, объединять их в папки по исполнителям и т.д. Для этого понадобится базовое знание языка PHP и представление об объектной модели плеера iTunes.

Может возникнуть вопрос о том, почему используется PHP? Я уже использовал сценарии на языке PHP для создания лога прослушиваний и скробблинга истории прослушиваний на Last.fm для устройств Apple, не поддерживающих установку скробблера. Поэтому ответ будет простым: для однообразия.

Вместо PHP может использоваться любой другой язык сценариев, позволяющий работать с COM-объектами в Microsoft Windows.