> проекты
Музыкальное хранилище

Введение

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

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

Варианты

      Попробуем рассмотреть различные варианты использования распределенного хранилища музыки и оценить достоинства и недостатки каждого. В идеале необходимо создать аналог peer2peer сети (в локальных масштабах), где каждый участник добровольно предоставляет как свою музыку, так и информацию о ней, то есть ее описание. Для того чтобы стать составным звеном распределенного хранилища, достаточно установить резидентную программу, которая будет следить за структурой коллекции вашей музыки и позволять обращаться как к коллекциям музыки других участников, так и им к вашей. Но тут возникают некоторые сложности в создании такой резидентной программы, касающиеся синхронизации коллекций. Можно рассмотреть немного упрощенный вариант, который позволит понять и отладить механизмы синхронизации, не задействуя при этом других пользователей. Описание коллекций ваших друзей будут храниться на одной машине и свободное процессорное время будет производиться поиск новой музыки в сети, изменений в структуре расположения музыкальных файлов и т.д. То есть по сути, задача управления всеми коллекциями будет осуществляться на вашей машине, что конечно же скажется на загруженности процессора. С другой стороны такой подход позволяет вам удобно использовать распределенное хранилище музыки, недосаждая остальным пользователям сети. На более детальном рассмотрении этого варианта пока и остановимся.

Архитектура решения

       Основным компонентом решения является описание некоторой коллекции, которая располагается на одном компьютере. Описание представляет собой XML-документ, содержащий информацию о компьютере-владельце коллекцией и список исполнителей, следующего вида:

<?xml version="1.0" encoding="UTF-8"?>
<host name="hriak">
  <author name="DJ Ferry Corsten">
    <album name="Sets">
      <song name="global trancemissions 2"
            path="\\hriak\music\global trancemissions 2.mp3"/>
    </album>
  </author>
  <author name="DJ Tiesto">
    <album name="Sets">
      <song name="suburban train" 
            path="\\hriak\mp3\suburban train.mp3"/>
    </album>
  </author>
</host>
       Такое описание структурирует вашу коллекцию, в ней можно хоть что-то найти, на самом деле мало людей приводят свои свалки музыкальных файлов к удобному для использования виду, такое структурирование помогает вам бороться с этим хаосом. А осуществляется это при помощи механизма сканирования коллекции, который по информации из тэгов (tags) mp3-файлов стуктурирует их по исполнителям (сборникам), альбомам и композициям. Этот компонент является в некотором роде интеллектуальным и позволяет распознать где в каталоге лежит полноценный альбом, а где просто сборник композиций, естественно его интеллект можно повышать и в будущем. Таким образом, механизм сканирования формирует основной компонент решения - XML-описание коллекции. В задачу этого механизма также ложится синхронизация коллекции пользователя с этим описанием. То есть операция сканирования по сути является довольно длительной и проводится один раз для новой коллекции, а в дальнейшем просто осуществляется проверка наличия композиций на их месте и поиск только новых. Имея механизм приведения в соответствие файловой структуры коллекции и удобного ее описания, можно перейти к механизму формирования актуального описания распределенного хранилища

      Для возможности унифицированного использования всех коллекций, их нужно собрать в общее описание всех коллекций, где будут отмечены те композиции или исполнители, которые не доступны в настоящий момент, например, из-за того что пользователь просто выключил компьютер. К тому же, часто в разных коллекциях можно найти одинаковые композиции, то есть необходимо определить какая из композиций доступна и скорость воспроизведения какой будет максимальна для вашего компьютера. Такое проецирование описаний коллекций одно на другое и определение доступности композиции осуществляется механизмом формирования актуального описания распределенного хранилища. Механизм состоит их двух составляющих: синхронизатор и объединитель. Первый занимается определением наличия композиции и скорости потенциального воспроизведения с хоста-держателя коллекции, воторой - объединяя все коллекции, завершает формирование актуального хранилища.

Физический уровень

      На физическом уровне решение разделяется на две составляющие: модуль синхронизации коллекций и формирования актуального хранилища музыки, располагающийся резидентно в памяти, а также интерфейсный модуль, предоставляющий пользователю возможность поиска и прослушивания музыки. Первый модуль в автоматическом режиме, в свободное процессорное время, осуществляет поиск музыки в сети и формирует описания коллекций на различных хостах. Второй его задачей является формирование актуального хранилища музыки по запросу пользователя посредством интерфейсного модуля. Интерфейсный модуль представляет собой расширение Windows (shell extention) и встраивается непосредственно в Explorer, таким образом музыкальные файлы из распределенного хранилища доступны для воспроизведения в любой программе - такой уровень интеграции в систему позволяет пользователям работать с музыкальным хранилищем как с аналогичными папками My Documents, My Pictures и т.п.

Интерфейс пользователя

      Основное окно интерфесного модуля представляет собой типичное окно Explorer, из которого доступен просмотр всех исполнителей хранилища, просмотр исполнителей по годам, жанрам и альбомам, а также просмотр содержимого папки Favorites.

Состояние дел

       В настоящий момент реализована только альфа-версия интерфейсного модуля и механизма сканирования. Синхронизация и объединение находятся еще на этапе развития.

 Evgeny Savitsky © 2002-2003